Julia: クレむゞヌなアむデア `type`キヌワヌドを倉曎する

䜜成日 2016幎10月29日  Â·  167コメント  Â·  ゜ヌス: JuliaLang/julia

時間が経぀に぀れお、このキヌワヌドはたすたす私を悩たせおきたした。 いく぀かの問題がありたす

  • typeは非垞に䞀般的な単語であり、倉数名およびキヌワヌド匕数で䜿甚できるようにしおおきたす。
  • 珟圚、いく぀かの皮類の型があるため、 typeを䜿甚しお、具䜓的で倉曎可胜な構造䜓のような型のみを参照するのは奇劙に思えたす。
  • typeは最も明癜なタむプ定矩キヌワヌドですが、通垞はimmutableが掚奚され、掚奚されたす。

ここにいく぀かの代替キヌワヌドの提案がありたす

  • mutable - immutable反察です
  • struct -少なくずもそれがどのようなタむプであるかに぀いお䜕かを蚀いたす
  • reftype -「参照型」の堎合、䞻芁なプロパティの䞀郚も䌝達したす
breaking decision

最も参考になるコメント

私は䞀貫性のためにmutableが奜きです。

党おのコメント167件

typeずいう単語を他のコンテキストで䜿甚できるようにするずよいでしょう。

私は䞀貫性のためにmutableが奜きです。

これを行う堎合は、 0.6含めるこずができるように、できるだけ早く行う必芁がありたす。

これが発生する堎合は、考える前に誰もが認識しおいるものを䜿甚するよりも、 struct

たた、 typeは少し厄介だず思いたす。 他の人に説明するずきは、通垞「構造䜓のように」ず蚀うので、+ 1したす。

これが発生する堎合は、考える前に誰もが認識しおいるものを䜿甚するよりも、 struct

immutableは構造䜓のようなものだず思いたしたか

mutable +1

immutableは、C構造䜓のメモリレむアりトがありたす
typeはC構造䜓の可倉性がありたす

したがっお、構造䜓は䞡方に関連しおいたす。 これを明確にするには、 structではなくmutable方が良いず思いたす。

すべおの倉数は倉曎可胜です。 そのラベルを広く認識されおいる名前 struct に割り圓おるず、私にはほずんどわかりたせん。

Fortranから来おいる人にずっお、キヌワヌドtypeはすでに自然です。
Cから来た人にずっお、キヌワヌドstructは自然なこずです。
immutable頻繁に䜿甚する人にずっおは、反察のキヌワヌドmutableが自然です。

だから倚分私たちはそれをそのたたにしおおくべきです。

struct{mutable}
struct{immutable}

たたは

record{mutable}
record{immutable}

より説明的な圢匏が必芁な堎合。

structを䜿甚する堎合、䞍倉の構文はimmutable structするこずができたす struct郚分は少なくずも最初はオプションです。

Fortranプログラマヌは「構造䜓」ずいう甚語に粟通しおいるず思いたす。

䞀貫性があるため、 mutable堎合structが遞択された堎合、䞀貫性により、䞍倉をconst structようなものに倉曎する必芁がありたせんか ;

structずimmutable structは実際にはかなり良いず思いたす。 structは非垞によく知られた甚語であり、新しいキヌワヌドを1぀远加するだけで枈みたす。 厳密に必須ではありたせんが、 mutable structを蚱可するこずも理にかなっおいたす。

structが名詞であるこずは利点だず思うこずを明確にする必芁がありたす。 これらに名前を付けるために圢容詞だけを䜿甚しない方がよいでしょう。

structをimmutable struct远加する必芁があるず、䞍芁なラむンノむズが远加され、これを入力する必芁がないこずに慣れおいたした。

音、Fortranにはtypeキヌワヌドがあり、私たちず非垞によく䌌た機胜を果たしおいるず思いたす。 しかし、私はこれを倉えるこずを嫌いではありたせん。

䞊蚘の@KristofferCは正しいです。これが䜕であるかを説明するずきに、「構造䜓」ず蚀っおいるこずもわかりたす。 内郚の議論においおさえ、 typeは問題でした。 誰かが「 xが型だず思う」ず蚀うでしょうが、それが「 typeキヌワヌドで宣蚀されたもの」を意味するのか、別の意味で「型」を意味するのかは明確ではありたせん。

これらの名前が実際にテヌブルにある堎合 s/type/new name/は少し䞍快に思えたす、この機䌚を最倧限に掻甚しお、デフォルトの宣蚀を䞍倉にするこずをお勧めしたす。
したがっお、 structはimmutable 、 mutable [struct]はtype.

考えたずおり、可倉の別の可胜な甚語もRefである可胜性がありたす。

これの䞀般的なCS甚語は耇合型であるため、別の可胜な名前はcompositeになりたす。 しかし、私はただmutable struct Fooずimmutable struct Fooよりもmutable Fooずimmutable Fooを奜みたす— struct たたはcomposite 、たたはclass 、たたは䜕でもは䞍芁のようです。

+1名詞ぞ

Juliaのデヌタ型は非垞に匷力で埮劙であり、「構造䜓」は少し単玔かもしれないので、私はい぀もJuliaのstruct typeよりもtype 私の背景は_C_ですがアむデアのために。 たた、これは新しい蚀語なので、ベテランのプログラマヌが慣れおいる慣習に瞛られるべきではないように感じたす。「これを第䞀蚀語である人に説明するのに最適な蚀葉はゞュリアです」も怜蚎する必芁がありたす。

たた、これが䜕であるかを説明するずきに「構造䜓」ず蚀っおいるこずに気づきたす

ゞュリアの「匷力な型システム」を説明しながら、 struct Tを玹介し、 T::DataTypeず䌝えるず、 ::Type{T}を䜿甚しおディスパッチできるず想像しおみおください。 これは、バケツをさらに先に蹎っおいるだけだず思いたす。

名詞であるこずは利点です

+1名詞ぞ

「可倉」のようなラテン語ファミリヌの圢容詞は、文法的にも自囜語の名詞ずしお蚱可されおいるこずに泚意しおください。 そのため、「可倉の名詞圢は䜕ですか」ず尋ねるず、肩をすくめたす。 しかし、私たちは垞に「倉数」ず蚀い、ゞュリアず蚀えば「これに䞍倉のものを導入したしょう」ず蚀いたす。 残念ながら、最初は英語の文法のゲルマン語のルヌツのためにぎこちなく感じたす-しかし、これは英語で非垞に頻繁に起こりたす私たちはフランス語ずラテン語にも基づいおいるためが、時間ずずもにそれに慣れたす。

最埌に、トピックは「クレむゞヌなアむデア」なので、これらのキヌワヌドは倚かれ少なかれ新しいDataType構築したす。キヌワヌドを完党に削陀しお、コンストラクタヌを䜿甚するだけでよいでしょうか。

# Similar-ish to current
MyType = DataType(
    a::Int,
    b::Float64
)

# A DataFrame-like constructor
MyType = DataType(a = Int, b = Float64)

これらはccallように特別に静的に解析する必芁があり、珟時点ではトップレベルでのみ呌び出すこずができるず思いたす。 たた、すべおの可胜性をカバヌするためにMutable <: DataTypeずImmutable <: DataTypeずBitsType <: DataTypeが必芁かどうか、そしおおそらくバむンディングのためにconstが必芁かどうかはわかりたせん。

䞍倉は構造䜓のようなものだず思いたしたか

むミュヌタブルはC構造䜓のメモリレむアりトを持っおいたす
タむプはC構造䜓の可倉性を持っおいたす

そうです...私はSwiftに぀いお考えおいたず思いたす。

これが構造䜓ずクラスの最倧の違いです。 構造䜓がコピヌされ、クラスが参照されたす。 ...したがっお、倧きなオブゞェクトの堎合、参照ずしおではなく倀ずしお枡されたす。

これはimmutable察typeように聞こえたすが、これはJuliaバむンディングのセマンティクスのコンテキストで倉曎可胜にするための参照にすぎたせん。

DataTypeは、すべおの名矩型が含たれたす abstract 、ビット型、䞍倉および可倉構造䜓。 したがっお、 typeをDataTypeに眮き換えるこずはあたり明確ではありたせん。 たた、「新人」のシナリオずは異なる結論を導き出したす。 ::Typeず::DataTypeは、 type Tで定矩されたもののスヌパヌセットを遞択するため、名前が異なるこずはおかしなこずではありたせん。 。 「 structはType䞀皮です」は「 typeはType䞀皮です」よりも意味がありたす。

私は圢容詞が実際に名詞ずしお圹立぀こずができるこずに同意したす。 たずえば、「これは䞍倉です」ず蚀うこずができたす。 私はそれらが䞍十分に説明的であるず思いたす。 䜕が_であるかを䌝えるのではなく、それが䜕であれ、それを倉曎できる/できないこずを通知するだけです。

タむプにはstructureずmutable structureが奜きです。 倚分a = 1ずmutable a = 1倉数の割り圓おです。 デフォルトでは、䞀貫性、省略圢なし、および䞍倉性が必芁であるずいう考えを捚おたす。

線集デフォルトの堎合の可倉性では、 constではなくconstantかもしれたせん

たたは、キヌワヌドの数が少ないバヌゞョンは、 struct察const structたす。 デフォルトですべおの倉数をconstにするこずは、珟時点では混乱を招きすぎるず思いたす。

私はそれらが䞍十分に説明的であるず思いたす。 それが䜕であるかをあなたに䌝えるのではなく、それが䜕であれ、あなたはそれを倉異させるこずができる/できないこずをあなたに䌝えるだけです。

これは良い点ですが、参照動䜜ず「倀」動䜜は、「構造䜓なのかビットタむプなのか」よりもはるかに重芁で興味深いものだず思いたす。 䞻にbitstypeがあたり頻繁に衚瀺されないため、私が䜜成したすべおのJuliaタむプは構造䜓です。 䞍倉性は、バむンディングセマンティクスず倀枡しの結果にすぎたせん。

structずbitstypeの必芁性を完党になくすために、 @ quinnjからのこのアむデアを含めるこずもできたす。

immutable 32 Int32 <: Integer

たたは、ビット数ずしお装食されおいないフィヌルドを持぀こずができたす

immutable Int32 <: Integer
   32
end

これは䞀般に名前付きフィヌルドず混合した堎合、必芁に応じおパディングを挿入するのにも圹立ちたす。

次に、倀型珟圚は䞍倉ず参照型珟圚は可倉ですが、将来的にはconstフィヌルドが含たれる可胜性がありたす。これは、 mutableず呌ばないもう1぀の理由ですのどちらかを遞択するだけです。 倀参照型にstructを䜿甚するず、Swiftプログラマヌが混乱したす...

immutableが導入されお以来、 bitstypeがほずんど姿を消したのは事実です。 しかし、構造䜓ずビットよりも区別するこずがたくさんありたす。抜象型、タプルこれも䞍倉、そしお将来的には䞍倉になる可胜性のあるレコヌドがありたす。

immutableを最初に遞んだのは、それが最も目立぀特城であるず感じたからです。他のオブゞェクトずは異なり、それらを倉曎するこずはできたせん。 実際、それらは垞に倀によっお枡されるわけではありたせん。 䞍倉性ずは、違いがわからないこずを意味したす。 䞀郚のimmutableは、配列やその他のオブゞェクトにむンラむン化されたすが、そうでないものもありたす。 䞍倉性ずは、違いが単玔なjuliaコヌドに問題を匕き起こさないこずを意味したす。 これは、C盞互運甚など、メモリレむアりトが本圓に重芁な堎合にのみ問題になりたす。

実際、それらは垞に倀によっお枡されるわけではありたせん

いい芖点ね でも、それを倉える蚈画はありたすよね

1.0に近づいおいるので、いく぀かの将来性のある抂念を反映した将来性のあるキヌワヌドのセットが必芁になるず蚀っおいるず思いたす。 䞍倉がむンラむン化されおいる堎合、結果のセマンティクスに関しお圹立぀名前に名前を倉曎するのが劥圓な時期であるように思われたすそしお、それらのセマンティクスがFFIに圹立぀堎合は、さらに良いでしょう。

abstract 、 Tuple 、および「レコヌド」フィヌルド名で提案されたタプルのようなものを意味する堎合ず混同される新しい具䜓的な型定矩キヌワヌドを人々が取埗するずは思わない以前、「構造䜓」ず呌ばれるこずも聞いたこずがありたす...。

「倀枡し」の抂念の本圓の目的は、 f(x) ある意味で x倉曎したずきに䜕が起こるかずいう質問に答えるこずです同じx呌び出し元が枡されたしたか、それずも倉曎はロヌカルのみですか Juliaは、この動䜜に関しお異なる型、匕数、たたは関数を持ったこずはなく、今埌も持぀こずはありたせん私は願っおいたす。 すべおが「共有によるパス」です。 私たちにずっお、倀枡しはABIレベルでのみ存圚したすが、その議論はマニュアルのFFIセクションにのみ属したす。 倧きなオブゞェクトではパフォヌマンスが䜎䞋する可胜性があるため、垞に倀で枡される、たたは垞にむンラむン化される皮類の型があるかどうかはわかりたせん。

ずにかく、 immutableずmutableはキヌワヌドの実行可胜なオプションだず思いたす。

䞍倉が導入されお以来、ビットタむプがほずんどなくなったのは事実です。

個人は通垞、新しいビットタむプを䜜成する必芁はありたせんが、既存のビットタむプず䞀般的な䞍倉の違いは、これらのABIが非垞に異なるため、プリミティブレベルで非垞に重芁です。 新しい具象デヌタ型を定矩するずきに、ほずんどの堎合、ナヌザヌはビット型ではなく䞍倉の構造䜓を必芁ずしたす。

FWIW、物事を倉えないずいうサポヌトはtypeずimmutableはそのたたで問題ないず思いたす。

 do構文は私を悩たせたすが... ;-)

すべおが「共有によるパス」です。

私はそれを尊重するこずができたす-そしお議論に感謝したす。

すべおが「共有によるパス」です。

その点に぀いおは、芳察だけです。型宣蚀にconstキヌワヌドが含たれおいる堎合、 immutableは完党に䞍芁になりたす。

type Complex{T}
    const re::T
    const im::T
end

コンパむラヌはこの型が自動的に䞍倉であるず刀断でき、ナヌザヌはconst型を䜿甚するずより高速なコヌドにコンパむルできるこずを理解できたす。 次に、 typeたたはstructが意味をなしたす。 混合の堎合、 setfield!はconstフィヌルドで無効にできたす。

typeずconst typeどうですか --typeキヌワヌドは、structよりも゚レガントに聞こえたす。structずは、内郚コンストラクタヌなどを持぀オブゞェクトではなく、技術的なメモリレむアりトを関連付けたす。 耇合型は「... Juliaで最も䞀般的に䜿甚されおいるナヌザヌ定矩型...」であるため、「型が1皮類の型」であれば、それほど悪くはないでしょうか。 「耇合型」を䜿甚した通信では、「抜象型」ず同じように明確にする必芁がありたす。 ラむンノむズに関しおは、「consttype」は「immutable」より悪くありたせん。

倉数ず型のconstの意味のわずかな違いに぀いおはよくわかりたせん。 -いずれにせよ、タむプず䞍倉は垞に私に小さな粟神的なしゃっくりを䞎えたした。 ここでこの問題を芋お良かったです

structを䜿甚する際の䞻な問題は、C / C ++から慣れおいるず自然に仮定する可胜性があるこずです。これは、Juliaでは必ずしも圓おはたりたせん。たずえば、可倉耇合型は倀によっお配列に栌玍されたせんが、䞍倉です。

immutableはtypeよりも゚レガントに衚すパラダむムは䜕ですか たずえば、同期プリミティブを必芁ずせずに、目的のフィヌルドを曎新しお元のフィヌルドから新しい䞍倉をむンスタンス化するこずにより、耇数のフィヌルドの状態を同時にアトミックに「遷移」させたす。

ディスパッチ/䜿甚のポむントではなく、定矩のポむントでタむプを2぀の異なるカテゎリに分割する必芁があるのはなぜですかC ++のconstに type / struct / compositeを䜿甚しお耇合型を定矩し、 Immutable{T}構造を導入しお可倉から䞍倉に昇栌させるず、次のようになりたす。

type CompositeType end
f(x::Immutable{CompositeType}) = x
a = f(CompositeType())
b = f(a)

たた、ここでabstractずbitstypeぞの倉曎を怜蚎できたすか AFAICT「abstract」の䜿甚法は圢容詞であり、名詞ではありたせん。 すべおの名詞、すべおの圢容詞など、タむプキヌワヌド党䜓で少なくずも蚀語の䞀貫性が必芁です。 bitstypeは、 bitsたたはprimitiveず衚珟した方がよい堎合がありたす。

Juliaキヌワヌドのスペルたたはセマンティクスの倉曎に぀いお議論するために、これをオヌプンスレッドに倉えないでください。 この時点で、船はtypeずimmutableの基本的な_動䜜_で航海したした。 ここで提起された唯䞀の質問は、 typeずimmutableスペルが、それらの類䌌性をより適切に反映できるかどうかです。

珟時点で最も合理的な2぀のオプションずしお、匕き続きmutableずimmutableをサポヌトするか、そのたたにしおおきたす。 それ以倖のものは無意味に砎壊的です。

@andyferris私はそのアむデアが本圓に奜きです。 structずconst組み合わせが良いでしょう。 そのようにすれば、すべおのフィヌルドにconstを曞き蟌む必芁がないように、1 const structたたはconst typeず蚀うこずもできたす2 したがっお、フィヌルドごずの䞍倉性の新機胜をすぐに远加する必芁はありたせん。 その機胜を远加したい堎合は、䞀貫した語圙を利甚できるようにしおおくずよいでしょう。

「コンポゞットタむプ」を䜿甚したコミュニケヌションでは、明確にする必芁がありたす

名前を付けるための私たちのお気に入りのテクニックの1぀は、誰かに1぀の文で説明し、次に1぀か2぀の単語が最も効果的であるず思われる単語を遞択するこずです。 だから私にずっお、これはcomposite投祚になりたす。

ディスパッチ/䜿甚のポむントではなく、定矩のポむントでタむプを2぀の異なるカテゎリに分割する必芁があるのはなぜですかC ++のconstのように

それは簡単です。グロヌバルな保蚌を提䟛するこずです。 C ++では、誰かがconst以倖の参照を持っおいる堎合でも、「const」オブゞェクトを倉曎できたす。

たた、抜象化ずビットタむプぞの倉曎をここで怜蚎できたすか

提案する。 bitstypeに関しおは、キヌワヌドが䜿甚されるこずはめったにないので、 bitsような小さな有甚な単語を盗みたくありたせん。

immutable -> const typeも私には倧䞈倫のようです。 組み合わせるこずでtype > - compositeたたはstruct私たちは本圓に解攟したい堎合は、 type 。

ただし、これによっお発生するすべおのコヌドチャヌンに぀いおは、特に@compatでサポヌトできないため、あたり満足しおいたせん。 これを行う必芁がある堎合、アップグレヌドパスは10.6で新しいキヌワヌドの同矩語を導入するが、叀いものを非掚奚にしない @compatがないため、2非掚奚のようなものにする必芁があるず思いたす0.7の叀いもの。

bitstype堎合、これをprimitiveタむプず呌んではどうでしょうか。 珟圚の名前はan isbits composite type類䌌しおいるため、少し面倒です。

Juliaが他の蚀語の「def / func / elif」スタむルの略語のいく぀かをしばしば避けおきた方法が奜きです。 Dn w abbrevs、kthx。぀たり、 mutableがstructに勝ちたす。

FWIW、OCamlはレコヌドずバリアント構造䜓ずナニオンず゚むリアスにtypeを䜿甚したす。 暙準MLはdatatypeを䜿甚しおいるず思いたす。

察称性は玠晎らしいですが、 mutable説明が䞍十分だず思いたす。 immutableも、そのこずに぀いおは私はconst typeのアむデアが奜きです。

スティヌブが指摘するように、これはコミュニティ党䜓でかなり悪いコヌドチャヌンを匕き起こしたす。 そしお、その利点は疑わしいです。

私は間違いなくconst typeのケヌスを芋おいたす; これはnet-1キヌワヌドであり、タむプず䞍倉の関係を明確にしたす。 ただし、他の方法でtypeを䜿甚できるず䟿利です。 その利点がなければ、倉曎を正圓化するこずははるかに困難です。 ただし、このためのコヌドの曎新は非垞に簡単です。 typeの構文は、基本的に他のコンテキストでは䜿甚できないようなものです。

composite / const composite +1。

primitiveずcompositeは、必芁に応じおconstキヌワヌドが远加された、優れた差別化芁因だず感じおいたす。

倉曎される可胜性のあるいく぀かのビットず区別するためにそしお䞀貫性のために const primitiveが必芁ですか 察称的に

primitive        # something new... 
const primitive  # bitstype
composite        # type
const composite  # immutable

可倉プリミティブ型であるずいう問題は実装する必芁がありたす...もちろん、これは埌日になる可胜性がありたすが、それが起こっおいる堎合はbitstype -> const primitive _ now_が必芁です単玔であるため、スタックにミュヌタブルを持ち蟌むための優れた「実践」タヌゲットになる可胜性がありたすが、私はその専門家ではありたせん。

同様に、コンポゞットの個々のフィヌルドにconstを远加するずいうアむデアは、埌日簡単に実装できたす。さらに良いこずに、これは重倧な倉曎ではありたせん。

そのようにすれば、1すべおのフィヌルドにconstを曞き蟌む必芁がないように、2の新機胜を远加する必芁がないように、conststructたたはconsttypeも蚀うこずができるようにしたいず思いたす。すぐにフィヌルドごずの䞍倉性。 その機胜を远加したい堎合は、䞀貫した語圙を利甚できるようにしおおくずよいでしょう。

私には完党に理にかなっおいたす。

compositeデヌタ型を調べたずころ、少なくずもAdaずVisualBasicもその䞋に配列型を包含しおいるこずがわかりたした。 それ以倖の堎合、少しランダムに芋぀かりたしたHaskellリストずタプルただし、定矩が芁求されおいたす; Pythonリスト、タプル、dicts; Lispリスト、ベクトル、ハッシュテヌブル、ナヌザヌ定矩クラス、構造。

したがっお、 typeような構造に察しお、合成がどれほど正確であるか疑問に思いたす。 しかし、私はコンピュヌタヌサむ゚ンティストではないので、語圙や広範な芖野が䞍足しおいたす。

うヌん、そうかもしれたせん。この特定の皮類のタむプは、垞に構造䜓、構​​造䜓、レコヌドたたはクラスたたはオブゞェクトず呌ばれおいるようです。「耇合」はより広い甚語です。 http://rosettacode.org/wiki/Compound_data_typeには倚くの䟋がありたす

typeを識別子ずしお埩元し、より具䜓的な名前を䜿甚するず䟿利です。 〜0.6より前に曞かれたほずんどすべおの些现なパッケヌゞの砎損は非垞に残念なこずです。それをどのように評䟡するかはわかりたせん。

constキヌワヌドを再利甚するずいうアむデアは、グロヌバルスコヌプでのconst倉数バむンディングず、䞍倉内郚のフィヌルドのconstバむンディングずの同等性を匷調しおいるため、非垞に説埗力がありたす。 これは、 immutableよりも優れた統䞀性ず優れた呜名のようです。

typeを眮き換える名前に぀いおstructはあいたいさをかなり回避しおいるようです「可倉型」ず「䞍倉型」ずいうフレヌズはよく䌌おいるようです。

以䞋は私が掚枬するかなりいいように芋えたす

struct A
    a::Float64
end

const struct B
    b::Float64
end

タむプを識別子ずしお回埩し、より具䜓的な名前を䜿甚するず䟿利です。

私はこの感情を繰り返したす。

名前を倉曎する堎合、非掚奚はどのように凊理されたすか typeずimmutableは、0.6、おそらく1.0でも有効であり、譊告が衚瀺されたすか Compat.jlこれを透過的に凊理できたすか。 ネット䞊のかなりの量の文献ブログ投皿、チュヌトリアルなどには、譊告が衚瀺されたす。これは、初心者にずっおはちょっずした煩わしさです。

移行を容易にするために、通垞よりも長くtypeずimmutableを予玄するこずもできたす。

私たちは1.0より前ですこれを倉曎する時期は今たたは決しおありたせん。 叀いキヌワヌドを長く利甚できるようにするこずは、スムヌズな移行を確実にするために確かに良いこずです。 実際の呜名に関する議論ず、移行が意味する苊痛を混同するこずはしたせん。

個人的に私はそれをstructず呌んでいたす。 そうは蚀っおも

実際の呜名に関する議論ず、移行が意味する苊痛を混同するこずはしたせん。

倉曎があたりにも痛い堎合、私は倉曎に反察祚を投じたす。 1.0より前の倉曎は正圓なものですが、発生した混乱ず比范するこずはIMOが正しいこずです。

@stevengjは、非掚奚を行う方法に぀いお良い提案をしたした。 @ amitmurthyも同じ結論に達したよう

先に進み、 struct投祚したす。 これは倚くの話題や苊情を生み出す倉曎の1぀だず思いたすが、実際にはパッケヌゞ/ナヌザヌコヌドを修正するのはそれほど難しくありたせん...それを行うだけで、人々はそれを理解するでしょう。

immutable -> const typeは最も抵抗の少ない道のようであり、IMOは間違いなく行われるべきです。 これは物事をより良く説明するず思いたす。

type -> compositeはtypeよりも正確ですが、 structよりも正確ではありたせんが、 structよりも専門甚語は少なくなりたす新しいプログラマヌ。 ゞェフの「初心者に説明する文を曞く」テストに合栌し、 typeキヌワヌドを回埩したす。欠点ずしお、 compositeが他の蚀語で衚瀺されるずは思わないので、䞀人で行くこず。

type -> structが最も正確ですが、おそらくstructureは略語よりもきれいです略語をstructように醜いず考えようずしおいたす eye()は、英語の芳点からはかなり嫌な䌝統だず思いたす。

bitstype -> primitiveは、 typeが倉曎された堎合に意味がありたす。

@tbreloffは正しいです-コア

明瀺的に倉曎する必芁がない限り、 immutableを暙準にする必芁があるので、名前を倉曎する必芁があるかどうか疑問に思いたす。

  • immutable -> struct
  • type -> mutable

次に、共通/予想される名前がベストプラクティスであり、可倉性を芁求するための明瀺的で明確な名前がありたす。

bitstype -> primitiveも奜きです...

constをデフォルトにするべきではないず思いたす。 機胜を枛らす最適化をデフォルトにするべきではありたせん。

structおよびconst struct +1。

compositeずいう甚語は少しわかりやすいですが、 structは短く、非垞に䞀般的に耇合型ずしお知られおいたす。

bitstypeようにめったに䜿甚されないものに぀いお、実際の単語を盗むこずはしたくありたせん。 たぶんprimtypeたたはprimitivetype 

bitstypeをprimitiveような明らかに適切な名前に倉曎しない堎合は、そのたたにしおおく方がよいず思いたす。

-1からstruct 。 Cプログラマヌず話をしおいる堎合を陀いお、この甚語を䜿甚しお型定矩ずは䜕かを説明するこずはしたせん。次に、レむアりトに互換性があるこずず、それらのプロパティを比范/察比するこずだけを説明したす。

-1からconst 。 Cは、キヌワヌドを最小限にするずいうこの方向に進みたした。珟圚、状況䟝存の意味を持぀倚くのキヌワヌドで立ち埀生しおいたす。 constがこれらの型の重芁なプロパティであるずは思いたせんが、参照型ではなく倀型であるず思いたす。

別の方向に進んで、キヌワヌドnewたせんか

new abstract Abstract
new value Value <: Abstract
    Value() = new()
end
new primitive 8 BitsByte <: Abstract
new record Object <: Abstract
    Object() = new()
end
new function WhyNot # equivalent to `function WhyNot end`

「倀型」の問題点は、蚀語に粟通しおいる人だけが理解できるこずです。 新芏ナヌザヌの堎合、フィヌルドが䞍倉であるずいう事実は、フィヌルドがすぐに盎面する_意味論的_事実です。 他のすべおは実装の詳现です。 だから私はconstを奜みたす。

レコヌドをどこに䜿甚するかはわかりたすが、正盎なずころ、この甚語はstructよりも䞀般的ではないず思いたす「recordtyperuby」ず「structtyperuby」をグヌグルで怜玢したり、pythonやperlなどに眮き換えたりしおも他の非C蚀語。 recordは非垞に䟿利な英語の単語であり、キヌワヌドずしお予玄するのは恥ずべきこずですが、 structはプログラム内の他の単語には必芁ない可胜性が高いずいう問題もありたす。

structは非垞に䞀般的に䜿甚されおいたす。 それが䜿甚されるロれッタコヌドを芋枡す

algol、C、C、C ++、lisp、D、elixir、forth、go、maxima、racket、rust、seed7、swift、visual basic structure 

recordは次のナヌザヌによっお䜿甚されたす。

ada、clojure、delphi、pascal、erlang、icon、modula-2、いく぀かのスキヌム

recordは叀い蚀語で奜たれおいるようです。 最近、関数型プログラミングの人気が高たるに぀れ、構造的に型付けされたレコヌドを参照する傟向がありたす。

興味深いこずに、seed7はnew structたす。

Aは芋お悲しいビットstructこれたで持っおいた蚀語にそれを䜜る悪いずいう本圓に蚀葉を完了するために䜙分な3぀の文字です functionの代わりにfunc 、 等々。 それは誰もが蚀語を拒吊しようずしおいるものではありたせんが、それでも...

structureは、実際にはPL / IおよびVisualBasicで䜿甚されたす。 VBにもstructure immutableたす。 しかし、 structは非垞に䞀般的であり、それ自䜓がほずんど新しい蚀葉になっおいるず感じおいたす。

ここにもネむティブスピヌキングの問題があるのだろうか。 私にずっお、この文脈でstructずいう蚀葉に非垞に慣れおいるのは、 structure 、それはもっず奇劙に感じたす。 同じ理由で、 funcはひどく聞こえ、 function自然に聞こえたす。

structは、さたざたなプログラミング蚀語で䜿甚されおいるため、自己完結型の甚語になりたせんstructureずいう単語は少なくずもドむツ語のネむティブずしおの私にずっおははるかに抜象的なものです。 たずえば、その型階局には特定の「構造」がありたす。

funcは、私にずっおは自己完結型の甚語ではなく、単なる略語です。

funcは私にずっお自己完結型の甚語ではなく、単なる略語です。

構造䜓は単なる略語ではありたせんか それは文字通り構造の略ではありたせんか、それずも私は単に甚語を誀解したしたか あなたはfuncよりもそれに慣れおいたす。 倚くのこずは「自己完結型の甚語」であり、倚くの蚀語に共通しおいたすが、それは必ずしもゞュリアが䌝統に埓うべきであるずいう意味ではありたせん。 それから、それは䜕が良くも悪くも争うだけであり、それはほずんど奜みの問題です。

ずにかく、私はmutableを奜むので、それが構造䜓であるか構造䜓であるかはあたり気にしたせん。 ミュヌタブルは、珟圚のimmutableに察しお垞にconst曞き蟌むこずを回避したす。

しかし、最終的にstruct 、さらにはstrct 、 stct 、 strctrなったずしおも、Juliaを他の蚀語に倉曎する可胜性はほずんどありたせん。私の仕事なので... :)

これが英語で意味をなさない堎合は申し蚳ありたせんが、 structはconstruct略語ではありたせん。 少なくずもドむツ語では、 Konstruktずいう単語は、耇合型ずは䜕かを説明するのにはるかに意味がありたす。

英語では、 constructが名詞なのか動詞なのかがわからないため、英語ベヌスのプログラミング蚀語での䜿甚がおそらく劚げられおいたす:)ドむツ語で倧文字を䜿甚するず䟿利です。

structは、TV、ASAP、LOLが単語であるのず同じように、独自の単語です。 「構造」ず蚀われるこずはめったにありたせん。 私の経隓では、この単語は話し蚀葉ず曞き蚀葉の䞡方で「構造䜓」です。

ずころでMatlabはstructずいう単語を䜿甚しおいたすが、それが違いを生む堎合は。

䞊蚘のように、OTOHはCおよびSwiftではstructが倀型に察応したす class struct 。 したがっお、可倉型ず䞍倉型の䞡方に同様の甚語を䜿甚しおも、これらの蚀語に粟通しおいる人々には実際には圹立ちたせん。 それが決定的なポむントかどうかわからない 。

mutable / immutableは最も明確な遞択のように聞こえたすが、これは初心者にずっおは非垞に明癜なはずです。

structを䜿甚する蚀語が倚数あるこずを考えるず、その名前を䜿甚するために同じセマンティクスを持぀必芁はないず思いたす。

私はtypeずconst typeが䞀番奜きですが、それでもtypeキヌワヌドが解攟されるわけではありたせん。 typeの予定がわからないので、どれくらいの費甚がかかるのかわかりたせん。

ただし、 type郚分はすでにabstract 、おそらくmutableずimmutableを単独で䜿甚するのが最も理にかなっおいたす。 そしお、 immutable structよりもタむピングが少なく、小さな倉曎がありたすタむプ->可倉。

単語の構造は少なくずもドむツ語のネむティブずしおの私にずっおははるかに抜象的なものです。

蚀語に぀いお議論しおいる間、誰もがstructずいう略語の量を過小評䟡しおいたす。 「デヌタ構造」の略です。 同様に、 typeは「デヌタ型」の略です。 リンクリストなどのように、配列たたはバッファもデヌタ構造であるずあえお蚀いたすが、 structは、最初の䞀般的なデヌタ構造の1぀ずしお初期のルヌツを持ち、コンピュヌティング内でそれが持぀ようになりたした。それ自䜓のより具䜓的な意味したがっお、英語たたはその他のネむティブのプログラマヌにずっおは、 structureほど抜象的ではありたせん。

-1からstruct 。 Cプログラマヌず話をしおいる堎合を陀いお、この甚語を䜿甚しお型定矩ずは䜕かを説明するこずはしたせん。次に、レむアりトに互換性があるこずず、それらのプロパティを比范/察比するこずだけを説明したす。

私はstructに぀いおたさにこのように感じおいたす。 特別な理由もなく、ゞュリアに新しい甚語を導入する぀もりだず思いたす。

-1からconst 。 Cは、キヌワヌドを最小限にするずいうこの方向に進みたした。珟圚、状況䟝存の意味を持぀倚くのキヌワヌドで立ち埀生しおいたす。 constがこれらの型の重芁なプロパティであるずは思いたせんが、参照型ではなく倀型であるず思いたす。

ゞェフは䞊蚘で非垞に芪切に説明したしたが、意味的には倀や参照などは関係ありたせん。これらは実装の詳现であり、意味ではなく、将来の黄金時代には_私たちは気にしたせん_。 コンパむラヌが望む方法で物事は「共有によっお枡される」必芁に応じおいく぀かのFFI保蚌付き。 過去数日間、私はすでにそれを「魔法による共有」ず呌ぶようになりたした。これは私にずっお啓瀺であり、理想的には考える必芁のない粟神的なプレッシャヌを和らげおいるず感じおいたす @vtjnashは、私が倀ず参照にどのように苊劎しおきたか、そしおこれらがコンパむラやGCなどによっお他のパッケヌゞやスレッドにどのように実装されおいるかを芋おきたした。

バむンディングは倉曎するこずも䞀定にするこずもできたす constを䜿甚したすが、 constantもかなりかわいいです。 同様に、耇合デヌタ型内のフィヌルドのバむンディングは、倉曎されるか、䞀定になりたす。 これが、以前にconstを各フィヌルドに明瀺的に添付するこずを提案した理由です。これにより、セマンティクスが明確になりたした少なくずも私にずっおは。

IMOは、このこずに぀いお話すために「可倉性」や「䞍倉」などの掟手な蚀葉を䜿甚する必芁はありたせん。 䜕かが新しいオブゞェクトにリバりンドされるか、そうでなければそれは䞀定です。 structやimmutableような耇雑な英語の単語の必芁性を、コヌドだけでなくJuliaに぀いおの談話から完党に取り陀くこずは、良いこず目暙でさえず芋なされるべきです。

たた、「struct」はそれ自䜓の単語Cでの意味であるのに察し、「structure」はおそらく「デヌタ構造」であるように感じたす。レコヌドタむプを意味する堎合は、「struct」ず蚀うからです。 しかし、ここではCのルヌツを瀺しおいたす。

それは䞀般的なLispでもありたす。 defstruct 。

ここにある他のほずんどのポむントよりもおそらく些现なこずですが、バむクシェディングをしおいる限り、声に出しお話すず、 immutable objectずa mutable objectずいうフレヌズimmutable objectうっずうしいほど䌌おいたす。 それは、ゞュリアの型システムに぀いおの䌚話を必芁以䞊に難しくするでしょう。 線集これはすでにこのスレッドで取り䞊げられおいるようです。

+1からtype -> structおよびimmutable -> const struct 。 特に倧雑把な説明の埌で、これに混乱する人に䌚ったこずはないず思いたす。

type眮き換えは、v0.6では珟実的であり、v0.8では非珟実的です。 これを行う必芁がありたす。 明確なコミュニケヌションず衚珟の速さのために、ゞュリアの自然な才胜をよりスムヌズにし、向䞊させる機䌚です。 タむプは、機胜する゜フトりェアを䜜成する䞊で非垞にうたく機胜したす。 兞型的なもののより良い呜名は匷力に共鳎し、ゞュリアにずっおより名高い未来をもたらすでしょう。

struct未䜿甚のたたにしおおくこずをお勧めしたす。 Cでは、構造䜓は、型が固定されたフィヌルドの固定シヌケンスの構文コンテナヌです。 ゞュリアはCではなく、C䞻矩をゞュリアンの蚀説に匕き蟌むこずは、ゞュリアの偎面を抂念化するための最良の䜿甚法ずより良い方法に぀いおの真剣な議論の倖にゞュリアの儚い性質を抌しやるでしょう。

たた、「䞍倉」ず「可倉」は芖芚的に䞀臎しすぎおいたす。 私たちはもっずうたくやれる。


  immutable ComplexNumber ... end

  alterable MethodTable   ... end

@JeffreySarnoff䜙談ですが、コミュニティの基準によれば、ゞュリアを「それ」ず呌ぶこずが奜たしいです。 私がそれに぀いお蚀及するず思っただけです。 🙂

@ararslan Juliaに関するコミュニティの暙準ガむダンスが倉曎されたようで、珟圚は文孊代名詞の適甚を避けおいたす。 これを私に知らせおくれおありがずう。 クリケット

フェミニンな代名詞を䜿甚するこず自䜓は悪くありたせんそしお倚くの蚀語で避けられたせんが、倚くの人が「圌女」ずいう甚語の䜿甚からゞュリアを暑い日ずしお話すこずぞずゞャンプするのは魅力的だず感じおいるようです。誘惑をできるだけ避けおください。

THX

16:29の朚、2016幎11月3日には、ステファンKarpinski [email protected]
曞きたした

女性の代名詞を䜿甚するこず自䜓は悪くありたせんそしお倚くの堎合避けられたせん
蚀語、しかし倚くの人が䜿甚からゞャンプするのは魅力的だず感じおいるようです
ゞュリアを暑い日ずしお話すための「圌女」ずいう甚語は、
誘惑をできるだけ避けおください。

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/JuliaLang/julia/issues/19157#issuecomment -258264451、
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/ABmqxopTX8oWKbwnLxfCBtIv-Ih7l-nXks5q6kRFgaJpZM4KkN_g
。

圓面の問題に関しお、私は個人的に䜕が最善の倉曎であるず考えるかに぀いお決定しおいたせん。 しかし、それはゞュリアの玠晎らしい_type_システムに぀いお話しお、キヌワヌドはタむプを構築するために䜿甚するこずを指定するには、私には奇劙に思えるん実際にはstructではなくtype 。 代わりに構造䜓ずしお型に぀いお話すこずを人々に奚励するかもしれないず思いたす。最終的には、ゞュリアの驚くべき_struct_システムに぀いお議論するなど、ゞュリアを説明するために䜿甚される蚀語の倉化に぀ながりたす。

タむプの䜜成に䜿甚されるキヌワヌドは、実際にはタむプではなく構造䜓です。

しかし、キヌワヌドは実際には型を構築するこずではありたせん---たずえば、匏Tuple{Int}も型を構築したす。 珟圚type定矩されおいるものが垞にstructず呌ばれるず、 Realが型であるかどうかに぀いお混乱が生じるこずはなく、 Union{Int8,Int16}はタむプなどです。

はい、私は以前のメモを線集しおいお、今それに぀いお曞いおいたす。 それはそのようになりたす
ゞュリアずの「䞖話ず絊逌」に広く有害
衚珟力ず簡朔さの将来の発展。 ドアは
ゞュリアの型システムの考慮を正圓化するために開かれたした
C構造䜓の足堎、戊争は倱われたす。

4時38分PMに朚、2016幎11月3日には、アレックス・アルスラヌン[email protected]
曞きたした

圓面の問題に関しおは、私は個人的に䜕を決めおいたせん。
最良の倉曎を怜蚎したす。 しかし、私が話すのは奇劙に思えたす
ゞュリアの驚くべき_type_システムそしお、キヌワヌドが
型の構築は、実際には型ではなく構造䜓です。 私はそれがかもしれないず思いたす
代わりに構造䜓ずしお型に぀いお話すように人々を促し、最終的には
ゞュリアを説明するために䜿甚される蚀語の倉化ぞ、䟋えばゞュリアの議論
玠晎らしい_struct_システム。

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/JuliaLang/julia/issues/19157#issuecomment -258266857、
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/ABmqxsZ_rXkn6GpVFxhd6TZnkkao9plWks5q6kZggaJpZM4KkN_g
。

珟圚type定矩されおいるものが垞にstruct sず呌ばれおいれば、 Realが型であるかどうかに぀いお混乱が生じるこずはなく、 Union{Int8,Int16}はタむプなどです。

珟圚、それに関しお混乱はありたすか おそらく私はそれに぀いおの議論を逃したかもしれたせんが、私には倚くが明癜に思えたず思いたす。

@ararslan  typeずいう甚語は、珟圚構築されおいるものの総称です。 珟圚typeキヌワヌドを䜿甚しお構築しおいるのは、耇合型で構成される構造です。 しかし、Juliaには、 typeキヌワヌドを䜿甚しお構築されおいない他の倚くのタむプがありたす。

いいえ、珟時点ではそれほど混乱しおいるずは思いたせんが、キヌワヌドstructを䜿甚した堎合、すべおのゞュリアタむプが構造䜓であるずは誰もが思いたせん。

さお、良い点です。

Union {Int8、Int16}はタむプです

ああ。 Unionも存圚するこずを忘れおいたした。 これにより、 struct  Struct の議論がより説埗力のあるIMOになりたす。 それでもmutableずimmutableは奜きではありたせん。

私は_struct_が無知であるこずに気づき、ゞュリアをそれに運ぶこずは、時間の経過ずずもに、進化する時代粟神を匕き䞋げるだろうず本圓に信じおいたす。 原理は、動いおいるビットの説明ず、高次の融合およびより深いゲシュタルトずしおの蚈算の倚分衚珟ずの間の拮抗䜜甚です。 structを䜿甚しおも、構造䜓が重芁ではないタむプに぀いお誰もが考えるようになるわけではありたせん。 ...私に誇匵させおください...

アむンシュタむンに぀いお特蚱係員ずしお曞くこずは、圌の貢献に察する評䟡を匱めるずは蚀えたせん。 アルバヌト・アむンシュタむンぞの蚀及が特蚱係員ずしおの圌の時間の重芁性を匷調するコヌスでは、数人以䞊の孊生が将来の䌚話でその感芚を抱くであろうずいうこずにはなりたせん。 soあるずいうこずは、新しい孊校に匕っ越した埌、それがsoだけで動䜜するこずを保蚌するものではありたせん。


_struct_を䜿甚するための説埗力のあるケヌスがある堎合は、次のいずれかのより良いケヌスがあるはずです。

structureは、パヌツの意味のある盞互関係であり、情報に基づいた構成です。
constructは、関連性の䟿利な構造化であり、䟡倀を高める蚭蚈です。

䞍倉のstructureは氞続的なコンポゞットです
可倉のstructureは、固定されおいない事前遞択です
䞍倉のconstructは確立された偶然性です
倉曎可胜なconstructは、コンテキストに察する意図的な制玄です


「ビットむンプレヌスアンドスルヌゲヌト」の話し方ず「デヌタ構造化によりオントロゞヌ情報が明らかになる」の䞡方が必芁であり、それを倉換修食子の話し方ずしお利甚できるようにするこずができたす。 CSの才胜であるコミュニティ参加者や、倧芏暡なプログラミングを行う他のほずんどのドメむン゚キスパヌトは、バむト、メモリ、ロゞック、指瀺された操䜜などを培底的に凊理したす。欲求、創造性、可胜性、想像力を生み出すもう1぀の方法は、うたく機胜する゜フトりェアになりたす。仕事の䟡倀は十分にありたす-それはあたり共有されおいたせん。 甚語の呜名に関する決定は、その話を奚励するために到達する必芁がありたす。

classずimmutableどうですか

Delphiのクラスを知っおいお、ここでは無理だず思っおいたしたが、マルチメ゜ッドのあるニヌス蚀語ではキヌワヌド link ずしお䜿われおいたす。 そしお-私がマニュアルを正しく読んだら-HaskellずDylanでも。 それは「クラスはタむプの䞀皮です」テストに合栌したすが、それでもかなりあいたいです今日の「タむプ」ずしお、私が奜きなものです。 1500〜1520分の「配列ず反埩の抂芁」ビデオで、Tim Holyは偶然に「クラス」ず蚀っおいたす。これは重芁ではありたせんが、それでも、ゞュリアのコンテキストではクラスが完党に異質ではないこずを瀺しおいたす。

それ以倖の堎合、 reftypeずimmutable  reftypeの甚語は最初のコメントで蚀及されおおり、それ以降無芖されおいたす。 どうしお 私にずっお、それは非垞にいい音で、タむプを解攟し、参照の意味を䌝えたす。

「new」キヌワヌドの目的がわかりたせんでした。「new」を倉曎せずにすべおの行で省略できたせんでしたか「value」および「record」ずいう甚語はキヌワヌドであり、珟圚䜿甚されおいる「immutable」を眮き換えたす。ず「タむプ」、そうですか

@swissrこれら2぀のタむプの唯䞀の違いほずんどのナヌザヌが知っおおくべきは、䞀方のフィヌルドは倉曎でき、もう䞀方のフィヌルドは倉曎できないこずです。 それらの名前がそれらの唯䞀の意味䞊の区別を瀺しおいれば論理的です。 前述のように、倀ず参照を䜿甚する実装は流動的です。たずえば、改良されたコンパむラは、最適化ずしお参照によっお倧きなisbits型を自動的に枡す可胜性があり、逆に、特定の状況では小さな可倉倉数がスタックに移動する可胜性がありたす。

typeずstructに぀いおは、 abstract 、 Union{} 、 typealiasなどの抜象デヌタ型を䜜成できるこずがわかりたす Tuple{}の堎合、それが新しい型であるか、パラメヌタヌ化された型であるかは議論の䜙地がありたすが、実際には_ナヌザヌ定矩の具象型_のみがbitstype 、 typeおよびimmutable 。 これらの構文は、それらが䜕らかの圢で含むデヌタを定矩するずいう点で抜象的な定矩ず玛れもないものであり、抜象的な定矩はそうではありたせん。 immutableをconst typeに倉曎するず、状況が明確になりたす。

玠人の蚀葉で議論されるプログラミング蚀語を䜜成する機䌚があるずき、私は蚀語ず専門甚語struct䌝播に぀いお心配したすが、唯䞀の理由は䌝統です。 これが圹に立たないず思う䟋は、 Symmetric{Matrix{T}}ようなラッパヌタむプを䜜成する堎合です。「このstructを1぀のフィヌルドだけで䜜成したした。 「私が蚀うこずができたずきに"これは...私が䜜っSymmetricラッパヌtypeのためにMatrix "その文の半分は、実際の構文であるこずをメモしおください。 「ラッパヌ構造䜓」 ちょっずばかげおいるように聞こえたすが、1぀のフィヌルドで構造䜓を䜜成するのは誰ですか さらに蚀えば、フィヌルドのないシングルトンはどうですか typesずimmutablesのかなりの郚分は、重芁なデヌタ構造を䜜成するために定矩されおいるのではなく、ラッパヌずシングルトンを備えた匷力な型ずディスパッチシステムを䜿甚するずいう明確な目的で定矩されおいたす。 IMOこれは、ゞュリアの最も興味深く、匷力で衚珟力豊かな偎面ですそれが_速い_ずいう事実ず組み合わされおいたす。

structは、構造䜓を䜿甚しお特性などを実装できるこずを知っおいる経隓豊富なテンプレヌトC ++メタプログラマヌにすぐに明らかになるず思いたすが、それは少し残念です。

「皮類」は型理論においおかなり特定の技術的意味を持っおいたす。

目暙/利点がtypeを解攟するこずである堎合、どうでしょうか。

const datatype  # immutable
datatype        # type

これらは具象型であるため、おそらくデヌタが含たれおいたす。これは、 DataTypeを䜜成する倚くの方法の1぀です。

「皮類」は型理論においおかなり特定の技術的意味を持っおいたす。

りィキの玹介はType{}  DataTypeずTypeConstructor 、 Unionなどを受け入れるずたったく同じように聞こえたす線集そのような倉曎だずは思いたせん混乱させる䟡倀がありたす

kindはここでは正しい蚀葉ではありたせん。

ほずんどの堎合、最善のアプロヌチは単にフィヌルドを孊ぶこずだず思いたす
あなたのものに眮き換えようずするのではなく、暙準的な語圙
掚枬が簡単になりたす。

この決定は非公匏のスピヌチには圱響したせん。 あなたはただ賢明に「私は
タむプを定矩したした」。より具䜓的なキヌワヌドを䜿甚するず、次の堎合に簡単になりたす。
あなたは正確である必芁がありたす。

フェアポむント、ゞェフ。 const structずstructはimmutable察typeよりも改善されるず私は_do_ず思うこずに泚意しおくださいしかし、それは私たちが怜玢すべきではないずいう意味ではありたせんさらに良いもの。

構造䜓は、構造䜓たたは構成抂念ずしお、どちらでもないか、たたは䞡方ずしお認識されるず思いたすか

@andyferrisの「class」ず「reftype」のコメントは、「const type」も気に入らない、たたはconst structずstructが改善されるこずをサポヌトしないずいう意味ではありたせんでした。 'const'を回避し、 'immutable'を保持し、 'struct'を陀倖したい堎合に、考えられる甚語を探すもう1぀の詊みでした蚀及された実装を認識しおいたしたが、80plusの堎合は問題ないず考えたした 。

fieldtype たたはfieldstype はどうですか これはbitstypeず䞊行しおおり、 fieldnames()ず䞀臎しおいたす。

グレン、
私は真実らしさが奜きです。 䜕かが単数圢たたは耇数圢になる可胜性がある耇数圢を䜿甚するこずが適切であるため、fieldstypeの方が適しおいたす。
-ゞェフリヌ

classは倧䞈倫かもしれたせん。 オブゞェクト内のメ゜ッドを持぀クラスベヌスのOOず関連付けられおいるため、圓初は拒吊したした。 struct方が正確だず思いたす。

structは䜕よりも短いずは思いたせん。 これは、この時点でこれらの皮類のデヌタ構造ず呌ばれおいるものです。 ややおかしなこずに、lispにはconsがありたす。これは元々 construct省略圢だったかもしれたせんが、人々はそれをすぐに忘れお、「conscells」に぀いお話し始めたした。

classを拒吊し続けるべきだず思いたす。 その甚語を䜿甚するず、ゞュリアスタむルに反する倚くのOOP期埅が生たれたす。

structは䜕の略語でもありたせんが、Cの構造䜓ぞの暗黙の参照が、Juliaの倀型であるこずを暗瀺しおいるのではないかず心配しおいたす。もちろんそうではありたせん。 そのために、私は珟圚record少し傟いおいたす。これは、盎接的な意味合いがはるかに少ないためです。

明確ではないかもしれない点を明確にするために、 const recordたたはconst structは、すべおのフィヌルドにconstをマッピングするための短い意味で解釈される堎合にのみ実行可胜だず思いたす、個々のフィヌルドをconstずしおマヌクするこずをサポヌトしたいこずを意味したす。 だから私が蚀っおいるのは、私たちはこれらを持぀こずができるずいうこずです

record T0
    f::A
    g::B
end

record T1
    const f::A
    g::B
end

record T2
    f::A
    const g::B
end

record T3
    const f::A
    const g::B
end

const record T4
   f::A
   g::B
end

ここで、T3ずT4は実際には同等のタむプを蚘述しおいたす。぀たり、 const recordず曞くこずは、すべおのフィヌルドがconstこずの省略圢です。 これが解釈でない堎合、これはすでに抂念の混乱の䞀般的な原因であり、その甚語の混乱に远加するず、問題を解決するこずはできないため、䞍倉性ず恒垞性の混同は䞀皮の危険だず思いたす。

ここで、T3ずT4は実際には同等のタむプを蚘述しおいたす。぀たり、constレコヌドの曞き蟌みは、constであるすべおのフィヌルドの省略圢にすぎたせん。

const record immutable意味を意味するようにするず、これは正しくない可胜性がありたす。 const recordは、どのフィヌルドも倉曎できない参照型を蚘述したす。 䞀方、珟圚のimmutableは倀型です。

record説明に぀いおは、 https //github.com/JuliaLang/julia/issues/19157#issuecomment-257942059ず次のコメントを参照しお

@vtjnashこれは良い点ですが、 immutable参照が含たれおいる堎合、

recordがあたり䞀般的ではないずいう事実は問題ないず思いたす。名詞ず動詞の䞡方ずしお有甚な単語であるずいう事実は、より問題がありたす。

nupleどうですか もちろん、「名前付きタプル」の略です。

私は䞊蚘の提案が奜きです

const datatype  # immutable
datatype        # type

これたでで最高。 それは歎史的な荷物で叀い蚀葉を持ち蟌むこずを避け、私には完党に明癜に思えたす。 確かに、juliaのデヌタ型はこれだけではありたせんが、通垞のナヌザヌによっお定矩される最も䞀般的なデヌタ型です。

ドキュメントでこれを説明するための甚語も倉曎する予定はありたすかさらに、このような章のタむトルを倉曎する予定はありたすか そうでない堎合は、 compositeずimmutable compositeたたはconst composite䞀番奜きだず思いたす。 constはグロヌバル定数にも䜿甚されるため、䞡方にconstたたはimmutableいずれかを遞択したすが、 const少し優先したす。短い。 少なくずも、compositeずいう単語はほずんどの初心者にはなじみがなく、ドキュメントを確認する必芁があり、C名ずの類䌌性による誀った仮定を回避したす。 constに関する誀った仮定は、C ++でそれに慣れおいる人は䜕も仮定しないこずを知っおいるので、あたり起こりそうにありたせん。

たた、䞍倉性を瀺すために2぀の単語を䜿甚する利点により、必芁が生じた堎合に、将来のconst abstractずconst bitstype可胜性が解攟されたす。

constレコヌドに䞍倉が今意味するこずを意味させる堎合、これは真実ではないかもしれたせん。 constレコヌドは、どのフィヌルドも倉曎できない参照タむプを蚘述したす。 䞀方、珟圚の䞍倉は倀型です。

ええずああ。 immutableの䟡倀は実装レベルで定矩されおいるず思いたした。ナヌザヌが考慮すべきこずは、フィヌルドをリバりンドできないこずだけです。 その堎合、倀を枡すたたは枡さないこずは玔粋なABIの問題であり、コンパむラヌは原則ずしお、より効率的なものを自由に遞択できる必芁がありたす。 私には、䞍倉のナヌザヌに衚瀺されるセマンティクスは、タむプのすべおのフィヌルドにconstの珟圚のセマンティクスを適甚するこずずたったく同じように芋えたす。

䞍倉の意図されたナヌザヌレベルのセマンティクスに぀いおただ混乱しおいたすか、それずもここで実装の詳现に぀いお話しおいるのですか

ナプルはどうですか もちろん、「名前付きタプル」の略です。

recordず䞀緒に行くこずもできたすよね たずえば、名前付きタプルは、Erlangのrecordです。 そしお、デヌタベヌスの䞖界でもそう思いたす。

しかし、ゞュリアがCも知っおいる人々ず重耇しおいる堎合は、 structがより適切な倉曎です。

私は個人的にrecordような奇劙で䞍明瞭だず感じおいたす。 デヌタベヌスの䞖界では、レコヌドはテヌブルの行です。 これは、Juliaタむプ䞍倉たたはその他ず同じくらい䞀般的なものずの玛らわしい競合のようです。

このスレッドを読み盎した埌、私はtype compositeに傟いおいたす。 それはゞェフスの「䞀文ルヌル」を保持しおおり、それに察する反察祚はそれほど倚くありたせん。 この甚語が他の蚀語ではあたり䜿甚されおいないずいうこずは、私の意芋では問題ではありたせん。 そしお、 compositeは、実際にそのために芋぀けるこずができる最も説明的な単語です。 これが、ドキュメントでこれらのものをcomposite typesず呌んでいる理由です。

Fortranから来お、私はただキヌワヌドtypeはちょうどいいず思いたす、
最小の賢明な倉曎はimmutable -> const typeです。

しかし、 type本圓に行かなければならない堎合、
compositeずconst compositeが次善の遞択のようです。

immutable -> const type確かに実行可胜のようです。同時に、混乱を避け、キヌワヌドを削陀し、蚀語を明確にしたす。

typeが䜿えないのは悲しいかもしれたせんが、正盎蚀っお私が䜿いたいのはTypeです。 10回のうち9回、私の型倉数は静的ディスパッチのパラメヌタヌであり、動的型分析のDataType倉数ではありたせん生成された関数は䟋倖です。 inference.jlを曞く人には圓おはたりたせんが、あなたがそうするのであれば、圌らは実際にはその蚀語の「タヌゲットオヌディ゚ンス」ではありたせん。

関連する質問トップレベルでtypeを䜿甚するこずはたったく実行可胜ですが、関数内珟圚は垞に無効ですで倉数名にするこずができたすか たたはさらに、型定矩の構造はかなり具䜓的です...グロヌバル倉数たたは関数でさえtypeバむンドできるようにしながら、型定矩を特定の構文ずしお怜出できたすか

぀たり、型を定矩するための構文を維持しながら、キヌワヌドの動䜜を取り陀くこずができたすか

おそらくimo匷いリスクが䌎いたす特異な蟞曞線集が気を散らすのは簡単になりすぎたす。 そしお、それらの欠けおいるマむクロ連続性は、コラボレヌションず明確なコミュニケヌションを容易にするために砎壊的です。

@ c42f 

䞍倉の意図されたナヌザヌレベルのセマンティクスに぀いおただ混乱しおいたすか、それずもここで実装の詳现に぀いお話しおいるのですか

いいえ、あなたは違いたす–私はずさんでした。 䞍倉は実際には倀型ではありたせんが、可倉は確かにそうではなく、Cず同じ甚語を䜿甚するこずはそれらがそうであるこずを瀺唆するかもしれないず感じたした。

Cは倀枡し蚀語であるずいうのが実際の状況であるため、Cのコンテキストでは、構造䜓を「倀型」ず呌ぶこずが理にかなっおいるかどうかが明確でないこずに気づきたした。 したがっお、間違いなく、デヌタ型自䜓ではなく、受け枡しず割り圓おの芏則が異なりたす。

私は、この問題が開く倉曎を制定するこずに党面的に賛成です。 有甚性は、候補甚語の1぀ではなく1぀を䜿甚するずいう内臓の奜みよりも重芁です。

_しかし_

実際の状況はそのCなので

候補甚語の䞭で、 structが私の最も嫌われおいる理由をうたく捉えおいたす

私が販売しおいるストヌリヌは次のずおりです。「Cずjuliaの䞡方で、 structは、フィヌルド名の固定セットをさたざたなタむプの倀にマップするデヌタ構造です。しかし、これらを枡すず、Cは枡されたす。 -倀によるずゞュリアはパスバむシェアリングです。」

そのアカりントは、面倒ではなく、完党に正確です。 その䞭のすべおが正垞にグヌグルで怜玢できたす。 PL理論家はそれに぀いお䞍平を蚀うこずはなく、非PL理論家はそれを聞いお䜕かを孊ぶでしょう。

私はその話を買いたす。 疑問に思いたすが、ここでPL理論家が䞍満を蚀う甚語はありたすか ゞュリアは、PL理論家ず非理論家の䞡方を満足させるニッチにぎったり合っおいるず思うので、ここで正確さず䞀般的な明快さのバランスをずるこずが重芁だず思われたす。

ええず、私は誰の口にも蚀葉を入れたくありたせん。 構造䜓が「倀型」であるためにstructが混乱する可胜性があるずいう考えに察凊したかっただけです。

immutableは1語のキヌワヌドのたたにしおおくべきだず思いたす。 const typeたたはconst structたたはimmutable struct奜きではありたせん。 私はimmutableをよく䜿甚したすが、他のほずんどすべおが1語であるのに、これらの宣蚀が2語になるのは非垞に厄介だず思いたす。 タむピングの意味ではありたせん。それは本圓の問題ではないからです。 しかし、「タグ」のように䞍倉であるずいう意味では、それは二流のように感じたす。

@TotalVerbそれは、ずいう事実ずあたり互換性がないず思いたす

type MyType
    const field::Int
end

たったく同じように動䜜する必芁がありたす

immutable MyType
    field::Int
end

今したす。

それを考えるず、 const type たたはconst struct 、 const compositeなどがショヌトカットずしお各フィヌルドにconstをブロヌドキャストするこずは䟿利なようですただし厳密には必芁ありたせん機胜。 将来、コンパむラがどちらを入力したかさえわからないこずを願っおいたす各フィヌルドの前にconst typeたたはconst -前者はパヌサヌによっお埌者に倉換される可胜性がありたす。 その時点で、なぜimmutableですか

「タグ」のように䞍倉であるず、二流の気分になりたす。

JeffずStefanを正しく理解しおいれば、そうです、 immutableは、型のフィヌルドが定数バむンディングであるこずを瀺す単なるタグです。 定数Cずは異なり、_really_定数であるず、コンパむラヌが最適化を行うのに圹立ちたす。フィヌルド自䜓が定数たたはプリミティブである堎合぀たり、 isbits 、さらに最適化を行うのに圹立ちたす。 これは知っおおくず䟿利ですが、意味的には重芁ではありたせん。 セマンティクスを珟圚の動䜜に関連付けるず、将来その動䜜を改善するこずがより困難になる可胜性がありたす。

しかし、重芁な意味䞊の違いがありたす。䞍倉の型は倀であるため、オブゞェクトのIDはそのフィヌルドによっお指定されおいるず安党に想定できたす。 䞍倉型のオブゞェクトには、ナヌザヌの芳点から、そのフィヌルドからアクセスできない特別な「識別機胜」はありたせん。 䞀方、シングルトン以倖の可倉タむプのオブゞェクトには、明らかにこの目に芋えない「アむデンティティ」がありたす。 倚くの䞍倉型がボックス化されたオブゞェクトずしお栌玍され、したがっお実際に内郚でこの远加のIDを持っおいるずいう事実は、セマンティクスずは無関係です。

私の意芋では、それは単なる_最適化_ではありたせん

immutable Complex{T} ... end

の代わりに

type Complex{T} ... end

ナヌザヌに芋える動䜜の倚くの偎面が倉化するためです === 、デフォルトの== 、 objectid 、 hashなど。それを蚀うのは単に正しくありたせん。䞍倉型は、可倉型の機胜のサブセットを提䟛したす。 それどころか、それらが䞍倉であるずいう事実自䜓が、䞍倉型をより匷力にするこずを可胜にする重芁な保蚌を提䟛したす。

コミュニティがconstずstructに萜ち着く前に、 constantずstructure甚にもう1぀のプラグを䜜りたかっただけです。

1実際の単語に3文字远加するだけです
2 structが慣甚的になっおいるずいう䞻匵にもかかわらず
2aRから移行しおいる人私のようには混乱するかもしれたせん
2bプログラミングに䞍慣れな人最も助けが必芁な人は混乱するかもしれたせん

ただ楜しみのために、構造䜓が混乱するかもしれない愚かな蚀葉
䞍滅
閉塞症
ポスト構造䞻矩
䞊郚構造ああ、マルクス

およびconst
コンスタンティノヌプル
星座
ボアコンストリクタヌ
違憲

この皮のマルチコンテキスト䞍倉およびconstによっお埗られるPLの矎しさ/力はありたすか䞍倉は、解決された指瀺察象を介しお/内郚でブロヌドキャストせずその性質を投圱、䞍倉ではない埋め蟌み指瀺察象を介しおconstブロヌドキャストを、副詞たたは動名詞であるかのように行いたすか

同じ質問、蚀い換えれば

今のずころ、グロヌバルスコヌプで倉数を䜿甚するこずには問題があり、回避するためのtrickは、単䞀の゚ントリを持぀constベクトルで倉化する倀をラップするこずです。 その堎合、 constはブロヌドキャストされたせん。 constのブロヌドキャストバヌゞョンは、ベクトル内の゚ントリの倀ずベクトルに暗黙的に䞀定性を適甚したす。 同様に、他の皮類の倀をラップたたは囲む倀を保持できるフィヌルドを持぀型宣蚀。 䞍倉型は、そのフィヌルドの倀に䞍倉性を䞎えないようになりたしたたた、そのフィヌルドを介しお間接的に到達する可胜性のある倀も䞎えられたせん。 「このアむテム[たたはこのタむプのアむテム]に割り圓おられた倀は、䞀床構築/初期化されおも倉曎されない[倉曎は蚱可されない]」ずいう意味のキヌワヌドのブロヌドキャストバヌゞョンに付属する優雅さず有甚な容量がありたす。 。

即時非ブロヌドキャスト゜ヌトは広く䜿甚されおおり、Juliaで行うこずの䞀郚が、Juliaの事前コンパむルではるかに簡単になり、導入されたブロヌドキャスト可胜なconstnessを䜿甚したり、信頌したりできるようになるず仮定するず、それを再生する必芁がありたす。即時゜ヌトでうたくいきたす。 これが远加の_理論的なプログラミング蚀語の良さ_衚珟のしやすさ、衚珟力などをもたらす方法であるかどうか疑問に思いたすブロヌドキャストの恒垞性は、参照型が埋め蟌たれおいる、および/たたは間接的に含たれおいる型の倀を介しおブロヌドキャストしたすa内郚埋め蟌みたたはコンテナヌを持たない倀に到達するこず、たたはb倀に到達するこず自䜓が独立しおたたはその他の方法で非ブロヌドキャストの恒垞性を持぀タむプです。

これに぀いおもっず考えおみるず、私が本圓に壊す䟡倀があるず思う唯䞀の倉曎はbitstype -> primitive 、䞻に䜕かをisbitsず呌ぶのがいかに面倒かずいうこずです。

この議論の本圓のポむントであるtypeずimmutableに぀いおは、この時点で私が最も気に入っおいるオプションはたったく倉曎されおいたせん。 型を構築するためのtypeは明確であり、䞍倉の型を構築するためのimmutableは明確です。 しかし、私は私たちの最高の倧君䞻が私たちに䞎えおくれたものは䜕でも喜んで受け入れたす。私は暗黙のうちに、今埌の蚀語に最適なものに぀いおの圌らの刀断を信頌しおいるからです。

constやconstantではなくfixedを䜿甚しない理由はありたすか 少なくずも私には、はるかに明確な説明のようです。

@JeffreySarnoff参照぀たりポむンタを取埗できるものにconstこずを暗瀺するこずconst type  immutable のフィヌルドにバむンドするず、この参照が他の堎所に存圚しないずいう蚌拠がないため、参照されるデヌタが䞀定であるずいう蚌拠がありたせん。

この振る舞いを倉えるこずは、Julia蚀語にずっお本圓に根本的な倉化になるず思いたす。

@andyferrisその明確な答えをありがずう。

constやconstantではなくfixedを䜿甚しない理由はありたすか 少なくずも私には、はるかに明確な説明のようです。

constたたはconstantよりも優れたものがあるかどうか疑問に思っおいたした。これは、氞続的なバむンディングであり、バむンドされたオブゞェクト内のデヌタが倉曎できないこずではないこずを反映しおいたす。 fixedはそれに向かっおいくらか進んでいたすが、他の蚀語ではそれを芋おいたせんたた、他の蚀語でのJuliaのバむンディング/共有セ​​マンティクスにも気づいおいたせん。

たぶんbindようなもの䟋 bind x = 2 ...シ゜ヌラスはglue瀺唆しおいたす...これはかなり掚枬的になっおいたす...

constをより正確なものに眮き換えるずいうアむデアは魅力的です。 ただし、型宣蚀ず個々の倉数の代入の䞡方に適切に適甚する必芁がありたす。 fixed structはある皋床意味がありたすが、型宣蚀ではなく、構造䜓のフィヌルドが固定されおいたす。 残念ながら、 bound struct  tied struct はかなり䞍明確に思えたす。 䜕らかの理由で、 const型に適甚するず、より明確に芋えたす。

型宣蚀ず個々の倉数の代入の䞡方に適切に適甚する必芁がありたす。

それを目指すのは生産的だず思いたす

type A
    const x::Int  # fixed, bind, bound, tied, glue
end

理にかなっおいたす。 type 、 structなどの前にショヌトカットがあるず、䞊蚘を意味するショヌトカットになりたす。

@generatedなど、物の性質を倉える他の重芁な装食のように、これをマクロにするこずは理にかなっおいたす。 それはさらに別のキヌワヌドを削陀したす...

type + composite > typeからの倉曎は玠晎らしいず思いたす。

スレッドに新しいコメントを远加せずにGitHubの問題に投祚できればいいのですが...私の投祚はmutableずimmutable 、かなりきれいです。 structは䜿いすぎで、可倉性の郚分を匷調しおいたせん。

PSGitHubを知っおいる、たたは貢献しお投祚機胜を远加できる人はいたすか 「お問い合わせ」ペヌゞで聞いたのですが、メヌルが玛倱した可胜性がありたす。

最近、他の倚くの蚀語のバックグラりンドを持぀Juliaに切り替えたので、JuliaがCスタむルの呜名を採甚し、C / C ++の玛らわしいconst-nessの問題をすべお取り入れるこずを望んでいたせん。 代わりに、デヌタ型宣蚀に、倀型たたは共有参照型であるずいう意図を䜕らかの圢で反映する抂念を䞎えるこずは、単に可倉性を参照するのではなく、私を倧いに助けたでしょう。

Juliaでの私の最初の期埅は、単玔なtypeが、䞍倉のCスタむルのstructたたはPythonオブゞェクトず同様に動䜜するこずtypeは、Juliaが関数型プログラミングのスタむルず速床に重点を眮いおいるように芋えるためです。
type ...ずimmutable...衚珟の非察称性にただ混乱しおいたすが、 DataTypeからtypeof(SomeType) DataTypeを取埗するか、 'ビットタむプの実際の意味を取埗したす'、および単玔なAlias = DataTypeステヌトメントの代わりにtypealiasキヌワヌドの必芁性。

したがっお、私はdatatypeに投祚したす。これは、 typeof(SomeType) == DataTypeず䞀臎し、 ::Type{}ずの苛立たしい類䌌性を壊したす。 可倉型をcomposite [datatype]装食するず、基本的な「ビット型」ず比范しお、その特別でおそらくより高䟡な性質を匷調するこずができたす。

C / C ++の玛らわしいconst-nessの問題をすべお匕き蟌む

このキヌワヌドの名前を倉曎しおも、それはできたせん。 これらの問題は、静的チェックずキャストに関係しおいたすが、ここではたったく関係ありたせん。

単に可倉性を参照するのではなく、倀型たたは共有参照型であるずいう意図は、私を倧いに助けおくれたでしょう。

私はこれを完党には理解しおいたせん。 オブゞェクトが䞍倉である堎合、それが倀によっお枡されたのか参照によっお枡されたのかを刀断する方法はありたせん。それでは、倀ず参照の区別はどのように基本的なのでしょうか。

datatypeは悪い遞択ではありたせん。 しかし、 datatypeずcomposite datatypeは、可倉性の違いを䌝える良い方法ではないず思いたす。

@ JeffBezanson 、Cのような定数を䜿甚するず、Julia型がC / C ++ず同じ動䜜をするずいう暗黙の期埅を意味したした。構築埌にのみ䞍倉であり、キャストを通じお倉曎可胜であり、関数の匕数に察しおたったく効果がない堎合もありたす。戻り倀の型。 したがっお、おそらくC / C ++を参照しおいないキヌワヌドを遞択する堎合は、適切な遞択です。したがっお、 const structは䜿甚しないでください。

「倀ず参照」に぀いお䞍倉型がメンバヌを盎接埋め蟌み、優れたコンパクトな高速アセンブラコヌドを生成する理由を理解するのにかなりの時間がかかりたしたが、「type」にはオブゞェクトぞのすべおの呌び出しが含たれおいたせんでした。 蚀い換えれば、スピヌドを目指すずきに、なぜ私が通垞NTupleを䜿甚したいのかずいうこずです。 したがっお、「䞍倉」ず「可倉」を読むずき、Fortranの「パラメヌタヌ」ずしおの意味を期埅しおいたしたが、実際のデヌタ型のレむアりトや実装の皮類の倉曎も期埅しおいたせんでした。
おそらく、ほずんどの堎合、Complexのような小さな耇合型には「䞍倉の倀」のセマンティクスが必芁ですが、配列などの倧きなデヌタセットには「可倉で参照/非コピヌ」が必芁です。
その堎合、根本的な意図はおそらく可倉性ではなく、デヌタのコピヌを回避するこずです。

しかし、それは高速アセンブラコヌドを取埗するためにJuliaの䜎レベルの機械を孊んだずきの私の経隓でしたが、キヌワヌドの呜名にそれをより適切に反映する方法ず、それを可倉性だけで組み合わせたり衚珟したりする方法がわかりたせん。

私はあなたが@mjwから来おいるずころを知っおいたす、私はそこに行ったこずがありたすが、C / C ++に぀いお知っおいるこずをすべお孊ばないほうがよいず思いたす。 ここで、䞍倉であるのはconstであり、䜕かがスタックであるか動的に割り圓おられるか、および参照たたは倀で枡されるかどうかは自由に倉曎でき、コンパむラヌの最適化の遞択肢になりたす。 すべおが動的に割り圓おられ、参照によっお枡される蚀語を䜜成できたす。これはJuliaのデフォルトの方法ですボックス化された倀の堎合、タむプが䞍明な堎合でも「共有による受け枡し」を実装したす。 あなたそしお私たちの残りの郚分は、最適化が珟圚実装されおいる堎所であるため、小さな䞍倉が非垞に高速であるこずに気づきたす。 これは、最適化を容易にするimmutableのセマンティクスの結果です。

しかし、実際には、倧きな䞍倉倉数が参照によっお枡されおそらく、それが理にかなっおいる堎合はスタックポむンタヌによっお枡されたすが、 NTuple{1_000_000}をヒヌプ割り圓おするのがおそらく最善です、既知のサむズの小さな可倉倉数がスタック割り圓おされるこずをお勧めしたす繰り返したすが、可胜な堎合。 堎合によっおは、ガベヌゞコレクションでさえ静的に決定される可胜性があり、たずえば、ヒヌプスペヌスをルヌプ内で再利甚できたす。 私はこれらを゚スケヌプ分析を必芁ずする将来の最適化の機䌚ずしお描いおいたすそしおこれらはどれも蚀語のセマンティクスに圱響を䞎えず、パフォヌマンスだけに圱響を䞎えたす。

私が蚀っおいるのは、キヌワヌドは、数幎で倉曎される実装の詳现぀たり、効率的な小さな䞍倉ず効率的な倧きな䞍倉ではなく、10幎か2幎の間䞀定のたたであるセマンティクスを反映する必芁があるずいうこずです。

私は、JuliaタむプがC / C ++ず同じ動䜜をするずいう暗黙の期埅を意味したした

これは、正盎に蚀うず、 const -> constantを怜蚎するのに十分な理由かもしれたせん。 constは珟時点で唯䞀の省略キヌワヌドであり、ずにかく奇劙なものになっおいるず思いたす。

単玔なAlias = DataTypeステヌトメント。

これは理にかなっおいる堎合は絶察に問題ないず確信しおいたすが、 typealias RealMatrix{T<:Real} Matrix{T}などのより耇雑なタむプの倉曎は蚱可されたせん。たた、新しいType䜜成しない単玔なバむンディングです。 TypeVar s。 逆に定矩したい堎合を陀いお RealMatrix = Matrix{T <: Real}そしおapplyがTypeVarに察しお䜕をするかを䞀般化する぀たりTypeConstructor䜜る...実際にはこれは興味深いアむデアですただし、構文の問題があるため、 typealiasが䟿利です...。

@andyferris 、私はすでに「未孊習」ですが、他の新しいナヌザヌにずっおは、「コンパむルにもかかわらずゞュリアがずおも遅いのはなぜか」ずいう段階を乗り越える方が簡単かもしれたせん。 これらの詳现のメンタルモデルの迅速な開発をサポヌトするキヌワヌドを遞択するこずは、コンピュヌタサむ゚ンスのバックグラりンドがあたりない新芏ナヌザヌにずっお倧きなセヌルスポむントになる可胜性がありたす。 他の話し蚀葉の壁を避けるために、「単玔な」キヌワヌドも忘れないでください。

@mjwすばらしい、そしお私はそのすべおに同意したす。 :)

䜕を教えおください。GitHubの最高の機胜であるリアクション絵文字を䜿甚しお、投祚に最も近いものを詊しおみたしょう。

ここでは、_順䞍同で_、最も支持されおいるず思われる提案を衚にたずめたした。 指定された絵文字を䜿甚しお反応し、その提案に投祚したす。 これには、デスクトップブラりザからGitHubにアクセスする必芁があるず思いたす。 AFAIKリアクション絵文字はモバむルむンタヌフェヌスに実装されおいたせん。 この投皿の右䞊隅にある顔をクリックしお、絵文字のメニュヌにアクセスしたす。

| type | immutable | ず反応する|
| -| -| -|
| struct | const struct | 👍+1|
| mutable | immutable | 👎-1|
| type | immutable | 😄笑|
| composite | const composite | tada :(やったヌ|
| datatype | const datatype | 😕混乱|
| type | const type | ❀ハヌト|

もちろん、投祚の倱敗はnuple暗黙の投祚に察応したす。 ドダ顔

私は、このような論争の的ずなる決定を「民䞻的に」行うこずの倧ファンではないず蚀わざるを埗たせん。 コンセンサスなしで議論が行われた堎合、私はBDFLの決定に埓うだけです。

フェアポむント、@ TotalVerb。 前にも蚀ったように、圌らが最善だず思うものは䜕でも私たちに䞎える力を持っおいれば、私はたったく問題ありたせん。 スレッドが少し曲がりくねっおいるように芋え、投祚に関する@juliohmのポむントは劥圓なように思われるので、これを

個人的には、矎的に2぀の単語を䜿甚するのは奜きではないず思いたす const type 。 たた、意味的に少し䞍協和音を感じたす。 const x = 1ず蚀うずき。 xが䞀定であるこずを意味したす。 const type; x; endず蚀うずき、このタむプのむンスタンスは構築埌に倉曎されないこずを意味したす。 ストレヌト補間から、䜕かが定数型であるず蚀うこずは、型自䜓が倉曎されないこずを意味するように感じたすこれはすでに圓おはたりたす。 参照

type foo
end
const bar = foo

したがっお、 barはconstであり、垞にfooですが、それでもconst typeはありたせん。 const バむンディングに適甚の既存のセマンティクスに䌌おいるように感じたす。型の名前はすでにconstです。

簡朔で、意図されたセマンティクスを䌝え、倉数名ずしお望たしいずは思われないキヌワヌドはないず思いたす。 これらの目暙に最も近いず思う甚語は、3皮類の宣蚀されたタむプのmutable datatype 、 immutable datatype 、およびabstract datatypeです。

typeずimmutableに加えお、远加の可倉倀タむプがあったらいいのにず思いたす。
問題のどこかでいく぀かの議論を芋おきたしたが、基本的に珟時点では、このようなシナリオを効率的に凊理するこずは䞍可胜です䜕かを芋逃した堎合は修正しおください。

immutable T
    a::Int
    b::Float64
    ...
end

t = Vector{T}(10)
t[2].a = 5    # error here
# instead
c = t[2]
t[2] = T(5, c.b, ...)   # works  

コヌドは倀型sizeof(T) * 10きちんずした配列を䜜成したすが、䞀郚のフィヌルドを倉曎するには、 T(...)党䜓を再割り圓おする必芁がありたす。これは通垞3〜5フィヌルドの長さです。
だから基本的に私の5セント
type -GCが参照を収集
immutable -倉曎できない倀スタック割り圓おタむプ
mutable -特に配列で倉曎可胜な倀型

倉曎可胜な倀型

倉曎を蚱可するこずがオブゞェクトのアむデンティティを䞎えるものであるため、これは達成䞍可胜な目暙だず思いたす。

おそらく、代わりにこのアプロヌチが必芁です11902

可倉ず䞍倉を分離するこずを陀いお、倀ず参照を分割する方が良いはずです。

abstract Node{T}
immutable Link{T} <: Node{T}
    value :: T
    next :: ref{Link{T}} # next :: Link{T} will be an error: Recursive type
end

倀ず参照を人為的に区別しお蚀語を過床に耇雑にする必芁はありたせん。 可倉型ず䞍倉型は意味的にはるかに単玔です。 型が倀型であるずいう事実は、単なる最適化です。

@Kenoは良い点を䜜りたす

個人的には、矎的に2぀の単語constタむプを持぀のは奜きではないず思いたす。 たた、意味的に少し䞍協和音を感じたす。 const x = 1ず蚀うずき、xが定数であるこずを意味したす。 const型ず蚀うずき; バツ; ぀たり、このタむプのむンスタンスは構築埌に倉曎されないずいうこずです。 ストレヌト補間から、䜕かが定数型であるず蚀うこずは、型自䜓が倉曎されないこずを意味するように感じたすこれはすでに圓おはたりたす

前に述べたように、「正しい」セマンティクスはによっお䞎えられるず思いたす

type Complex{T}
    const re::T
    const im::T
end
z = Complex(1,2)

ここで、 z.reは、 const z.re = 1に䌌たものを入力したずきず同じように動䜜するため、どのバむンディングがconstあるかに぀いお意味䞊の混乱はありたせん。

@JeffBezansonが述べおいるように、これは倚数のフィヌルドにはあたり䟿利ではなく、珟圚の型の実装ずは互換性がありたせん。 郚分的に倉曎可胜で、郚分的に䞀定の構造䜓は、将来実装される堎合ずされない堎合がありたす。 ただし、珟圚ず将来の䞡方で意味のある構文がありたす。

<strong i="19">@const</strong> type Complex{T}
   re::T
   im::T
end

これが実装されおいる珟圚の方法では、マクロはASTでtypeからimmutableに倉曎できたす。 将来的には、郚分的に䞀定の構造䜓が実装されおいる堎合でも、マクロは各フィヌルドにconstを远加するこずで、ASTに察しお操䜜を実行できたす。これは、フィヌルドバむンディングであるこずは、すべおの人にずっお明らかです。䞀定です。 矎的には、2぀のキヌワヌドを続けお䜿甚するよりも優れおいたす。関数に察しお同様のこずを行いたす @generated 、 @inline 、 @proagate_inboundsなど。

@constは簡単に@immutableたたはそれに類䌌したものになり <strong i="31">@immutable</strong> type Val{T}; end OK、IMOを読み取りたす、マクロのアむデアはstruct 、 compositeず互換性がありたす、 等々。

@ be5invisはい、これは倚くの蚀語で通垞の方法です。たずえば、Cにはstruct 、これはimmutableずしおさたざたな方法で動䜜したす。コピヌによっお関数に枡され、明瀺的に割り圓おられたす。配列 class | typeの堎合のようにGC管理察象オブゞェクトぞの参照ではありたせん。 ただし、これは_mutable_であり、配列内では単䞀のフィヌルドで倉曎できたす。
immutable堎合、2぀のプロパティが混圚しおいるず私は信じおいたす。

  1. 䞍倉性適切な関数型プログラミングを行うため
  2. 䞋䜍レベルで倀型ずしお動䜜する

したがっお、基本的には、プロパティ2のみの型の導入を望んでいたす。これにより、既存のコヌドベヌスが䞭断されるこずはありたせん immutableが残りたすが、GCの関䞎を最小限に抑えお高速に䜕かを䜜成する堎合は、䟡倀がありたす。 。

@ johnmyleswhite 

@wgreenr前述のように、そしお䜕床も議論されおきたしたが、それは䞍可胜です。 たた、この号の議論ずはあたり関係がありたせん。

䜕でも可胜ですが、可倉倀型を導入するこずは非垞に砎壊的であり、非垞に悪い考えです。 なぜそれが䞀芋シンプルで魅力的なアむデアなのかは理解できたすが、たったく異なる皮類の新しいオブゞェクトセマンティクスを远加し、タむプグラフを参照セマンティクスず倀セマンティクスに分岐しおも、蚀語は改善されたせん。 同じコヌドは未知のセマンティクスに応じお非垞に異なるこずを行うため、それが達成するこずは、ゞェネリックコヌドを安党に曞くこずを䞍可胜にするこずです。 ここに䟋を含む広範な議論があり

これが蚀及する䟡倀があるかどうかはわかりたせん。 しかし、C / C ++では、「struct」はデヌタのレむアりトに぀いおも意味したす。 䞀方、より良いメモリレむアりトを埗るために、構造䜓メンバヌを再配眮するこずはしばしば䟡倀がありたす。 構文の重倧な倉曎を怜蚎しおいる堎合は、「構造䜓」順序付け-> C盞互運甚ず「䞍倉」䜕らかの方法で順序付けられる可胜性があるを䜕らかの方法で区別するメカニズムを甚意する䟡倀がありたす。

私はゞュリアにかなり慣れおいないので、䜕か明らかなこずを芋逃しおしたったらごめんなさい。

私は個人的に名前に぀いお本圓の奜みはありたせん。 しかし、すでに「抜象的」が存圚するこずを考えるず、誰も「具䜓的」を提案しおいないように思われたこずに驚いおいたす。

さらに別の提案を远加するには、次のこずが私には最善のようです。

  • 䜿甚structの代わりにimmutable 。

  • struct!代わりにtypeたす。 英語を話すずき、これは「可倉構造䜓」ず呌ばれるべきです。

    • おそらく struct!内のいく぀かのフィヌルドをconstずしおマヌクできるようにしたす。

いく぀かの正圓化ず考え

1明らかなこずを芋逃しおいない限り、 !関数を䜿甚しお䞍倉型の倀を操䜜するこずは絶察に避けおください。 それが間違っおいる堎合たずえば、䞍倉型が可倉型を参照し、 !の関数がそれを倉曎するずいう重芁なケヌスがある堎合、この提案は適切ではない可胜性がありたす。

2䞍倉型は、より倚くの最適化の察象であり、プログラマヌにずっおより予枬可胜な動䜜をするため、䞀般的には可倉型よりも優先されるべきだず思いたす。

3これが機胜するためには、ほずんどすべおの堎合に、䞍倉型を少なくずも可倉型ず同じくらい効率的にするための最適化を実装するこずがおそらく前提条件です。 特に、コンパむラヌは、参照によっお倧きな䞍倉型を枡すこずに぀いお賢くなければなりたせん。

UPDATE私recordの代わりにstructが、 record!あたりにも倚くの動詞のようなものです。 頭に浮かぶ他のいく぀かのオプション newtype 、 typedef Cプログラマヌを10秒間混乱させる、 composite 、たたは䞊蚘の誰かが提案したconcrete 。

v0.6の機胜がフリヌズする前に、このスペヌスで䜕かが発生する可胜性はありたすか

少なくずも公的には決定が䞋されおおらず、凍結からわずか10日しか離れおいないこずを考えるず、おそらくそうではありたせん。

私はこれに泚意深く埓っおいたせんが、1぀のコメントは、これが倉曎された堎合、問題のあるファむル/行番号の適切な報告を最初に行うこずを芁求したいずいうこずです。 たたは少なくずもモゞュヌル。 0.5では、どのパッケヌゞに@deprecate d _bindingがあるかを把握するこずさえ難しい堎合がありたす。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡