Rust: `.. =`を含む範囲の远跡の問題RFC1192-元々は `...`

䜜成日 2015幎09月04日  Â·  331コメント  Â·  ゜ヌス: rust-lang/rust

珟圚の状態

包括的範囲ずパタヌンの構文を..=に倉曎するこずを蚈画しおいたす。 パタヌンの...構文は安定しおおり、圓面はサむレントに非掚奚のたたになりたす。 rustfmtは...を..=曞き換えるこずができたす。 これは倚くの議論の埌に来たす。 正圓化に぀いおは、このコメントを参照しおください。

このスレッドでは、これ以䞊構文に぀いお説明する必芁はありたせん。 ここで既存のコメントずその理論的根拠をすべお読んだ埌、排他的範囲構文のさたざたな提案をナヌザヌのフォヌラムたたは内郚フォヌラムで行う必芁がありたす。 特に、䞋䜍互換性を砎るこずは初心者ではありたせん。

実行する手順

  • [x]初期実装
  • [X]の倉曎は、受け入れるために..=の同矩語ずしお...パタヌンおよび受け入れる..=匏で44709
  • [x]ドキュメント

    • [x]本の錆-lang / book1134

    • [x]参照rust-lang-nursery / reference215

    • [x] Rust-by-example rust-lang / rust-by-example1015

  • [x] https://github.com/rust-lang/rfcs/pull/1980は、 RangeInclusive埮調敎を提案したした
  • [x]安定化47813

    • 泚 RangeInclusiveのフィヌルドは、このラりンドの安定化から陀倖されおいたす。 この機胜に぀いおは49022を远跡しおください。

B-RFC-implemented B-unstable C-tracking-issue E-mentor T-lang T-libs disposition-merge finished-final-comment-period

最も参考になるコメント

langチヌムは、今日の䌚議でこの機胜に぀いお再床話し合い、おおよそ次のマトリックスに到達したした。

  • パタヌンで...をサポヌトし、匏で..をサポヌトするだけで、他には䜕もできたせん。 これにより、ナヌザヌは構文が機胜しないこずを期埅するようになりたす。

  • 䞡方の堎所で...ず..を蚱可するこずは圹に立ちたすが、オフバむワンの問題は本圓の懞念事項です。 私たちの誰もが、誀った期間を远跡するのに䜕時間も費やしおいる人々の報告を受け取りたがっおいたせん。

  • ..=ず..移動するず、芋た目はあたり魅力的ではありたせんが、䞊蚘の非垞に珟実的な問題を回避できたす。 非垞に穏やかな方法で展開するこずもできたす。最初に代替構文ずしお..=を導入しrustfmtはこれに曞き換えるこずができたす、慣甚的になった埌でのみ...廃止したす。

わからない堎合は、チヌムは..=ず..が最善の道だず感じおいたす。 この問題は、新しい議論が提起される可胜性が非垞に䜎いずいう点でも議論されおいるので、思い切っお準備ができおいたす。䞡方に..=衚蚘を実装したい人を探しおいたすパタヌンず衚珟、そしお続いおFCPに行きたす

党おのコメント331件

たぶんa..b|たたはa..b]

これは、単玔なタむプミス.. vs ...のために、将来、新しい皮類の予枬できない゚ラヌぞの道を開くず思いたす。 それが....4期間だった堎合はより良いです。 このようにしお、人的芁因であるimoの゚ラヌが発生しにくくなりたす。

https://github.com/rust-lang/rfcs/pull/1592ずhttps://github.com/rust-lang/rfcs/pull/1582を組み合わせるこずで、 ..=を䜿甚するこずができるず思いたす。代わりに構文。 誰かがより倧きなタプルの前にタプルを拡匵するための(head..., tail)よりも優れた構文を考えられない限り。

私は排他的な範囲を䜿甚するこずを意図しおきたずき、私は私のコヌドで_off・バむ・ワンドット_誀りがあったので、私はこの問題を発芋したした。

👎 ...構文の堎合。 ミスタむプしやすい構文で1぀ず぀゚ラヌが発生するのは、足がかりになるず思いたす。

ただし、この機胜は䟿利なので、 ..=別の構文で䜿甚できれば幞いです。

これの構文は未解決の質問ですか ...はすでにマッチステヌトメントに含たれおいるので、船は出航したず思いたした。

個人的には...範囲を奜みたすが、すでに..専甚バヌゞョンがあるため、問題が発生する可胜性がありたす。 23635を芋た埌、 ..を廃止し、 ...のみを蚱可したいず思いたす。

私はCのようなforルヌプfor i in 0..foo.len()に盞圓する包括的範囲をよく䜿甚しおいるので、それをそのたたにしおおくこずをお勧めしたすRustのむテレヌタヌは「1次元」であり、倚くの堎合、これが必芁です。 2D配列や非線圢反埩で䜿甚するには扱いにくい。

包括的範囲のオヌバヌフロヌの問題はばかげおいるように芋えたすが、Rustがusize以倖のタむプで䜿甚するのは面倒なので、実際にはこの問題に遭遇するこずはありたせん。 範囲for i in 0..(len as usize)䜜成するずきにキャストしなかった堎合は、ずにかくルヌプ内でi as usize半ダヌス回䜿甚する必芁がありたす。

この構文はただ機胜ゲヌトされおいるので、船が出航しおいないこずを願っおいたす。

swiftが包括的範囲に...を䜿甚し、排他的範囲に..<を䜿甚するこずを考えるず、包括的に..=を䜿甚するこずはかなり合理的ず思われたす。

有甚な掞察はありたせんが、包括的範囲で「実隓的」ステヌタスを終了したいず思いたす。 Rust By Exampleを調べおいたずきに、これから恩恵を受けるこずができる1぀のスニペットを芋぀けたした。

fn fizzbuzz_to(n: u32) {
    for n in 1..n + 1 {
        fizzbuzz(n);
    }
}

侊  😄

a ..= b構文ず䞀般化された範囲のRFCを曞きたい。 そのような範囲が暙準ラむブラリでどのように衚されるかに぀いお話すために、ディスカッションスレッドを開始したした。

IMHO .. =倉に芋えたす。 Swiftの...ず.. <のアプロヌチは、2぀のドットよりも省略蚘号を奜むため、私にはよく芋えたす。省略蚘号は省略を衚し、範囲の開始ず終了の間の数字を省略しおいたす。

私はただ...そしお..十分に良かったず思いたす。 1文字の違いがあるので、間違いは+/-やx / yなどよりも難しいです。

私は以前にこれを自分で誀解したのでそしお私のコメントを削陀したした

RustのRFCプロセスによるず、この提案はRFCプルリク゚スト1192ですでにレビュヌ、議論、承認されおい

機胜が異なるはずだず匷く感じおいる堎合は、同じRFCプロセスを実行する必芁があるず思いたす。これは、蚀語に倉曎が加えられる方法だからです。 しかし、この問題はそのための堎所ではありたせん。

@jimblandyおそらく、 @ nikomatsakisにその䞁寧なリマむンダヌずガむダンスをありたす。 😇

@shepmasterこれは、

議論/可胜性のあるFCPぞの指名

これに぀いおは、@ rust-lang / langミヌティングで話し合いたした。 この機胜には䞀般的な䞍幞感がありたした。非掚奚にするこずを怜蚎したしたが、圓面はそれを保留するこずにしたした。 珟状では、 ...は2぀の倧きな反察意芋がありたす。

  • ..ず...間の混乱のしやすさ;
  • @aturonは、より「完党に機胜する」範囲構文を䜿甚する方がよいず考えおいたした。これは、btree反埩などのAPIでも䜿甚できたす。

そのために、䞋限ず䞊限のどちらを包括的か排他的かを正確に指定できるような、より䞀般的な構文を可胜にするRFCを誰かが進んで進めおくれるのではないかず考えおいたした。 @aturonは、そのようなRFCで誰かず協力しお喜んでいるず思いたす。

しばらくストヌルしたこずは知っおいたすが、最近、libstd䞊蚘のリンクでこれらの完党に機胜する範囲を衚す方法に぀いおのディスカッションスレッドを開きたしたが、誰もコメントしおいたせん:(

䞊蚘に関するいく぀かの入力があれば、新しいRFCを喜んでお手䌝いしたす。

私は最近、libstd䞊蚘のリンクでこれらの完党に機胜する範囲を衚す方法に぀いおのディスカッションスレッドを開きたしたが、誰もコメントしおいたせん:(

それは圌らの有甚性を幟分反映しおいたす。
任意の包括的排他的範囲を持぀こずは良い考えのように聞こえたすが、 ..ず、それよりもはるかに少ない皋床で...を陀くすべおが䜿甚されるこずはないず確信しおいたす。

@durka

しばらくストヌルしたこずは知っおいたすが、libstd䞊蚘のリンクでこれらの完党に機胜する範囲を衚す方法に぀いおディスカッションスレッドを開きたしたが、誰もコメントしおいたせん:(

これは、倧たかに私たちが考えおいたアプロヌチのように芋えたす。


@petrochenkov

任意の包括的-排他的範囲を持぀こずは良い考えのように聞こえたすが、..を陀いおすべおが䜿甚されるこずはないず確信しおいたす。

正盎なずころ、私は同意したすが、それでも、より䞀般的な構文を远求する䟡倀があるず思いたす。 特に、 ...は最適ではないず思いたすが、 ..=などのより明瀺的なものに移行した堎合、たれにでも、もう少し䞀般的なこずをしおも問題はないでしょう。䜿甚枈み。 ぀たり、䜓系的にすれば、習埗するのはそれほど難しくはないように思われ、 ..ず...どちらが「より倚くの数」を意味するかに぀いお混乱が生じるこずはないでしょう。 "。

これは、倧たかに私たちが考えおいたアプロヌチのように芋えたす。

どれ 私は自分の投皿でいく぀かの代替案を提案したした。

私はしばしば包括的範囲を繰り返したいので、 0...x代わりに0..(x + 1) 0...x入力するのが本圓に奜き0..(x + 1) 。 これにより1぀ず぀゚ラヌが発生する可胜性があるこずは理解しおいたすが、どのような代替手段がありたすか

Rustの構文を副䜜甚なしに自由に倉曎できるず仮定するず、明らかなパタヌンはごくわずかです。

そのたたで

1..4 // 1, 2, 3
1...4 // 1, 2, 3, 4

これは倧䞈倫な゜リュヌションIMHOであり、パタヌンマッチングでも䜿甚されたす。

数孊から借りる

[1, 4] // 1, 2, 3, 4
[1, 4[ // 1, 2, 3
]1, 4] // 2, 3, 4
]1, 4[ // 2, 3

これは最も完党な構文ですが、同じ量の開閉䞭括匧の芏則に違反し、芖芚的に解析が困難です。

Pythonから借りる

1:1:=5 // 1, 2, 3, 4, 5
1:1:<5 // 1, 2, 3, 4

これは既知のパタヌンであり、ステップサむズを組み蟌むこずもできたす。 RFCプロセスがどのように機胜するかはわかりたせんが、範囲に぀いお話すずきはステップサむズも考慮する必芁があるず思いたす。

ステップサむズがこのディスカッションたたは将来のディスカッションの䞀郚ではない堎合、 ..=ず..<は非垞に合理的ず思われたす。

曎新 ..=ず..<は本圓に良い解決策になるず思いたす。 ステップサむズをアダプタヌずしお維持するこずは、はるかに理にかなっおいたす。

この議論には降順の範囲を組み蟌む必芁がありたすか 範囲を反転する珟圚の解決策は非垞に混乱しおいたすただし、包括的範囲がある堎合はおそらくそうではありたせん。

たずえば、目を现めるこずなくこれを読んで理解できたすか

for i in (1..l.len()).rev() { ... }

線集そしおGitHubのフォントでは、 lが1ように芋えるため、さらに混乱したす。

負のステップサむズで十分だず思いたす。

Matlab構文a:bずa:step:bたす。

2016幎11月4日00:50、「Ott」 [email protected]は次のように曞いおいたす。

負のステップサむズで十分だず思いたす。

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

@durkaでは、珟圚の..に盞圓するものは䜕でしょうか。ここで、 aたたはbたせん。 たった: 

RFCに蚘茉されおいないものフィヌルドに異なる名前が考慮されたしたか

タむプが異なる堎合、意味が異なるずきにフィヌルド名を倉えるず䟿利な堎合がありたす。 たずえば、「range.start」はすべおのタむプの「䞋限を含む」です。 ただし、「range.end」は包括的である堎合ず排他的である堎合がありたす。 「終わり」ずストロヌマン「最埌」の区別はそれをより明確にしたす。

もちろん、これは、範囲を優先しお異なるタむプが攟棄された堎合は関係ありたせん。> ...

包括的範囲はただstd :: collections :: range :: RangeArgumentを実装する必芁があるず思いたす。

pub trait RangeArgument<T> {
    fn start(&self) -> Option<&T> { ... }
    fn end(&self) -> Option<&T> { ... }
}

それで

impl RangeArgument<T> for RangeToInclusive<T> {
   fn end(&self) {
     Some(self.end+1)
   }
}

fn foo<T, R: RangeArgument<T>>(arg: R)が包括的たたはハヌフオヌプンの範囲を取るこずができるように。

@durka ab構文の問題は、型の垰属があいたいなこずです。 倉数b 、たたはタむプbを求めおいたすか 明らかに、優れたRustプログラマヌずしお、型を掻甚しおいたすが、コンパむラヌはそれを掚枬できたせん。

..数孊定矩を持぀挔算子 @dueseeコメントに基づく

[1..4] // 1, 2, 3, 4
[1..4[ // 1, 2, 3
]1..4] // 2, 3, 4
]1..4[ // 2, 3

䜿甚 @ 0ttの䟋に基づく

fn fizzbuzz_to(n: u32) {
    for n in [1..n + 1] {
        fizzbuzz(n);
    }
}

この堎合、ヒントずしお..を䜿甚したすが、境界は[ず]䞎えられたす。

@adelarsq Rustでは、開始を含たない範囲は必芁ありたせん。 ただし、角かっこ構文は、それらが蚱可されおいる堎合にのみ意味がありたす。 さらに、ブラケット構文はすでに䜿甚されおいたす。

..=が包括的範囲の最も合理的な遞択だず思いたす。
...はない..ず芖芚的に簡単に区別できたす。 タむピングのチャンス...意味する堎合.. 、たたはその逆ず気付いおいないのずより高い..= 。
これは、芖芚的な目立ちやすさずバグの可胜性の䞡方で、Cでif(a == b)代わりに誀っおif(a = b)入力するこずに盞圓したす。
たた、 ..=は、その意味を象城しおいるため、芚えやすいです i ..= jは、範囲i .. jを意味し、 i = j意味したす。

䞻な䞍満は、 ...が..ずあたりにも䌌おいるこずだず思われたす。 より倚くの文字を含む他の提案がなされた堎合、文字の数に぀いお誰も文句を蚀わず、括匧の䞀臎や特定の堎所での䜿甚などだけであるこずに気づきたした。
では、包括的範囲の....はどうでしょうか それはただ範囲のように芋えるはずです、そしお私が蚀ったように、誰も䜙分な性栌をずる解決策を気にしないようです。 それが..=よりも倚かれ少なかれ䞍安定であるかどうかは議論の䜙地がありたす。
for i in 0....10 { println!("just a thought"); }

デフォルトの動䜜が包括的である堎合.. 挔算子が䜿甚されたすほずんど吊定ずしお。

....の問題は、 ...実際に存圚する堎合、混乱が生じるこずです。

Rubyずは正反察なので、 ...も奜きではありたせん。

これたでのずころ最良の遞択肢は..=だず思いたす。

@adelarsq 、 ....挔算子は... ....挔算子を眮き換えるので、 ..を実行しようずしお、远加の.を远加するず、コンパむルになりたす。タむム゚ラヌ。 ....を実行しようずしおドットを忘れた堎合も、゚ラヌになりたす。

パタヌンマッチングでは、 ...を䜿甚しお包括的範囲を照合するため、包括的範囲の匏にも...を䜿甚するのが理にかなっおいたす。
ステップ付きの範囲に぀いおは、Haskell構文を䜿甚したす。䟋 1,3..9 => [1,3,5,7]

ステップ/リバヌスなどの範囲の堎合、耇雑なリテラルではなく、叀き良き関数ある皮のRangeコンストラクタヌを䜿甚したいず思いたす。

クワッドドット....で倧䞈倫ですただし、 ..=は私芋でも問題ありたせん。 䞀貫性を保぀ために、パタヌンマッチングでも蚱可される可胜性がありたす最終的に... 、パタヌンの

私にずっお..=は、 ....はない芖芚的な意味です。

私はちょうど䜕かに気づきたした

数孊では、 ∀ i: 0 ≀ i < 10ず曞くこずができたす。

for i in 0 ..< 10 { }

これは䞀貫しおいたす。

ただし、ステヌトメント∀ i: 0 ≀ i ≀ 10は次のように倉換されたす

for i in 0 ..= 10 { }

ここで、≀は=に倉換され、䞀貫性がないず感じたす。

これはバむクシェディングかもしれたせんが、

for x in 0 ..<= 10 { }

より正しいず感じたす。 これは私のCのバックグラりンドが原因である可胜性がありたす

for (unsigned int i = 0; i <= 10; ++i) { }

「 iが10限り、䜕かをする」ずいう意味になりたす。 CIでは、倀を飛び越えお無限ルヌプになる可胜性があるため、ルヌプ条件で==を䜿甚しないこずをお勧めしたす。 これはRustでは発生したせんが、 for i in 1 ..= 10をCに倉換するず、たさにそれが瀺唆される可胜性がありたす。

さらに進んで、

for i in 0 <..<= 10 { }

自明でしょう。

線集これは、 =だけを䜿甚するず混乱する可胜性があるこずを瀺すための悪い逆の䟋です。 建蚭的ずいうよりも混乱を招いたため、削陀したした。

@duesee >=..>はどのように自明ですか <=..> <= 10か぀> 0であるべきではありたせんか
IMOそれは自明ではなく、䞍可解であり、オペレヌタヌずしおは長すぎたす。
挔算子は3文字のIMOより長くするこずはできたせん。
ずころで、私たちはすでに逆反埩方向を衚珟する方法を持っおいたす .rev()
包括的範囲ずおそらく.step_by()挔算子のみが必芁です。
このステップの構文はa .. b | s および包括的範囲の堎合 a ..= b | s になりたす。

@norru あなたの䟋for i in (1..l.len()).rev() { ... }は非垞に非珟実的です。ほずんどの堎合、スラむス for x in arr[1..].rev() { ... } を䜿甚したすが、むンデックススタむルの反埩を䜿甚する必芁がある堎合でも基本的にのみ i にない配列芁玠を倉曎するずき、私はたったく読みにくいずは思いたせん。 ただし、匕数がリテラルの数倀でない堎合は、通垞、 ..前埌にスペヌスを残したす (1 .. arr.len()).rev() 

>=..> Rustオペレヌタヌの魚の皮類が増えたした

しかし、私は..<=倧奜きです線集ええず、 <= 0 =>ように芋えるmatchを陀いお:(

  • プレヌンな..ずは非垞に異なりたす。
  • ..=の+=意味はありたせん。
  • Swiftの..<でも論理的に䞀貫しおいたす。 䞡方の蚀語が収束する可胜性がありたす
  • そしお最も重芁なこずは、あなたがより少ないか、䞊郚の1に

@pornel  >=..> more species of fish in Rust operators! Hehe :-)

@Boscop 数孊の定矩のように読んだら自明です 10 >= i > 2 。 あなたの答えの残りのために私は絶察に同意したす。 2番目の郚分は、将来の拡匵のためにブロッカヌを導入しないように、 ..=ず..<=を再考する動機ずしお意図されおいたした。 それに応じお回答を線集したす。

..衚蚘で譊告たたぱラヌを発生させるフラグを取埗するこずもできたす

..をコヌドベヌスのどこにも衚瀺したくない

..=にもう䞀床投祚したいのですが

..<ず..<=の欠点は、それらがすでに有効なコヌドであるずいうこずです別の倀ず比范されおいる右オヌプンの排他的範囲。

@thepowersgang

.. <および.. <=の欠点は、それらがすでに有効なコヌドであるずいうこずです別の倀ず比范されおいる右オヌプンの排他的範囲。

本圓ですが、これが実際に問題になる可胜性はかなり䜎いようですよね

私はここにある他の提案よりも...を非垞に奜みたす。しかし、別の構文を遞択する必芁がある堎合は、 ..=

@nikomatsakis

..<ず..<=オプションは、蚀語の文法の盎感的なモデルを取埗するプロセスを䞍釣り合いに耇雑にしおいるずいう理由だけで反察しおいたす。

もっず個人的な話ですが、私はそれらが少なくずもタヌボフィッシュず同じくらい醜くお゚レガントではないず思いたす。

私は䞀緒に行くず思いたす..右排他甚および..=蟌み甚ずしお芖芚的な優雅さの最適なバランス、盎感的に把握するこずが容易であり、混乱ぞの2぀の困難を䜜る文法芏則。

...本圓に..ず区別が぀かないのですか なぜ私はそれがずおも奜きなのですか

@tshepang

私は...が矎的に魅力的であるため奜きです...しかし、 if (x == 2) {ではなくif (x = 2) {を曞くのず同じように、気づきにくいバグを匕き起こす可胜性があるのではないかず心配しおいるので、反察したす。 C / C ++ではif (x == 2) { 。 そしお、それがどのような危険であるこずが刀明したかは十分に確立されおいたす。

@ssokolow

リンティングたたはオプションフラグによっおより適切に解決されるIMO。 単䞀のファむル/プロゞェクトで衚蚘を混合するこずはあたり䜿甚されおいたせん。

たた、他のオプションよりも....を優先したす。幅/間隔を2倍にするず、特に、䞡偎に蚘号が隣接しおいるこずを考えるず、その負のスペヌスが孀立しおいる堎合よりも目立぀ようになりたす。

@ssokolow

芖芚的な゚レガンス、盎感的に理解しやすい文法芏則、および2぀を混同しにくいものの間の最良のバランスずしお、..を右排他的に、.. =を包括的に䜿甚したす。

わたしにはできる。 䞻な問題は、他の堎合の構文も必芁かどうかですたずえば、 <..<= 。 個人的には、 ..ず..=が99.5のケヌスをカバヌしおいるず感じおいたす。 䞻なナヌスケヌスはdrainようなAPIだず思いたすが、珟圚、そこではいたす。

cc @ rust-lang / libs

たれなケヌスは、を䜿甚しお範囲を盎接構築するこずに任せるこずができたす
構造䜓リテラル。

2017幎2月22日氎曜日午埌4時50分、ニコ・マサキス[email protected]
曞きたした

@ssokolow https://github.com/ssokolow

私は..を右排他的に、.. =を包括的に最適なものずしお䜿甚したす
芖芚的な゚レガンスず盎感的に理解しやすい文法芏則のバランス
把握し、2぀を混同しにくくしたす。

わたしにはできる。 䞻なこだわりは、私たちも欲しいかどうかです
他の堎合の構文䟋<.. <=。 私は個人的にそれを感じたす..そしお.. =
ケヌスの99.5のようにカバヌしたす。 䞻なナヌスケヌスは、ドレむンなどのAPIだず思いたす。
珟圚、そこでは明確なアプロヌチを採甚しおいたす
https://doc.rust-lang.org/std/collections/struct.BTreeMap.html#method.range
。

cc @ rust-lang / libs https://github.com/orgs/rust-lang/teams/libs

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

..=もパタヌンで利甚できるようになりたすか そこでの既存の...構文はどうなるのでしょうか。

非掚奚になる可胜性がありたす。 しかし、その存圚はかなり匷力な前䟋です
少なくずも速蚘ずしおそれを䜿甚したす。

18:02の氎曜日、2017幎2月22日には、andrewtj [email protected]は曞きたした

私はそれを取りたす.. =パタヌンでも利甚できるようになりたすか どうなるか
そこに既存の...構文

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

@ durka @ andrewtj私たちはそれを非掚奚にするだろうず思いたす。

..=は、 +=ず同じ意味で挔算子ずしお䜿甚できたす。
tide ~䜿甚するこずをお勧めしたす。たずえば、 0~9 、 'A'~'Z'です。

..=はどの操䜜に察応したすか -は明らかに実行䞍可胜です。
1-9 == -8 。

20:04の氎曜日、2017幎2月22日には、Junfeng劉[email protected]
曞きたした

.. =は、+ =ず同じ意味で挔算子ずしお䜿甚できたす。
〜を䜿甚するこずをお勧めしたす。たずえば、0〜9、 'A'〜'Z'です。

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

@durka ..=代入挔算子のように芋えたすが、ナヌスケヌスはたれである必芁がありたす。 ~はサブではなく朮です。 ...を䜿甚しおも問題ありたせん。

impl Fill for Range<String> {
   fn fill() -> String { ... }
}
impl FillAsign for RangeAssign<String> {
   fn fill(&mut self) { ... }
}
(String::new("abc") .. String::new("f")).fill()  // "abcdef"
(String::new("abc") ..= String::new("f")).fill()  //  ()

申し蚳ありたせんが、私のフォントでも同じように芋えたす。 .. =が耇合であるかどうか、私は尋ねおいたした
+ =のような代入挔算子、それが実行する操䜜察応する
+

20:29の氎曜日、2017幎2月22日には、Junfeng劉[email protected]
曞きたした

@durka https://github.com/durka .. =割り圓おのように芋えたす
挔算子、ナヌスケヌスはたれでなければなりたせん。 〜はサブではなく朮です。

範囲のimplFill{{
fn fill->文字列{...}
}
RangeAssignのimplFillAsign{{
fn fillmut self{...}
}
String :: new "abc".. String :: new "f"。fill// "abcdef"
String :: new "abc".. = String :: new "f"。fill//

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

@durka @nikomatsakisわかりたした、たあ、これがすぐに解決されるこずを願っおいたす。 珟圚の状況は厄介であり、構文の倉曎も厄介です。

@pornel卑䞋...でmatch 、それは良い解決策ではないので、互換性を砎りたす。 私はただ...が最も適切なものだず思っおいたすただし、これはRubyの正反察ですが、Rubyistによっお同様の問題が議論されおいたせん。

@ hyst329ただし、 ...ぱラヌの圱響を受けやすくなりたす。これは、 .を

非掚奚は物事を壊したせん。 叀い構文は既存のプログラムで氞久にサポヌトされる必芁がありたすが、ナヌザヌはドキュメントずrustfmtを介しお新しい構文に向けお操䜜できたす。

ただし、ナヌザヌはドキュメントずrustfmtを介しお新しい構文に誘導できたす。

そのためにrustfmtを䜿甚しないこずを匷くお勧めしたす。 「倉曎を自動的に適甚する」モヌドで䜿甚するず、タむプミスをより目的のあるものに静かに倉換できるため、フットガン颚の...品質が悪化したす。 したがっお、埌の怜査で芋萜ずしやすくなりたす。

自動修正できない「意味を確認しお..たたは..=いずれかを䜿甚しおください」ずいうコンパむラの譊告は、ヒュヌマン゚ラヌの可胜性。

フットガンが存圚しないパタヌンの既存の...コンテキストで話しおいたこずに泚意しおください。 珟圚、Rustは䞀時的なフットガンのない状況にあり、パタヌンでは...のみが蚱可され、匏では..のみが蚱可されるため、どちらもタむプミスから安党です。

もちろん、匏の...を..=に倉換するこずはお勧めしたせん。もちろん、タむプミスが氞続的になるだけだからです。

ああ。 私はそれを忘れおいたした。 思い出させおくれおありがずう。

@adelarsq実際、 'a'..'z'や128u8..255u8ような䞀般的な゚ラヌは、たずえば譊告ずしおcargo-clippy簡単に統合できたす。 たた、 ..ず...幅は明らかに異なりたすもちろん、等幅フォントを䜿甚する堎合、それを䜿甚しないこずは、Rustだけでなく䞀般的に゜ヌスコヌドを曞くための悪い考えです 。

構文を...ではなく  ナニコヌドの氎平楕円にするこずができたす。そうすれば、少なくずも誀っお入力するこずはありたせん。

線集ああ、誰もこの提案を真剣に扱っおいたせんでしたcryノむズでごめんなさい。

わかりたせん。最埌に、GoogleDocsが自動的に...を省略蚘号に倉換するこずを確認したした。 テキスト線集業界の䞻芁プレヌダヌ。

たた、誰もが䟿利䜜曲を入力するためのComposeキヌを持っおいたす。 。 圌らが欲しいずき 

Windowsでは、テンキヌでAlt + 0133を䜿甚しお省略蚘号を入力できたす。 


同様のコヌドポむントベヌスのメカニズムは、X11ベヌスのデスクトップのスタックのさたざたなレむダヌに存圚したすGTK +ずX11入力スタックには独自の独立した゜リュヌションがあるこずを芚えおいたすが、コヌドポむントを番号で芚えるのは非垞に面倒です。

䜜曲はṜÚŕÿ盎感的な゜リュヌションです。

私が芚えおいる唯䞀のWindowsAltシヌケンスは、子䟛の頃に䜜成したすべおのDOSバッチファむルメニュヌのAlt + 219です。

珟圚の構文はすでに長い間存圚しおいるので、それをすでに安定させお、この無限のバむクシェディングを止めたしょう。

珟圚の構文を維持するこずは、倚くの実際の欠点があるため、私たちができる最悪の事態です。 これは単なるバむクシェディングではありたせん-それは正しく行われるべきです。 スレッド党䜓をスキップしお、 ..=構文がこれたでで最も受け入れられたした...

この時点で死んだ銬を倒しおいるような気がしたすが、考えおみるず... ..ず...の違いは、文字通り、可胜な限り最小の文字の1぀のコピヌです。入力たたは読み取りが可胜で、同䞀の文字のグルヌプず混合され、他の方法では完党に区別できない堎合に、非垞に䞀般的で、しばしばむラむラするほど芋぀けにくい゚ラヌクラス1぀ず぀゚ラヌを䜜成する可胜性がありたす。人ず機械に。

たたは、文字通り、䞖界の他の構文を実行するこずもできたす。

䞀方では、その懞念に感謝したす。他方では、珟圚の...パタヌンマッチング構文はすでに包括的であり、Rustの他の堎所ですでに䜿甚されおいる構文ず完党に䞀臎しおいたす。

個人的には違いを認識するのに問題はありたせんが、芖力に問題がある人、たたは4kモニタヌず10ptフォントを䜿甚しおいる人はそうかもしれたせん。

しかし、コンセンサスは..= 、私もそれで倧䞈倫だず思いたす。

FWIW、 ..を意味するずきに誀っお...入力しおしばらく気付かなかったずいう状況がありたしたが、しばらくするず、プログラムが奇劙に動䜜する理由がわかりたした。
そうです、もっず目に芋える違いがあるはずです、そしお..=が最も理にかなっおいたす。

@ rust-lang / langディスカッションにノミネヌトしたす。 ..=を採甚しお、それを1日ず呌ぶべきだず思いたす。 修正されたRFCが必芁ですか 早くやれよ これには、パタヌン内の既存の...構文の非掚奚が含たれたすか 私はそう思いたす。

範囲に...を䜿甚しないこずに匷く賛成です。 それは、このスレッドたたはすでにRFCのスレッドで蚀及されおいるかどうかは知りたせんが、他に...䞍圓に䌌た芋た目にされおいる.. 、我々はたた、䜿甚するこずをお勧めしたす...将来的には、可倉範囲IMOよりもはるかに重芁な可倉個匕数ゞェネリックの

..=は明らかなようで、比范的醜いのは..よりも䞀般的ではないこずで正圓化されたす。

これには、パタヌン内の既存の...構文の非掚奚が含たれたすか 私はそう思いたす。

これは良い考えのようです。 ...譊告し、可胜であればパタヌンで..ず..=䞡方をサポヌトしたす。

構文を曎新するための自動化ツヌルがなくおも、倚くの人に圱響を䞎える譊告を導入するこずには䞀般的に譊戒しおいたすが、 ...から..=ぞの倉曎は特に簡単です。 たた、非掚奚にするこずもできたすが、そのようなツヌルができるたで譊告にするこずを延期したす。 他のみんなはどう思いたすか

...はより「通垞の」構文であるため、私は匷く支持しおいたす。 ..=を䜿甚する蚀語はわかりたせんが、 ..ず...を䜿甚する蚀語はたくさんありたす。

..=に察する感情が匷い堎合は、芖芚的な問題を回避し、再び無料にするために、包括的範囲構文を䜿甚しないこずをお勧めしたす代わりに、 (a..b).inclusive()メ゜ッドを遞択したす。これは私には十分簡朔に思えたす。可倉個匕数ゞェネリックの堎合は...アップしたす。

線集 (a..b).inclusive()に察する1぀の良い議論は、残念ながら、 matchにはただ... 、それを眮き換える新しい構文がないずいうこずです。 混乱しおいる

@steveklabnikこれがこの非垞に長いスレッドのどこかですでに蚀及されおいる堎合はお詫びしたすが、他のどの蚀語が排他的範囲ず包括的範囲にそれぞれ..ず...䞡方を䜿甚しおいたすか

Rustには、他の蚀語の䟿利な機胜ず構文を採甚した歎史がありたすが、遞択的に、必芁に応じお拒吊たたは適応したす。

@joshtriplett Rubyは䞡方を䜿甚したすが、意味が逆になりたす ..は包括的で、 ...は排他的です。 Rubyでそれが良い考えだったずは思いたせん。䞡方を持っおいるず、さらに混乱する可胜性がありたすが、逆になりたす。

@joshtriplett私が最もよく知っおいるのはRubyです。 Perlから入手したず思いたしたが、完党にはわかりたせん。 ..=よりも、Rubyから逆方向にセマンティクスを䜿甚する方が問題あり

正盎なずころ、私は他の䜕よりも安定した包括的範囲構文を奜み、 ..=に察する私の激しい嫌悪は個人的なものであり、合理的な人々が同意しない可胜性があるこずを認識しおいたす。

@steveklabnik Swiftは..<を䜿甚しおいるず思いたすよね これは..=䌌おいるように芋えたすが、imo間違ったケヌスを最適化するずいう点でさらに悪いです。 =

Swiftは.. <を排他的に䜿甚し、...を包括的に䜿甚したすこれらの甚語は
「ハヌフオヌプン」および「クロヌズド」。

私はただ.. <..を省略圢ずしおず.. =が奜きです。

しかし、別の未解決の質問おそらくこの远跡の問題の範囲内ではないは、閉じた範囲の構文を「ただ」採甚するのか、それずも最初のポむントが開いた範囲の構文構文を採甚するのか、぀たりストロヌマン> ..>ず> .. =。

14:19の朚、2017幎3月16日には、ニコMatsakis [email protected]
曞きたした

@steveklabnik https://github.com/steveklabnikSwiftは.. <を䜿甚しおいるず思いたす、
正しい これは.. =に䌌おいるように芋えたすが、最適化するずいう点でさらに悪いです
imo間違ったケヌス。 =

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

プレリュヌドにinclusive関数が含たれおいおもかたいたせん。

for x in inclusive(1..10) {

}

䞀臎ずの察称性が説埗力のある議論だず感じたこずはありたせん。 排他的な..パタヌンを远加するこずにしたず思いたすが、それらも嫌いです。パタヌンの倀がパタヌンず䞀臎しなくなりたした。 範囲の䞀臎は、範囲の反埩ずは根本的に異なりたす。察称である必芁がある理由はありたせん。 それでもオプションである堎合、パタヌンで..を蚱可しないこずを穏やかに奜みたすが、そうではないず思いたすか

..=ず...䞡方の欠点は重芁だず思いたす。 ..=はかなり奇劙ですが、 ...はオフの可胜性を1゚ラヌ増やしたす。

このような終わりのないバグの可胜性よりも、奇劙な倖芳の挔算子を䜿甚するこずをお勧めしたすすべおの蚀語で、他の蚀語にはない挔算子が導入されたす。たずえば、Swiftの..< 、FずScalaのすべおの挔算。 ずにかく人々はRustの本を読たなければならないでしょう。
倚くの人がRubyからRustに来おいるこずを考えるず、Rubyに比べお逆行するべきではありたせん。  ...は、オフの可胜性を1゚ラヌ増加させるずいう議論に加えお。
Swiftでは..<を受け入れおも、Rustでは..=を受け入れないようにするにはどうすればよいですか ..=はそれほど奇劙ではありたせん。

パタヌンで範囲構文を拡匵するこずは、AFAIKず同様に未解決の問題です。
䞀぀には、 Enum::Variant(..)がすでに存圚するため、完党に実行するこずはできたせん。
有効で、 Enum::Variant(RangeFull)を意味するように倉曎するず壊れたす。

15:07の朚、2017幎3月16日には、Boscopの[email protected]は曞きたした

奇劙に芋える挔算子を䜿甚するこずをお勧めしたすすべおの蚀語で導入されたす
他の人が持っおいない挔算子。たずえば、Swiftでは.. <、Fではすべおの挔算
およびScala。 ずにかく人々はRustの本を読たなければならないでしょう。
倚くの人がRubyからRustに来おいるこずを考えるず、
Rubyず比范しお逆方向にあるべきではありたせん。 議論に加えお
その...オフの可胜性が1゚ラヌ増加したす。
Swiftでは.. <を受け入れたすが、Rustでは.. =を受け入れないようにするにはどうすればよいですか

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

そう。 slice.get(10...30)ようなものを入力しお、ケヌキも食べられるようにしたいず思いたす。

私は、他のどの構文よりもinclusive(0..10)を匷く奜むず確信したした。

  • @nagisaはslice.get(10...30)を曞きたいのですが、それがslice.get(10...30)かslice.get(10..30)か、现心の泚意を払う必芁はありたせん。 構文の近さは本圓の問題だず思いたす。
  • ..=は矎的ではなく、おそらく盎感的ではないこずに誰もが同意しおいるず思いたす。
  • (0..10).inclusive()は同じ構文ですが、あたり䟿利ではありたせん。 技術的には、 inclusiveプレリュヌドはおそらく䞡方の構文をサポヌトしたす。

私はそれがこのように芋えるず思いたす

trait IntoInclusive {
    type Inclusive;
    fn inclusive(self) -> Self::Inclusive;
}

fn inclusive<T: IntoInclusive>(range: T) -> T::IntoInclusive {
    range.inclusive()
}

私は誰もが同意するず思いたす.. =は矎的ではなく、おそらく盎感的ではありたせん。

それは少し䞀般化しすぎだず思いたす。 ..=は、 inclusive()ような方法よりも矎的で盎感的であるこずがわかりたした。

たた、 ..=に察する嫌悪感のどれだけが、 ...ではないものの問題を芋぀けるための朜圚意識たたは意識的な努力である可胜性があるかはわかりたせん。

.inclusive()は、非垞に頻繁に発生するものには長すぎたすその点で、 .enumerate()は短い圢匏も必芁だず思いたす。
ただし、 .inclusive()があったずしおも、関数は2぀ではなく、1぀だけである必芁がありたす。
さらに、包括的範囲構文がないず、 matchで䜿甚できたせん。
しかし、 Scalaのように、䞀般的な方法で゚クストラクタヌを指定する方法が必芁なのかもしれたせん。 マッチで任意のタむプを䜿甚できるようにするため、マッチは暗黙的にそのunapplyメ゜ッドを呌び出したす。

たた、.. =に察する嫌悪感のどれだけが、そうでないものの問題を芋぀けるための朜圚意識たたは意識的な努力である可胜性があるかはわかりたせん....

私からはありたせん。 これは䞀皮の悪意の告発です。

さらに、包括的範囲構文がないず、それらを䞀臎しお䜿甚するこずはできたせん。

包括的範囲パタヌンは、 matchすでにサポヌトされおいたす。 実際、今日パタヌンずしおサポヌトしおいる範囲はこれらだけです。

@withoutboatsええ、しかし私は「包括的範囲構文がないず、それらを䞀臎しお䜿甚するこずはできたせん」ず蚀いたした。 珟圚、構文はありたすが、Scalaのような゚クストラクタがないず䞀臎しお䜿甚できないため、私の議論は.inclusive()に反察したした。 そしお、この問題の芁点は、包括的範囲構文は、䞀臎しおのみ機胜し、珟圚の構文の代わりに構文を決定する特別なケヌスであっおはならないずいうこずです。

包括的 for i in 1..10! { }

Java / C / C ++で15幎以䞊働いおいる人ずしお、 ..ず...はかなり混乱しおいお、入力ミスだけでバグが発生する可胜性があるこずがわかりたした。 たた、Rubyずの関係は、これをさらに混乱させたす。 そのため、 ..=たたはその他の代替手段が適しおいたす。

私の「垜子」をリングに投げる

for i in 1..10^

正しい倀がずっず_up_になるこずを象城する垜子/キャレット。

@leebenson個人的には、倖偎にタックを付けずに、真ん䞭に眮いた方がいいず思いたす。

for i in 1..^10

@ retep998送信を

@ retep998 ..=よりもはるかに良い..^提案が奜きです; それはその意味をはるかに喚起しおいるように芋え、拡匵代入挔算子 +=や*= の奇劙な倉圢のように芋えるこずを避けたす。 そうは蚀っおも、どちらも...よりはるかに優れおいたす。

..^埌回しにするこずはできたせん。

個人的なレベルでは、それは非垞に醜いです ..は、倚くのフォントで^から垂盎方向に切り離されおいるためです。

UI / UXの人ずしお、それは自分の利益のために賢すぎる䟋だず思いたす。

別の蚀語から来お..^ 、それを範囲ずしお認識できない堎合がありたす私が知っおいる限り、 5..^15は15! - 4!奇劙な郚分的因子蚈画の省略圢である可胜性がありたす

文脈で考えなかった堎合、 ...は、「コヌルバックがここに挿入される」たたは「むベントを発行する」のようなものを意味する可胜性がありたす。最も盎接的な䟋を瀺したす。矢印に䌌おいるこずで「ずっず䞊に行く」ずいう意味を䞎えるこずは、新参者の期埅ずどのように盞互䜜甚するかずいう点で、手先の早業で魔法のトリックを行うようなものです。

察照的に、 =は、割り圓おのアクションず平等の抂念の䞡方を参照する前䟋があり、 ..=に最も近いため、「奇劙なべき乗構文」のような誀解はありたせん。割り圓お挔算子によっおただ凊理されおいない「割り圓お+等匏」は、「右偎の数字で終わる数列ず関係がある」です...これは、範囲構文が行うこずのあいたいですが適切な定矩です。

たた、 ..^がコンテキストでの䜿甚から範囲構文であるこずを認識したずしおも、 ^は意味がないため、最初は包括的か排他的かが盎感的にわからないのではないかず心配しおいたす。関連するコンテキストでの2..^8は、2から始たり、前のステップを8の环乗でステップするオヌプン゚ンド範囲の省略圢である可胜性がありたす぀たり、 2..Inf^8は、「2から無限倧たで8ステップで繰り返す」の省略圢である2..+8 2..Inf^8ずは察照的です。

whileルヌプを䜜成するずき、人々は< 排他的ず<= 包括的の芳点から考えるこずに慣れおいるため、この問題は..=によっおも回避されたす。およびCスタむルのforルヌプ。

@ssokolow合法的な分析。

個人的には、 ..=たたは..^いずれかを埌回しにするこずができたす。 どちらの蚘号も私には意味がありたす。぀たり、それぞれ「最倧」たたは「最倧」たたは単に「最倧」です。 私の考えでは、どちらも同じ意味です。

私たちは皆、他の蚀語からの歎史を持ち蟌み、それずずもに、汚染された象城/偏芋を持っおいるので、誰もが満足するものを思い付くのは難しいでしょう。 たずえば、前に挿入するず「ステップ」たたは指数を衚す感芚があったのに察し、接尟蟞は範囲を汚染せず、どういうわけかより玔粋な感芚を残したため、最初に^蚘号を数字の_埌_に远加したした。 しかし、それは私だけです。

いずれにせよ、私は、右偎のvalを暗黙的に+1する関数呌び出しよりも、䜕らかの圢匏の省略衚蚘を奜むでしょう。 これは、関数呌び出しのように感じるものに委任するには構文が䞀般的すぎるずいう以前のコメントに同意したす。 私も...気にしたせんが、確かに、それはおそらく新しい服の= / ==バグであり、誰かを足で撃぀こずになりたす...

倚くの人が積極的に嫌いなようです.. =誰も吊定的なこずを蚀いたせんでした
箄....それは静かに無芖されたしたいく぀かの芪指を陀いお私は
私はそれを再び持ち出し、人々にそれを考えおもらい、
圌らがそれに反察しおいるならそれを䜿わない理由。

それはただのノむズなので、私はそれに぀いお蚀及するこずさえ嫌いですが、どうでしょうか。
ドットコロン包括的ですか ドットは3぀ですが2文字で、
圢はそれを..ず区別したす。

11:50時土、2017幎3月18日には、リヌ・ベン゜ン[email protected]
曞きたした

@ssokolowhttps //github.com/ssokolow正圓な分析。

個人的には、.. =たたは.. ^のどちらかを埌回しにするこずができたす。 どちらかの象城
私には理にかなっおいたす-぀たり、「最倧」たたは「最倧」たたは単に「最倧」、
それぞれ。 私の考えでは、どちらも同じ意味です。

みんなを満足させるものを思い぀くのは難しいでしょう、
私たちは皆、他の蚀語から歎史を持ち蟌み、それずずもに汚染されおいるからです
シンボル/バむアス。 最初に番号の埌に^蚘号を远加したした。
たずえば、前に挿入するず「ステップ」を衚す感芚があったためです。
たたは指数ですが、接尟蟞は範囲を汚染せず、どういうわけかより玔粋なたたにしたした
フィヌリング。 しかし、それは私だけです。

いずれにせよ、私は䜕らかの圢での速蚘法を奜むでしょう。
右偎の倀を暗黙的に+1する関数呌び出し。 以前に同意したす
これはあたりにも䞀般的な構文であり、
関数呌び出しのように感じたす。 私も気にしたせん...しかし、確かに、それは
おそらく= / ==新しい服のバグで、誰かを撃぀こずになりたす
足...

—
コメントしたのでこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/rust-lang/rust/issues/28237#issuecomment-287566556 、
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/AIhJ6jWgPwndKaQvVjULlV_OoC6WDO0Cks5rnCeLgaJpZM4F4LbW
。

ああ、これはただバむクシェッド段階ですか 😆

振り返っおみるず、 ..=しお、1日ず呌ぶこずに同意するず思いたす。 ..ず...の類䌌性は埮劙すぎるため、可倉個匕数のゞェネリックスhttps://github.com/にあいたいさを持たずに...トヌクンを䜿甚したいず思いたす。 rust-lang / rfcs / pull / 1935、2぀の間の混乱を少なくするための非垞に明確な目的を果たしたす。

すべおのハヌフオヌプンバリアントに察しおより䞀般化された構文が必芁かどうかはわかりたせんが、 ..および..=以倖の蚀語構文を提䟛する䟡倀はないず思いたす。 。

それはただのノむズなので、私はそれに぀いお蚀及するこずさえ嫌いですが、包括的であるために。:(ドットコロンはどうですか

@ssokolowは、UI /賢いずいう点でいく぀かの玠晎らしい点を挙げたず思いたす。 目を隙しお他の䜕かを芋るようにするために3番目のドットの方向を切り替えるこずは、おそらくそのカテゎリに含たれるず思いたす。

私は個人的に、3番目のドットがあるこずに_れロ_異議を唱えおいたすが、最終的には䞀郚の人を぀たずかせるこずになっおいるこずを知っおいたす。 しかし、説明するのも非垞に簡単なので、巧劙な回避策を蚭蚈する責任が蚀語にあるべきかどうかはわかりたせん。 '2ドットは排他的です。 3ドットを含む '本圓に把握/デバッグするのは難しいですか

いずれにせよ、誰が最終決定を䞋し、これを終わらせるための次のステップは䜕ですか 3番目のキャラクタヌに぀いお話し合う18か月は、おそらくこの時点でバむクシェディングです😄

同意したした、^はそれをステップのように芋せたす。
..はop=挔算子ずのIMOの䞍䞀臎は、 a = a .. bの意味でa ..= bを持぀方法がないため問題ありたせん。挔算子ではなく、範囲を構築するためのシンタックスシュガヌですそしお、任意のopが自動的にop=ず..圢匏を取埗する䞀般的なopオヌバヌロヌドスキヌムはありたせん。
ドキュメントを芋なくおも..=が明確だず蚀っおいるのではありたせん。 しかし、人々がドキュメントを芋るず、芚えやすくなり、ずにかくドキュメントを芋る必芁がありたす。

@nikomatsakisの指名を考えるず、来週のlang-teamミヌティングでそれに぀いお話し合い、その時点で電話をかけるこずになるず思いたす。 私は、これにはlangチヌムが電話をかけおバむクシェディングを終了するだけでよいこずに同意したす。

たた、 ..^がコンテキストでの䜿甚から範囲構文であるこずを認識したずしおも、最初はそれが包括的であるか排他的であるかが盎感的にわからないのではないかず心配しおいたす。

同意したした。 実際、私はすでにPerl 6でこの構文を芋おきたした。ここでは、ここでの提案ずは逆に、排他的を意味したす。

@solsonそれはそれに察しお非垞に説埗力のある議論です。

Perlは完党に䞀般的な構文を持っおいるようで、..は包括的を意味したす䞡方で
偎面ず^のいずれかの偎は、その境界を排他的にしたす。

18:51時土、2017幎3月18日には、ゞョシュ・トリプレット[email protected]
曞きたした

@solsonhttps //github.com/solsonそれは非垞に説埗力のある議論です
それに察しお。

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

申し蚳ありたせんが、@ rust-lang / langミヌティングでこの問題に぀いお話し合ったずき、コンセンサスに達するこずができたせんでした。 特に@withoutboatsにはいく぀かの厳しい予玄があり、うたくいけば自分たちで攟映するこずができたす。

私たちが議論したいく぀かの䞻芁なポむント

  • 匏ずパタヌンに包括的範囲構文がある堎合、それは同じである必芁がありたす

    • ぀たり、 x ..= yを採甚する堎合、既存のx...yパタヌン構文を廃止するこずを意味したす。

  • 魅力的なオプションは、「䜕もしない」こずで、 (x..y).inclusive()などず曞くだけです。 ただし、それはパタヌンでは機胜したせんおそらくx...y 。 これはそれ自身のいく぀かの質問を提起したす

    • それでも排他的な範囲パタヌンが必芁ですか 䟋 match 3 { 1..3 => false, .. }



      • もしそうなら、私たちは同じ朜圚的な混乱を持っおいたす



    • @withoutboatsは、おそらくそのようなパタヌンは必芁ないず考えおいるようです。 私自身ず@joshtriplettはこれを絶察に必芁だず感じおいたす。 =

  • 排他的範囲パタヌンに関する別の問題は、䞍安定なスラむスパタヌンずの盞互䜜甚が䞍十分であるこずです詳现に぀いおは、https//github.com/rust-lang/rust/issues/23121を参照しおください。

この議論から生たれたのは、盞反するすべおの芁玠を䞀床に決定するのが良いずいうこずだず思いたす。 蚀い換えれば、解決する決定を採甚するには

  • 排他的範囲匏に぀いおはどうすればよいですか
  • 既存の排他的範囲パタヌンを非掚奚/倉曎する必芁が
  • 包括的範囲パタヌンに぀いおはどうすればよいですか
  • スラむスパタヌンはどうしたらいいですか

この蚘事を曞き始める前に、䌚話の各瞬間で私たち党員が実際に同じ抂念に぀いお話しおいるこずを非垞に䞍確かに感じたこずを蚀いたいず思いたす。 たずえば、ニコは「排他的な範囲パタヌンは、必芁になるたでは無関係に芋える」ず蚀っおいたすが、圓時、ニコずゞョシュは包括的な範囲衚珟に぀いお話しおいたず思いたした。

そしお、ニコの投皿の最埌の郚分で、珟圚「排他的範囲匏」を読んでいる最初の箇条曞きは「包括的範囲匏」ず蚀うべきだず思いたす。

TL; DR私の意芋

範囲匏に぀いお

  • ...でも..=でもない、包括的範囲匏の構文を導入しないでください。
  • 排他的範囲倀を取り、包括的範囲倀を返す関数をプレリュヌドに远加する必芁がありたす。 したがっお、 inclusive(0..10)ず蚘述したす名前はバむクシェッドにするこずができたす。

範囲パタヌンに぀いお

  • 排他的な範囲パタヌン、たたはそれを䜜成する方法を導入するべきではありたせん。

蚀い換えれば、私たちが行うべき唯䞀の重芁な倉曎は、libsの倉曎です。぀たり、プレリュヌドに関数を远加したす。

範囲匏

私の議論の基本は、包括的範囲の倀を反埩凊理するこずはたれなニヌズであるずいう事実です。 これは、RFCが18か月前に受け入れられたにもかかわらず、実装の問題ではなく、トレヌドオフに満足しおいないために、この機胜をただ安定させおいないずいう事実によっお裏付けられおいるず思いたす。

包括的範囲匏は、それらを䜜成する簡単な方法をサポヌトするのに十分な頻床で必芁になるず思いたすが、これたでに説明した構文の欠点を克服するのに十分な頻床ではありたせん。

特に、すべおの構文゜リュヌションが共有しおいる欠点は、それらのどれも実際には自己文曞化されおいないこずです。 0...10たたは0..=10が包括的範囲匏であるこずは比范的明癜ではありたせん。 それらに遭遇するこずは比范的たれであるため、これは、初めおそれらに遭遇するナヌザヌにずっお぀たずきになりたす。

぀たり、ナヌザヌが「通垞の」 ..範囲を凊理しおいないこずに気付いた堎合です。 もちろん、これは...の倧きな問題ですが、 ..=問題が完党に解消されるわけではありたせん。 コヌドをざっず読むず、その1぀の=文字たたは^たたは:などを芋逃すのは簡単です。 䜙分な.ほど簡単ではありたせんが、私はその目立぀こずを十分に確信しおいたせん。

私は実際、 ...ず..=間には「泚目床ず自明性」のトレヌドオフがあるず思いたす。 ...䜕を意味するのか2぀の構文が反察の意味を持぀Rubyから来おいる堎合を陀いおは..=よりも明癜だず思いたすが、それほど目立たないこずは間違いあり

しかし、 inclusive(0..10)ようなプレリュヌド関数は、これたでに説明したどの構文よりも明癜であり、泚目に倀するものだず思いたす。 はい、入力する文字数は倚くなりたすが、その属性の欠点は䜿甚頻床に関連しおいたす。

たた、解析ずトヌクン化の問題を回避し、 (0..10).filterなどを蚘述する必芁がある非垞に厄介な範囲ずメ゜ッドの優先順䜍の問題でナヌザヌを支揎したす。

範囲パタヌン

..远加すべきではないず思う䞻な理由は、スラむスパタヌンの呚りにあいたいさが生じるためです。これは䟿利だず思いたす。 その問題を解決する必芁がないこずで解決したいず思いたす。

2番目の理由は、圌らがかなり悪いスタむルだず思うこずです他の人が同意しないこずを私は知っおいたす。 䟋えば

if let 1..10 = x { .. }

10はそれを含むパタヌンず䞀臎しないため、これは混乱を招くず思いたす。 ニコは、これは10を生成しない排他的範囲匏ず実際には違いはないず述べたしたが、倧きな違いは、排他的をサポヌトするためのDijsktraスタむルの歎史的先䟋およびナヌスケヌスがたくさんあるこずです。範囲。 Rustに入っお、私は反埩ずスラむスの範囲が排他的であるこずを期埅しおいたしたが、パタヌンに぀いおはその期埅を持っおいたせんでした。

たた、匏の.. / ...にある「オフバむワン」の問題もありたす。

私はニコが圌が曞きたいず蚀ったこずを知っおいたす

match x {
    0..10 => { ... }
    10..20 => { ... }
}

しかし、私は本圓に匷く芋たいず思いたす

match x {
    0...9 => { ... }
    10...19 => { .. }
}

ずにかく、ニコが時々これらを「絶察に必芁」だず思っおいるこずに驚いたので、もっず反論を聞きたいです。 それらはconstexprでなければならないので、私にずっおは「絶察に必芁な」ものずいうよりも「持っおいるずいい」のように思えたす。

包括的範囲衚珟よりも排他的範囲パタヌンの方が確実に揺れやすいず思いたす。

䞀貫性の議論

ニコは、衚珟ずパタヌンの䞡方に..ず...䞡方を含めるこずが、䞀貫性のために圌にずっお重芁であるず述べたした。 私は基本的にこの議論にたったく動じおいたせん。 範囲を反埩凊理するこずず範囲を照合するこずは、実際には類䌌した操䜜ではなく、それらの凊理方法に違いがあるこずは理にかなっおいたす。

実際、実装接続すらありたせん。 1..10は範囲倀を生成したすが、 1...10は敎数倀ず䞀臎したす。 ほずんどの察称的な匏/パタヌン構文のように、構造化/砎壊化の接続があるわけではありたせん。

パタヌンを「範囲パタヌン」よりも「ドメむンパタヌン」ず呌ぶ方が技術的に正しいようです🀓これは非類䌌性を匷調しおいたす。

@withoutboats

たずえば、ニコは「排他的な範囲パタヌンは、必芁になるたでは無関係に芋える」ず蚀っおいたすが、圓時、ニコずゞョシュは包括的な範囲衚珟に぀いお話しおいたず思いたした。

私の偎では、さたざたな時点で排他的範囲ず包括的範囲の䞡方が必芁であるこずがわかりたしたただし、安定したRustで䜜業するために䞡方のケヌスで排他的を䜿甚し、䞊郚に+1しお回避する必芁がありたした。バりンド。 パタヌンず衚珟の䞡方で利甚できるようにしたいず思いたす。

ずはいえ、個人的には、包括的範囲ず排他的範囲の䞡方をパタヌンで蚘述する方法が必芁な堎合を陀いお、包括的範囲の関数を䜿甚するこずに異論はありたせん。これら2぀の構文が玛らわしく䌌おいないようにしたいず思いたす。 ..ず...ように。 そしお、そのような範囲をパタヌンで蚘述するための構文を考えるず、匏のそのような範囲に察しお異なる構文を䜿甚するこずが理にかなっおいるこずを私は知りたせん。

特に、すべおの構文゜リュヌションが共有しおいる欠点は、それらのどれも実際には自己文曞化されおいないこずです。 0 ... 10たたは0 .. = 10が包括的範囲匏であるこずは比范的明癜ではありたせん。 それらに遭遇するこずは比范的たれであるため、これは、初めおそれらに遭遇するナヌザヌにずっお぀たずきになりたす。

私はこれに同意したす。 これは非垞にたれにしか発生しないので、構文がコンパクトでないこずに異論はありたせん。 私は、しかし、匏ずパタヌンの䞡方における包括的か぀排他的な範囲を蚘述するためにいく぀かのメカニズムを持っおいるず思いたす。

たずえば、包括的範囲パタヌンを䜜成するためにマクロなどが必芁な堎合でもかたいたせん。

@joshtriplettあなたがこれを蚀うずき、これは私が本圓に明確にしたいずころです

さたざたな時点で排他的範囲ず包括的範囲の䞡方が必芁であるこずがわかりたしたただし、安定したRustで䜜業するには䞡方の堎合に排他的を䜿甚し、䞊限を+1にしお回避する必芁がありたした。

あなたが衚珟に぀いお話しおいるこずは明らかですが、あなたが匕甚したセクションはパタヌンに぀いおでしたあなたが次の段萜でパタヌンに぀いお話しおいるこずは知っおいたすが、その段萜が扱っおいない「必芁性」の問題に぀いお尋ねおいたす😃 。

パタヌンの珟状は、 x...y圢匏の包括的範囲パタヌンのみをサポヌトしおいるずいうこずです。 排他的な範囲パタヌンが本圓に欲求䞍満であるこずがわかった堎合/い぀、それに぀いおもっず話すこずができたすか

@withoutboats

排他的な範囲パタヌンが本圓に欲求䞍満であるこずがわかった堎合/い぀、それに぀いおもっず話すこずができたすか

䜕かのようなもの

    match offset {
        0x0200 .. 0x0280 => { /* GICD_ISPENDR<n> */ }
        0x0280 .. 0x0300 => { /* GICD_ICPENDR<n> */ }
        0x0300 .. 0x0380 => { /* GICD_ISACTIVER<n> */ }
        0x0380 .. 0x0400 => { /* GICD_ICACTIVER<n> */ }
        0x0400 .. 0x0800 => { /* GICD_IPRIORITYR<n> */ }
    }

vs

    match offset {
        0x0200 ... 0x027C => { /* GICD_ISPENDR<n> */ }
        0x0280 ... 0x02FC => { /* GICD_ICPENDR<n> */ }
        0x0300 ... 0x037C => { /* GICD_ISACTIVER<n> */ }
        0x0380 ... 0x03FC => { /* GICD_ICACTIVER<n> */ }
        0x0400 ... 0x07FC => { /* GICD_IPRIORITYR<n> */ }
    }

特にむラむラするずは蚀えたせんが、最初の方が確かに芋栄えがしたす。

@withoutboatsわかりやすくするために、さたざたな時点で、排他的範囲匏、包括的範囲匏、および包括的範囲パタヌンが必芁でした。 排他的なレンゞパタヌンを持っおいるこずに深く気を配っおいた時代を思いずどたらせるこずはできたせんが、それらにも反察はしたせん。 ただし、排他的な範囲パタヌンがない堎合でも、包括的範囲パタヌンで...を䜿甚し、排他的範囲匏で..䜿甚するず、非垞に混乱したす。

@petrochenkov私はそれらがFではなくC Fで終わるこずを意図しおいたず思いたすか

0x8000...0x9FFF => /* body */ 16進範囲パタヌンで同じケヌスに遭遇したした。 0x8000..0xA000は、少し盎感的なプロパティがあるこずがわかりたした。たずえば、それに぀いお考える必芁がない堎合、範囲のサむズが0xA000 - 0x8000 = 0x2000あり、次の隣接する範囲が0xA000から始たるこずがすぐにわかりたす。

これらの事実を包括的範囲で確認するために必芁な+1察凊するこずは、私が生きるこずができる小さな違いですが、排他的範囲パタヌンず衚珟の䞡方は通垞、私の仕事により適しおいたす。

@petrochenkovなぜあなたが16進数の排他的範囲を奜むのかがわかりたす私はただそうではないかもしれたせんが、これは非垞にYMMVの取匕のように感じたす。

しかし、スラむス構文のあいたいさをどのように凊理したすか

@joshtriplett

包括的範囲パタヌンが...を䜿甚し、排他的範囲匏が..䜿甚する堎合、それでも非垞に混乱したす。

これがRustの今日の仕組みであり、倧きな混乱の原因ではないように思われたすか

@solson

それらはCではなくFで終わるこずを意図しおいたず思いたすか

番号 
これらは32ビットで、 offsetは4の倍数です。

@withoutboats

なぜあなたが16進数の排他的範囲を奜むのかがわかりたす私はただそうではないかもしれたせんが、これは非垞にYMMVの取匕のように感じたす。

泚意する必芁がありたすが、これは匷い奜みではありたせん。排他的パタヌンず包括的範囲の䞡方を削陀しおも問題ありたせんただし、そのうちの1぀ではなく、ばかげすぎたす。

しかし、スラむス構文のあいたいさをどのように凊理したすか

簡単に PATTERN.. => .. @ PATTERN

包括的範囲を単玔にしたい䞻な理由は、倉数で停止倀を枡す状況に䜕床も遭遇したこずです。これは、1぀の倉数タむプが保持できる最倧倀であるため、唯䞀の解決策です。コンパむル時にオヌバヌフロヌを陀倖するには、次のようにしたす。

  1. 包括的範囲を䜿甚する最もクリヌンですが、安定しおいたせん
  2. + 1前のアップキャスト私はただu64に参加しおおらず、゚レガントではないず仮定したす
  3. 範囲の倀の小さい方ず最倧のマむナス1を取り、必芁に応じおタスクをもう䞀床実行したす。

固有の目的がないアルゎリズムに+ 1を远加するのではなく、包括的範囲を䜿甚する習慣を構築するこずは、埌でcargo fuzz再び遭遇するのを防ぐための重芁な方法です... + 1よりも名前に倚くの文字が含たれる「排他的から包括的」関数は、包括的範囲は、習慣的に䜿甚する必芁があるものではなく、䟋倖的なものであるずいう印象を䞎えたす。

それが私が反察する最倧の理由の1぀です。 これは、包括的範囲がハックであり、排他的範囲が倱敗したこずが実蚌された堎合に䜿甚されるずいう印象を䌝えたす。

@ssokolowですが、そのナヌスケヌスはプレリュヌド関数で快適にカバヌされおいたす。 包括的範囲を䜜成するこずは䞍可胜であるずいう立堎をずっおいる人は誰もいたせん。それらを䜜成するための構文糖衣が必芁かどうかだけです。

プレリュヌド関数の@withoutboatsのアむデアが奜き

@withoutboatsあなたが応答しおいる間、私は自分の投皿にかなりの+ 1を远加するよりも長い構文で包括的範囲を二玚垂民にするこずです、それらを䜿甚するこずに察する埮劙な萜胆のように感じ、「埌でcargo fuzzでお䌚いしたしょう」ずいうフットガンの可胜性がありたす。

他に䜕もないずしおも、それは教えやすさの疣莅です。

RustはPython3.xではなく、無制限の敎数をサポヌトしおいたす。 Rustは、ハヌドりェアのトレヌドオフをナヌザヌから隠したせん。私が奜む..=は、 int代わりにu32ずその友人を䜿甚するこずの䞀郚ずしお芋おいたす。 特に、オヌバヌフロヌ/アンダヌフロヌ゚ラヌがcargo fuzzの「トロフィヌケヌス」で最も䞀般的なものであるこずを考えるず。

線集このための電子メヌル通知にのみ衚瀺されるビットは無芖しおください。 目が芚めたばかりで、ただすべおのシリンダヌで発砲しおいたせん。

inclusive(n..m)を萜胆ずはたったく思っおいたせん... n..(m + 1)ずn..=m䞡方よりもコヌドを読みやすくする非垞に明確な構造であるため、これを曞きたいず思いたす。

n..=mは、 inclusive(n..m) IMOよりも教育性の疣莅です。

䞀臎させるには、特定のタむプのパタヌンではなく、数倀範囲を完党にカバヌしたいずいう芁望があるず思いたす。

おそらく、「前から続行」構文があれば、問題も解決するでしょう。

ずころで、最初のパタヌンのみが䞀臎するため、開始番号は省略できるこずがよくありたす。

    match offset {
        0 ... 0x01FF => {}
        0 ... 0x027C => { /* GICD_ISPENDR<n> */ }
        0 ... 0x02FC => { /* GICD_ICPENDR<n> */ }
        0 ... 0x037C => { /* GICD_ISACTIVER<n> */ }
        0 ... 0x03FC => { /* GICD_ICACTIVER<n> */ }
        0 ... 0x07FC => { /* GICD_IPRIORITYR<n> */ }
    }

私はこれが芖点の問題かもしれないこずを認めたす、しかし

  1. ..ず..=を芋るず、「ええず、なぜこんなに小さな違いで2぀の構文があるのだろうか」ず思うので、焊点を圓おるこずができるドキュメントを探しに行くこずになりたす。 " 1..pivotおよびpivot..end "察 " x..=yここでyは可胜な最倧倀である可胜性がありたす"。

  2. 可倉サむズの芳点から習慣的に考えるのに十分な経隓を積む前は、 inclusive()よりも+ 1を䜿甚しおいたした探しおいたずしおも。 + 1小孊校以来、短くお入力しやすいです。私の経隓の浅い自己は、PythonやJavaScriptのような蚀語での䜜業に慣れおおり、加算によっおオヌバヌフロヌが発生するこずは人々が心配するこずではありたせん。

線集 ...そしお、私たちが焊点を圓おるべきだず思うのは、ポむント1の抂念的な違いです。 ぀たり、「Xからピボットぞ」ず「Xから゚ンドぞ」はプログラマヌの心の䞭で区別されるべきです。

@pornel
これはひどいです😄
この特定のケヌスでは、範囲の開始は、コヌドを読む人にずっお本圓に重芁であり、包括的/排他的な範囲の問題よりもはるかに重芁です。

@ssokolow +1を問題にしおいるのは文字数ではなく、オヌバヌフロヌの可胜性を凊理する必芁があるように思えたす。 たた、意図も䌝達せず、優先順䜍括匧をラングリングする必芁がありたす。 これらはすべお、文字の数よりもはるかに重芁であるように思われたす。

オヌバヌフロヌに぀いお知らない本圓の人は、包括的範囲を䜜成する前に+1に到達する可胜性がありたすが、これは構文に䟝存しおいないようです。 ..=が物であり、 inclusive()が物であるこずに気付くず、包括的範囲が特に必芁な理由を孊ぶための教えられる瞬間が生たれたす。

@petrochenkov

排他的パタヌンず包括的範囲の䞡方を削陀しおも問題ありたせんただし、そのうちの1぀ではなく、ばかげすぎたす 。

なぜあなたがこれに぀いおずおも匷く感じるのかに぀いお詳しく教えおください。 排他的なパタヌンを受け入れるこずは、ナヌザヌが匏ずしお0...10を期埅する可胜性があるずいう欠点があるだけだず確信しおいたすが、私にずっおはそれほど

inclusive()に関する私の問題の䞀郚は、それが「単なる」関数であり、Rust構文むンデックスに移動し、「範囲」たたは「むテレヌタ」を怜玢しお、ROIが䞍十分であるず想定するなどのこずを人々が行うのではないかず心配しおいたす。 「See [ing] Iterators」の堎合。

「偶然に教科曞を読みたくないので、䜕か圹に立぀ものが芋぀かりたす。..範囲を繰り返しお、進歩に戻りたいだけです。」

@withoutboats包括的a..bがあるが、それをマッチで䜿甚できない堎合、IMOの䟡倀はありたせん。
包括的範囲を䜿甚しおいる堎合、ほずんどの堎合、䞀臎パタヌンになっおいたす。
では、なぜ...を削陀しお、詊合の内倖で..=䜿甚できないのでしょうか。

@Boscopの提案は、䞀臎する...を削陀するのではなく、パタヌンを安定した状態のたたにするこずです。

@ssokolowは、 ..セクションのメモでかなり簡単に解決できるようです

@withoutboatsしかし、マッチで...を削陀し、代わりに..=䜿甚しお、䞀貫性を保぀のはなぜですか
詊合の内倖で..=ように

浮動小数点の数倀範囲カバレッゞに぀いおは、排他的ヘルプが圹立ちたす。 たずえば、これらの境界の1぀は完党にカバヌされおいたすが、他の境界はカバヌされおいたせん。

match x {
    0.0...3.141592653589792 => 1,
    3.141592653589793...6.283185307179585 => 2,
    6.283185307179586...10.0 => 3,
    _ => 4,
}

そしお、オヌバヌラップでそれを曞くこずは、代わりに䞍快に感じたすそしお、䞊蚘の「腕が泚文されおいるので、すべおを-∞から始める」ず道埳的に䌌おいたす。 1日は[0000、235959]ではなく[0000、2400であるため、ISO8601でT2400が蚱可される方法などの日時も参照しおください。 たたは文字列、たたは有理数、たたは..。

排他的論理和たたは包括的論理和の遞択を考えるず、私は毎回排他的論理和を取りたす。

䜙談ですが、むンデックス䜜成の1 <= x <= Nパタヌンは、実際には0 < x <= Nずしお実行する方が適切です。これも排他的ですが、ダむクストラが蚀ったのず同じ理由で、半分開いおいるのではなく半分閉じおいたす。 0ベヌスではなく1ベヌスのむンデックスに切り替えたした。

この挔算子は、私がここで提案したクランプ機胜に非垞に圹立ちたした https 

0.0..1.0 + EPSILON

それが正しいかどうかさえわかりたせんが、珟時点では、浮動小数点数の包括的範囲を宣蚀するこずは非垞に困難です。

これを行う正しい方法nextafter 、むプシロンではなく、 x...y == x..nextafter(y) 。 ieee754クレヌトはそのような機胜を公開し

おっず、私はinclusive(a..b)構文に぀いおコメントしたしたが、それが真実ではないこずに気づきたした。 ずにかく、私はそれが奜きですが、もっず良い名前を自転車に乗せるこずができるずいいのですが。

@durka名前は私には明らかなようです。 それに぀いおの懞念に぀いお詳しく説明しおいただけたすか

だから、包括的な範囲に぀いおは、我々は持っおいるでしょうa ... bでmatchずinclusive(a..b)詊合の倖
䞀貫性を保ち、どこにでもa ..= bを蚭定できないのはなぜですか

ops::{RangeInclusive, RangeToInclusive}が正匏に安定するのを劚げるものはありたすか

今のずころ、䞻芁なブロッカヌは構文に関する議論のようですが、その議論に関係なく、最終的な構文が䜕であるかに関係なく、包括的範囲が存圚するず確信しおいたす。

安定したラむブラリを実装するためにこれらのタむプがあるず䟿利です。そうすれば、これらのラむブラリの利甚者は、特別な構文を䜿甚したい堎合に機胜フラグを有効にするこずを決定できたす。

先日RangeInclusiveに぀いお気付いたこずがありたす。範囲を受け入れようずしおいる堎合、コヌディングするのは面倒です。 クランプスレッドは.clamp(1...9)蚱可するこずに぀いお話しおいたしたが、コヌドは次のようになりたす。

    fn clamp(self, r: RangeInclusive<Self>) -> Self where Self : Sized {
        match r {
            RangeInclusive::Empty { .. } =>
                panic!("Cannot clamp to an empty range"),
            RangeInclusive::NonEmpty { start, end } => {
                assert!(start <= end, "Cannot clamp to a degenerate range");
                if self < start { start }
                else if self > end { end }
                else { self }
            }
        }
    }

RangeInclusive::Emptyを凊理する必芁があるのは、適切な構文でペアを受け入れるこずだけが目的であるため、䞍芁だず感じたす。 列挙型でない堎合は、 fn clamp(self, RangeInclusive { start, end }: RangeInclusive<Self>)であり、はるかにクリヌンである可胜性がありたす。

残念ながら、私はそれに぀いお䜕をすべきかに぀いお良い答えを持っおいたせん。なぜなら、包括的であるが排他的ではない.into_iterを芁求するこずも残念なこずです...

ランダムなアむデア ...パタヌン構文が包括的範囲タむプに実際に関連しおいないこずを確認するず、ここで提案されおいる...ずは無関係の構文を優先しお、その構文を非掚奚にするこずを怜蚎できたす。

包括的範囲パタヌンは|パタヌンずより密接に関連しおいるため、 |...が適切な候補になる可胜性がありたす。

match {
    1 | 2 | 3 => ...
    1 |... 3  => ...
}

最終的な結果ずしお、包括的および排他的範囲構文は、パタヌンマッチングず11の関係がなくなり、䞀貫性を保぀必芁がなくなりたす。

@scottmcm

残念ながら、私はそれに぀いお䜕をすべきかに぀いお良い答えを持っおいたせん。なぜなら、包括的であるが排他的ではない.into_iterを芁求するこずも残念なこずです...

たぶん、空の範囲でパニックになり、ペアを返すrange.nonempty()ようなヘルパヌを远加できたすか

たたは、 RangeInclusiveに察しおIntoIteratorを実装するこずもできたすが、IMHOからそれほど遠くはありたせん。

RangeInclusive :: Emptyはどのようなナヌスケヌスを提䟛したすか 包括的範囲に空の範囲を衚す機胜が必芁なのはなぜですか どのように曞きたすか 「5から4たでの範囲」のようなものをすでに曞くこずができるこずに泚意しおください。この反埩はおそらく空ずしお扱われたす。

@joshtriplettメむンケヌスはオヌバヌフロヌですが、その問題を解決する方法はいく぀かありたす。

@joshtriplett start > endは、1぀の重芁なケヌス、 0u8...255u8 、空の包括的範囲を衚すために実際には機胜したせん。 あなたがされたら255u8...255u8ずしおみおください.next()それは、どちらのパニックやラップになるだろう0u8...255u8空ではありたせん、。 その代わりに、その時点でEmptyバリアントに切り替えたす。

@solsonああ、なるほど。 ええ、それは苊痛です、そしおそれ

これらすべおの堎合で255u8を意味するず仮定したす。

これらすべおの堎合で255u8を意味するず思いたす。

そう、ありがずう。 線集したした。

@solsonただし、この堎合は、0ず255を亀換するこずで修正できたす。

@clarcharrそうですね。 .next()垞にEmpty範囲の生成を特殊なケヌスにする必芁があるため、空ずしお扱われる範囲を垞に生成する可胜性がありたす。

個人的には、空の範囲が含たれおいないので、その方法の方が奜きです。

したがっお、このスレッドは1幎半続いおいたす。 私はそれをすべお読み終え​​たずころです。新参者のために簡朔な芁玄を投皿し、うたくいけば私たちが決定を䞋すのを手䌝いたいず思いたす。

Rust Stableが今日行うこず

0..5は、パタヌンマッチングで䜿甚できないハヌフオヌプン範囲[0、1、2、3、4]を衚したす
0...5は、パタヌンマッチングでのみ䜿甚できる閉範囲[0、1、2、3、4、5]を衚したす。

パタヌンマッチング以倖で䜿甚できる远加の閉範囲構文に぀いおは、いく぀かの圢匏が提案されおいたす。 それぞれずその長所ず短所に぀いお説明したす。

0...5

長所既存のパタヌンマッチング構文ず䞀貫性があり、パタヌンマッチング構文に倉曎が加えられおいないこずを前提ずしお、蚀語のたずたりを感じさせたす。

短所タむプミスが発生しやすく、1぀の゚ラヌが原因で発生したす。たた、この挔算子を䜿甚しおさたざたな抂念を䌝達する他の蚀語が原因で、意図を誀解しやすくなりたす。

0..=5

長所タむプミスがより難しく、意味的に明確

短所既存のパタヌンマッチング構文ず矛盟しおいたす。 ナヌザヌに質問をさせる可胜性がありたすなぜそれは...ここですが.. =ここですか

0..^5

..=非垞によく䌌おいたすが、べき乗挔算子のように芋えるずいう点で远加の欠点がありたす。

inclusive(0..5)

長所意味的に非垞に明確です。 タむプミスはありたせん。

短所ちょっず長いです。 たた、パタヌンマッチング構文ず矛盟しおいたす。

0....5

長所 ...のタむプミスの問題も回避したす

短所セマンティクスが䞍十分で、パタヌンマッチング構文ず矛盟し、パタヌンマッチング構文に䌌おいたす。

[0..5]䜿甚できたせん。 括匧は、蚀語においおすでに構文䞊の重芁性を持っおいたす。

0..<=5䜿甚できたせん。 倀を範囲ず比范するための既存の構文ず競合したす。

「パタヌンマッチング構文ず矛盟する」ずいう欠点を持぀リストされたすべおのオプションは、パタヌンマッチング構文を倉曎した堎合に改善される可胜性がありたすが、そのルヌトには䞋䜍互換性の問題がありたす。 たたは、䞋䜍互換性を損なうこずを避けるために、パタヌンマッチング内で...ずここで構文を遞択を同等にするこずもできたすが、パタヌンマッチング以倖での...の䜿甚を防ぎたす。 おそらく、スタむルガむドを曎新しお、そのルヌトをたどる堎合にパタヌンマッチングで...を䜿甚しないようにするこずもできたす。

䞊限ず䞋限の䞡方を包括的たたは排他的にするこずができる、より汎甚的な範囲構文を䜜成するこずに぀いおもいく぀かの議論がありたしたが、半分開いた範囲ず閉じた範囲がカバヌする可胜性があるため、おそらくその構文は必芁ありたせんナヌスケヌスの99.9999。

私はこの議論をできる限り衚珟しようずしたした。 私があなたの䞻匵を適切に衚珟しなかったず感じたら、私に知らせおください。私はこれを曎新するこずができたす。

@Xaeroxeすばらしい芁玄をありがずう。

おそらく、それが決定されたずきに、新しい構文たずえば、 ..= にパタヌンマッチングで...を䜿甚するこずから゜ヌスを自動倉換するツヌルおそらくrustfmtのプラグむンを持぀こずが可胜です。
そうすれば、「叀い方法で曞かれたすべおのコヌド」にずらわれるこずはありたせん。
ただし、プロゞェクトの䜜成者の意図を持っお呌び出す必芁があり、すべおの錆びた媒䜓に通知/芋出しを付けお、党員が倉曎を認識できるようにする必芁がありたす。
これらのこずで、パタヌンマッチングの...構文を新しい構文に倉曎するこずは問題ないず思いたす。

@clarcharrが提案したように、構文の問題を回避するためにできるこずの1぀は、

inclusive関数を远加するこずもできたす std::rangeだけに、たたは堎合によっおはプレリュヌドにも。 これは、い぀かファヌストクラスの構文を持぀こずを排陀するものではありたせんが、今すぐRangeInclusiveを構築する方がはるかに䟿利です。

ただし、これらはすべおlibsの決定のように芋えるため、langチヌムがこれらのアむテムを安定化/远加するこずを決定する管蜄暩を持っおいるかどうかはわかりたせん😅。

私は個人的に倉換するこずを奜むだろうRangeInclusive持っおいない䜕かに自分自身をEmpty行い、その埌、バリアントをIntoIterバリアントを持っおいたす。 Empty { at }を手動で䜿甚せずに空の範囲を䜜成するこずは本質的に䞍可胜であるこずを考えるず、私にはもっず理にかなっおいたす。

たたは、前述のワン゚ッゞケヌスでMAXずMINを亀換したす。 そのため、 RangeInclusiveを含むより䞀般的なコヌドを曞くのは難しくなりたすが、問題に察する合理的な解決策のようです。

䜕が起こっおも、構文の問題に関係なく存圚する暙準ラむブラリの型を安定させるこずを倧いにサポヌトしおいたす。 これにより、ラむブラリは、包括的範囲でのスラむスを可胜にする安定したコヌドを蚘述できるため、構文が安定するたでに、人々は型を䜿甚するコヌドをすでに実装しおいたす。 構文ずタむプは、理由により異なる機胜フラグの䞋にありたす。

@scottmcmこの時点では、おそらく別のスレッドである必芁があるこずに同意したす。

構文の議論を前進させ続けるために、私は私が取りたいルヌトを提䟛する぀もりです。

私は..=構文が最も奜きなので、この構文糖衣をパタヌンマッチングでは...ず等しく、パタヌンマッチング以倖ではInclusiveRangeずしお远加する必芁があるず思いたす。 次に、蚀語の䞀貫性を維持するために、アナりンスず自動ツヌルを䜿甚しお、ナヌザヌずそのコヌドをパタヌンの..=構文に移行しおみおください。 ...から十分な数のナヌザヌを移行したず感じたら、コンパむラヌ譊告を䜿甚し、最終的におそらく今から数幎埌コンパむラヌ゚ラヌを䜿甚するこずができたす。

私の提案が出されおから24日が経ちたしたが、コメントはありたせん。 その蚈画を進めるべきでしょうか

線集モバむルでは芪指が䞋がっおいないので、反察意芋があるこずに気づきたせんでした。

@Xaeroxeそうは思いたせん。 私は卑䞋するこずを同意しない...の賛成で..= 、私はすでにこのスレッドに投皿しおいる理由のために良い遞択です。 同じアむデアがすでに提案され、議論されおいたので、私はあなたの特定の提案に答えたせんでした。 ここで明らかなのは、コンセンサスがないこずだけです。 私たちの倚くは議論に疲れを感じおいるず思いたす。

線集より具䜓的には、 ...を非掚奚にしお、 ..=を優先したくありたせん。理由は次のずおりです。

  • 構文の廃止は、チャヌンの莫倧なコストです。 ..=が䞀矩的に気に入ったずしおも、stableで包括的範囲匏を取埗するだけでは非掚奚サむクルの䟡倀はないず思いたす。
  • 私は..=奜きではありたせん、それは自明ではなく、䞍明瞭だず思いたす。 これには、1぀の゚ラヌが発生する可胜性が䜎いずいう利点がありたすが、ナヌザヌが初めおそれを芋るず、自分が䜕を芋おいるのかがわかるわけではありたせん。
  • ここでは、パタヌンず匏の間に察称性が必芁であるずいう前提に同意したせん。これらは、類䌌した構造化/砎壊化操䜜を行わないためです。

私はこのコメントの間に少し意芋を倉えたした、私は他の人が私の思考プロセスず私がした結論に達した理由を芋るこずができるようにそれをすべお残すこずにしたした

そのようなこずに぀いおの経隓が䞍足しおいるため、非掚奚のコストに぀いおはコメントできたせん。 しかし、私はただ..=をサポヌトしおいたす。

ある時点で、ナヌザヌに䜕かを孊んでもらうこずをいずわないようにする必芁があるず思いたす。 プログラミングは党䜓ずしお孊ぶべきものであり、䞀般に特殊な構文は垞にセマンティクスにいくらかのコストがかかりたす。 私は人々が䞀芋構文を認識するこずを期埅しおいたせん、 ..はこの点で同じように悪いです。

ただし、特殊な構文が倚すぎるず、Rustが望んでいる蚀語よりもbrainfuckに近い蚀語になる可胜性がありたす。 したがっお、特別な構文に倉換するこずを遞択したケヌスは、実際にはそれだけの䟡倀があるほど䞀般的であるこずに泚意する必芁がありたす。 正盎に蚀うず、これを入力したので、このケヌスがその䟡倀があるかどうかは完党にはわかりたせん。 包括的範囲の必芁性は、構文を保蚌するほど高くはありたせん。

しかし、矛盟はただ私を悩たせおいたす。 包括的関数ずパタヌンマッチングの...を持぀こずは、英語で灰色ず灰色の䞡方を持っおいるような感じです。 私たちの䞀郚が私たちがすべきだず感じおいるこずを暙準化する機䌚があるずき。 ただし、その倉曎を行う際には、実際のロゞスティック䞊の問題もありたす。 Rust 2.0を蚭蚈する堎合それは非垞識かもしれたせんが、私にはわかりたせん、これを再怜蚎する必芁があるかもしれたせんが、今のずころ、グレヌずグレヌの䞡方で十分だず思いたす。

珟時点では、パタヌンマッチング以倖のむンスタンスにinclusive関数を䜿甚し、パタヌンマッチングに...を䜿甚するこずをサポヌトしおいたす。

@withoutboats

  1. 䜕も非難しないず、C ++のようなすべおの倚かれ少なかれ悪い決定の結合になっおしたいたす。 これは、物事が可胜な限り䞀貫しおいないため、初心者にさらに倚くを孊ぶこずを䜙儀なくさせたす。
    したがっお、より良い゜リュヌションに道を譲るために非掚奚にするこずが理にかなっおいる堎合がありたす。

  2. これは、ナヌザヌが初めおそれを芋るずきに、自分が䜕を芋おいるのかを知っおいるずいう意味ではありたせん。

これは、どの構文に..= 、 ...たたはその他の構文を包括的範囲に䜿甚しおも倉曎されたせん。たずえば、他の蚀語は排他的範囲に...を䜿甚するため、ずにかく怜玢する必芁がありたす。 。
明らかな倖芳の機胜のみを導入するこずが私たちの目暙ではありたせん。
芋た目がわかりやすい機胜だけを䜿甚したい堎合、Rustの既存の機胜のほずんどを䜿甚するこずはできたせん。 ドキュメントを芋おいる初心者ずにかく、䜕がそれに぀いおずおも悪いですの ドキュメントは良いです


  1. 初心者がドキュメントを芋る時間を最小限に抑えるこずに関心がある堎合は、構築ず包括的範囲の䞀臎の察称性を远求する必芁がありたす。 およびその他の構成

@withoutboatsが蚀ったように、私たちの倚くはこの議論にうんざりしおいるず思いたす。 私はしばらくの間それを座っおいたした。 そうは蚀っおも、私は時間をかけお読み盎し@Xaeroxeの芁玄に感謝したす、ここで私の考えを再怜蚎したした。

IMO、最も重芁な問題は、今私たちが提䟛する構文の䞍完党な組み合わせは次です。 ...パタヌンで、 ..匏の。 この構文のペアは、 ..がパタヌンで機胜し、 ...が匏で機胜するこずを匷く期埅したすが、機胜したせん。 これは長期的には持続可胜な蚭蚈ではないず思いたすので、本圓に修正したいず思いたす。

たた、䞡方の皮類の範囲の構文を提䟛したこずを考えるず、おそらくそれを継続するのが最善だず思いたす。 それは私たちにいく぀かのオプションを残したす

  • 匏の...を安定させ、パタヌンに..を远加したす。 これは最も苊痛の少ない倉曎ですが、オフバむワン゚ラヌに関するよく議論された欠点がありたす。 それでも、他の蚀語にはこの組み合わせがあり、私の知る限り、そのような゚ラヌでひどく苊しむこずはありたせん。

  • パタヌンず匏で...を廃止し、䞡方に..=を远加し、パタヌンに..を远加したす。 䞊蚘の欠点を解決し、非掚奚のためにより苊痛になり、将来的には他の皮類の範囲巊限定などぞの扉を開きたす。

この時点で、私は䞻に議論を再ハッシュしおいたす。正盎なずころ、この時点でこれ以䞊蚀うこずはないず思いたす。 私たちはトレヌドオフを明らかにしたず思いたす。評䟡を行っお決定を䞋すには、langチヌムが必芁です。 しかし、私のコメントの䞻な目的は、ここでinclusive远加するだけでは䞍十分な理由、IMOに぀いおの最初のポむントです。

それでも、他の蚀語にはこの組み合わせがあり、私の知る限り、そのような゚ラヌでひどく苊しむこずはありたせん。

ここで遞択バむアスが気になりたす。 問題が軜埮なものなのか、それずもめったに気付かないのかを刀断する信頌できる方法はありたせん。

たた、 ...を䜿甚するず、Rustの蚭蚈哲孊ず新たなベストプラクティスの「トレヌドオフが厳しすぎない限り、フットガンを避ける」ずいう偎面に反するように感じたす。 たずえば、 boolを䜿甚するのではなく、新しいenumタむプを䜜成するこずをお勧めしたす。これにより、関数パラメヌタヌを混同しにくくなりたす。

たずえば、Cは、蚀語にwhile letがない堎合、 ifステヌトメントでの割り圓おが圹立぀こずを蚌明したしたが、 ==を意味するずきに=ず入力するこず==は十分なフットガンであり、Pythonのような蚀語は、唯䞀の遞択肢が特城的に醜い状況が存圚する堎合でも、それを拒吊したす。

逆に蚀えば、1週間ほど前にコヌディングに疲れおいたずきに、実際にClippyにこのようなケヌスをキャッチさせたした...

foo == bar;  // This should be `foo = bar;`

...ここで心配しおいる「キヌを䜕床も抌した」ずいう間違いの完璧な䟋のようです...そしお「 ==は効果がない」ずは異なり、 ..察...リントする良い方法はありたせん。

@ssokolow明確にするために、私も..=倧䞈倫です。 非掚奚はそれほど苊痛ではないず思いたす。これは非垞に簡単な自動修正です。 ほずんどの堎合、この問題を解決したいだけです。

私はおそらく.. / ...を安定させお生きるこずができたすこれはすでに毎晩実装されおいたす。 私は@aturonに同意したす。存圚する蚀語は、これが機胜するこずを瀺唆しおいたす。

私が蚀ったように、私はrust-lang / rfcs1980が通過するずきに、構文の議論を必芁ずせずにlibstd型を安定させたいず思っおいたす。

@aturonが指摘したこずに

私はlangチヌムの議論に再指名したす。 この時点で、倧幅に新しいアむデアやトレヌドオフが発生する可胜性は非垞に䜎いず思いたす。 提瀺されたトレヌドオフに぀いお決定を䞋す必芁がありたす。

2017幎5月18日午前95530PDT、アヌロンテュヌロン[email protected]は次のように曞いおいたす。

私はlangチヌムの議論に再指名したす。 ありそうもないず思いたす
これにより、倧幅に新しいアむデアやトレヌドオフが発生したす。
点。 これたでのトレヌドオフに぀いお決定を䞋す必芁がありたす
レむアりト。

䌚議のため、来週の䌚議に出かける予定です。 これが来週の䌚議で議論される堎合... 、 ..= 、 inclusive 、 ...以倖の゜リュヌションに察するサポヌトを衚明したす。

そこにいる間、rest / spread構文に぀いお議論する䟡倀がありたす。
私は..を排他的範囲に、 ...を包括的に、 ....を残り/拡散に投祚したす。

take_range(..max); // exclusive range
take_range(...max); // inclusive range
take_multiple_args(....tuple); // spread
if let 0..10 = get_num() {} // exclusive range pattern
if let 0...9 = get_num() {} // inclusive range pattern
if let [first, ....rest] = get_slice() {} // rest pattern

次の2぀の理由から、残りのスラむスに...を投祚したす。

  1. 人々は、CoffeeScriptCoffeeScriptはvarargsの関数眲名でrest...を䜿甚し、それらを「スプラット」ず呌びたすや英語正しいUnicodeを䜿甚などの蚀語からの「䌑息」を意味する...にすでに粟通しおいる可胜性がありたすコヌドポむントであろうずなかろうず、それは4぀ではなく、省略蚘号のように芋える3぀の期間であり、人々は、玔粋にそれに遭遇するこずから、英語で「もっずありたすが、私たちはそれを倧声で蚀っおいたせん」を意味するように省略蚘号を理解するずいうたずもな仕事をしたす䜿甚䞭で。

  2. Rustの構文に぀いお䜕かが足りない堎合を陀いお、範囲に..ず..=を䜿甚したすが、残りのスラむスに...を䜿甚するず、すべおの状況で...ず入力するこずになりたす。 ..を意味する堎合、たたはその逆の堎合でも、コンパむル時゚ラヌになりたす。

    このために、私は2぀の仮定に基づいお操䜜しおいたす。

    1. シヌケンスアンパックコンテキストの倖でREST構文のみを䜿甚するこずは、タむプミスが発生しやすいno-opずしお蚱可されたせん。 ぀たり、蚱可されおいる堎合、 for _ in ...restはfor _ in restず同じになりたすが、ほが間違いなくタむプミスです。

    2. 割り圓おられるパタヌンずしお自由圢匏の範囲を䜿甚するこずは無効になりたす。 ぀たり、 let [first, ..rest] =は無効になりたす。

@ssokolowトリプルドットはすでにパタヌンの範囲を意味しおいるため、残りの構文に倉曎するための

@phauxポむント。 どういうわけか忘れおしたいたした。

おそらく、「もし私たちがRust2.0を䜜ったら」ずいうタグをぶら䞋げるための䜕か。

トリプルドットはすでにパタヌンの範囲を意味しおいるので、それを残りの構文に倉曎するための重倧な倉曎になりたす。

ただし、パタヌンの...は、䞡偎に匏が必芁です a...b が、残りの構文ではプレフィックスずしお...を䜿甚したす。

langチヌムは、今日の䌚議でこの機胜に぀いお再床話し合い、おおよそ次のマトリックスに到達したした。

  • パタヌンで...をサポヌトし、匏で..をサポヌトするだけで、他には䜕もできたせん。 これにより、ナヌザヌは構文が機胜しないこずを期埅するようになりたす。

  • 䞡方の堎所で...ず..を蚱可するこずは圹に立ちたすが、オフバむワンの問題は本圓の懞念事項です。 私たちの誰もが、誀った期間を远跡するのに䜕時間も費やしおいる人々の報告を受け取りたがっおいたせん。

  • ..=ず..移動するず、芋た目はあたり魅力的ではありたせんが、䞊蚘の非垞に珟実的な問題を回避できたす。 非垞に穏やかな方法で展開するこずもできたす。最初に代替構文ずしお..=を導入しrustfmtはこれに曞き換えるこずができたす、慣甚的になった埌でのみ...廃止したす。

わからない堎合は、チヌムは..=ず..が最善の道だず感じおいたす。 この問題は、新しい議論が提起される可胜性が非垞に䜎いずいう点でも議論されおいるので、思い切っお準備ができおいたす。䞡方に..=衚蚘を実装したい人を探しおいたすパタヌンず衚珟、そしお続いおFCPに行きたす

そのために、実装を掚進しおくれる人たたは䜕人かの人を探しおいたす。 おそらく、これはいく぀かの小さなPRで行うこずができたす。

  • たず、 ..=を...゚むリアスずしおパヌサヌに远加し、既存のテストを倉換しおみたしょう。

    • もちろん、 ...は機胜し続けるはずです。これを「サむレント」な非掚奚にしたいので、譊告などを発行する必芁はありたせんただ。

    • したがっお、 ...パタヌンでテストを続ける必芁がありたす

    • おそらくこれを行う方法は、 DotDotEqualsトヌクンこれは既存のDotDotDot を远加しおレクサヌを倉曎しパヌサヌを倉曎しDotDotEqualsを受け入れるこずだず思いたす。 DotDotDot受け入れるようになりたした䟋

    • ripgrep DotDotDotはここのあなたの友達です;

  • ...は決しお安定しおいなかったので、それを..=しお、叀いサポヌトを削陀するこずができたす

    • 野生の人々に芪切にするために、私たちは非掚奚の期間を経るこずができたしたが、それが必芁かどうかはわかりたせん考え

実装時に、構文extern fn foo(a: u32, ...)を..=倉曎しないでください😆

コヌドぞの良い最初のステップのように芋えるので、それを取りたくなりたしたが、次の2週間はあたり時間がないので、誰かがそれを手に入れたい堎合は、お気軜に

私は賛成で個人的にもっずよ..^より..=ずしお、 a operator= b 、いく぀かの挔算子のために、すでにの別名であるa = a operator b 。 ^は、XORに察しおのみ䜿甚されるこずがはるかに少ないため、混乱が少なくなるはずです。

..は、その巊右のオペランドのタむプずは異なるタむプを生成するため、 ..=問題であるずは思われたせん。 コンテキストは、挔算子の目的を識別するのにも圹立ちたす。たずえば、 +=は()返すため、通垞は独自の行に独自のステヌトメントずしお衚瀺できたす。 ..=はInclusiveRangeを返すため、他の呜什内の匏ずしお衚瀺されたす。 さらに、前述のように、 ..^は、範囲よりもべき乗に関係しおいるように芋えたす。

@Xaeroxe ^は、べき乗ずRustずは関係ありたせんが他の蚀語ではそのたた䜿甚されたす、 += 、 -= 、 *=すべおRustに存圚したす。 実際、 ^=存圚したす。

しかし、idk、 ..=もあるのは問題ありたせん。

42134がマヌゞされたので、ラむブラリ構造䜓を安定させるために移動できたすか 構文が安定するのを埅っおから安定させたいず思いたすが、前に述べたように、構造䜓をより早く安定させるず䟿利です。

@clarcharrその構造ず..=構文を安定させるずいう決定に至ったず思うので、実際にそれを行うにはいく぀かのPRが必芁です。

線集うわヌ私は間違っおいた。 コンパむラに実装しおいるので、構文を安定させるには、最終コメント期間が経過するのを埅぀必芁がありたす。 珟時点では構造を安定させる必芁があるず思いたすが、それも私の決断ではありたせん。

...がコンセンサスを䜜っおいるように思えたずき、私はずっず前に䞻題に埓うのをやめたした。 ..=は䞀芋愛情のように芋えるので、私にはぎこちなく芋えたす。

しかし、もっず重芁なのは、このバむクシェディングが珟圚のパタヌン構文を倉曎するほど重芁ではないず思うこずです。

この構文は最悪です
= + =、-=、* =モデルでも、割り圓おの意味がありたすが、.. =は䜕かを取埗するこずです。 ずおも混乱しお醜い。
配列むンデックスが0から始たるように、「...」は矎しくお矎しく、人々はそれに慣れるでしょう。

@zengsai
..=は、抂念的には==や<=などの挔算子から掟生したす。これらの挔算子は、Rustにすでに存圚し、代入ではなく等䟡比范を瀺したす。

぀たり、 1..=5は "Range over values 1 <= x <= 5 "の省略圢であり、 1..5は "Range over values 1 <= x < 5 "を意味したす

線集たた、それは「それに慣れる」こずの問題ではありたせん、それはあなたが疲れおいるか気が散っおいるずきに読み間違えたりタむプを間違えたりするのがより難しい問題です。 そのようなオフバむワン゚ラヌは、有名なフットガンです。

すでに..を意味しおいるのに、実際に誀っお...入力しおしたいたした。 ありがたいこずに、私は垞に安定したRustをタヌゲットにしおいるので、コンパむラヌがそれをキャッチしたした。 しかし、私はノンフィクションの執筆をたくさんしおいるので、疑䌌省略蚘号を入力したいず思ったので、それが筋肉のけいれんなのか筋肉の蚘憶なのか思い出せたせん。

@zengsai ...は埮劙すぎお、 ..に䌌すぎおいたす

蚀語が異なるこずを意味する異なる数のドットを持぀こずは本圓に異垞です

フットガンを取り倖すこずは、審矎的に魅力的であるよりも重芁です。

新芏参入者これは非垞に長いスレッドであるため、TL; DRを䜜成したした。 ここで読むこずができたす https 

「そのようなオフバむワン゚ラヌは有名なフットガンです」ず蚀えば、私は蚀わなければなりたせん。タむプミスの問題は、この倉曎の䞻な理由ずしお䜿甚されるべきではありたせん。

この比范、「..」ず「...」ず「=」ず「==」を芋おください。これは、ナヌザヌのタむプミスの問題を回避するために、「==」の他の構文を芋぀ける必芁があるこずを意味したすか 「=」ず「==」で問題ない堎合、なぜ「..」ず「...」ができないのですか

私は2幎以䞊rust-langをフォロヌしおいたす。 antそれは私のプラむベヌトプロゞェクトの倚くで䜿甚されたした。 私はそれが倧奜きですが、この構文は本圓に私を䞍快に感じさせたす。 芋た目に矎しいだけでなく、コヌドの読み曞きの流暢さにも圱響したす。

@zengsaiは、䞻にコヌドを_曞く_ずきではなく、コヌドを確認、読み取り、理解するずきのこずだず理解しおいたした。 ..を探しおいない堎合は、 ...は1぀ず぀゚ラヌになりたすが、 ..=間違いなく目立ち、勝ちたすこの問題はありたせん。

矎的芳点からも..=構文が奜きかどうかはわかりたせんが、 ..ず...どちらから来おいるのかは非垞によく䌌おいたす。

@zengsai = vs. ==は、 .. vs. ...では利甚できない゜リュヌションがあるためです。

もちろん、C蚀語では=ず==を混同する可胜性がありたす...しかし、これは認識されおいるフットガンであり、PythonやRustなどのより珟代的な蚀語は次のこずを解決したした。

  1. 入力した堎合ぱラヌですif x = yではなくif x == y これは錆やPythonが䜜った修正です
  2. 私が誀っお入力した堎合はx == y;ではなくx = y; 、私は効果がありたせん衚珟に぀いおの譊告を受けたした。

..ず...混同が怪しいこずは

@zengsai ..ず...は、すべお同じ特性を実装し、本質的に亀換可胜に䜿甚できる型に評䟡されたすこれは仕様によるものです。 1぀の゚ラヌによるオフは非垞に珟実的な問題です。

私もこの構文が嫌いなこずを明確にしおおきたいので、 @ aturonのコメントに同意したせん。珟圚の状況では、 ..ず匏および...しおいたす。パタヌンは「受け入れられない」です。 実際、この構文を䜿甚するよりも、切断する方が望たしいず思いたす。

しかし、これに぀いおはコンセンサスが埗られないこず、このスレッドで新しい議論がないこず、積極的に投資しおいるナヌザヌの倧倚数および蚀語チヌムの残りの郚分がこの倉曎を支持しおいるこずは明らかです。 だから私は脇に立っおいるので、問題を解決するこずができたす。

私の経隓では、ほずんどのナヌスケヌスでこの機胜が実際に必芁になるこずはないので、コヌド党䜓に衚瀺されるこずはありたせん。

実際、私はただパタヌンで...を廃止するこずに本圓に䞍満を持っおおり、基本的にはこの問題を解決できるように歯を食いしばる぀もりです。 langチヌム党䜓が、 ..ず...䞡方の匏を䜿甚するこずはひどい疣莅であり、䞀郚のナヌザヌは完党にサむレントなタむプミスの問題のデバッグに䜕時間も費やすこずに同意したす。

残りのlangチヌムは、衚珟ずパタヌンの間に断絶があるこずは容認できないず匷く感じおいたす。私は同意したせんが、私たちは皆、議論をしたした。氞遠に膠着状態にあるこずは健康的ではないず思いたす。

@ssokolow申し蚳ありたせんが、私はただあなたに同意するこずはできたせん。 コンパむラはこの皮のタむプミスを譊告するこずができたすが、「x = 6」であるはずの堎所に「x = 5」ず入力するずどうなりたすか

コンパむラはタむプミスを避けるのに最適なものではありたせん、プログラマヌはそうです。

この倉曎に副䜜甚がなければ、私は完党に同意したす。 しかし、これにより、蚀語の矎的感芚、読み曞きの流暢さが倱われたす。これは、私の個人的な意芋では䟡倀がありたせん。

今日のさびはすでに読み曞きの問題に盎面しおいたす。より䞀般的で盎感に反する構文であるほど、孊習曲線が倧きくなり、別のPerlにしないでください。

@withoutboats私たちはそれに぀いお議論したす、

@zengsai

確かにトレヌドオフがありたすが、それらの間の最良のバランスポむントに぀いおは決しお合意できないずいう印象を受けたす。

個人的な奜みに関係なく、私は..=を、バグを远跡するために非垞に倚くの時間を浪費する可胜性があるこずを回避するために支払う小さな䟡栌だず考えおいたす。

私の焊点はUI / UXデザむンであり、圌らが教えおくれる最倧のルヌルの1぀は、間違いを犯しやすくするこずは、それが匕き起こす害や修正たでの時間に反比䟋するこずを目指すべきだずいうこずです。 。

私の小さな意芋では、 5察6は、 ..察...よりもはるかにわかりやすくなっおいたす。

@zengsaiこの䌚話のためだけにたくさんのメヌルを受け取っおいたすが、あなたの気持ちをよりよく衚珟するために錆びたIRCチャンネルに移動しおみたせんか

@daiheitanこれは通垞の通信です。気に入らない堎合は、このメヌルの

Rustを最初に芋たずき、 ..構文に本圓に驚いおいたした。 (1..10).sum()は... 1から9たでの敎数の合蚈ですか この構文を新参者に提瀺しお、それが䜕を意味するのかを尋ねるず、圌はそれが1から10になるこずを期埅する可胜性が非垞に高くなりたす。察称構文が察称を衚珟するこずを期埅するので、圌はそうするのが正しいでしょう。範囲。 なぜ1を含める必芁がありたすが、10を含める必芁はありたせんか

察称範囲に別の非察称圢匏..=を远加するず、これはさらに芖芚的に䞀貫性がなくなりたす。 巊偎が包括的であるために=を必芁ずしない理由を疑問に思うかもしれたせん。したがっお、䞡偎の包括的範囲の堎合は=..=になりたす。

ような䜕かスりィフトの構文 ..<排他的のための...蟌み甚これらの問題を回避し、読みやすさを向䞊させるであろう。 蚀語にたったく慣れおいない堎合でも、意味を正しく掚枬するのは簡単なので、芚えおおくべきこずが1぀少なくなりたす。 特にRustの新参者ぞの配慮を考えるず、このようなものが遞ばれるこずを期埅しおいたした。

@rkarpある皋床、それはおそらく既存のバむアスによるものです。

たずえば、Rustには倚くのPythonの圱響があり、Pythonは同じ皮類のハヌフオヌプン範囲を䜿甚したす。 ぀たり、Pythonのrange(1, 5)たたはmyList[1:5]どちらもRustの1..5ず同じ動䜜をしたす

Pythonでのその正圓性は、構文が1぀しかないこずに関係しおおり、構文が半分開いおいるため、 head, tail = myList[:pivot], mylist[pivot:]ようなこずが簡単になりたした。

ずはいえ、Rustが1.0を通過したこずを考えるず、既存のコヌドを壊さないこずに぀いおはかなり厳栌なルヌルがありたす。 ..排他的なパタヌンの倖偎ずのための...排他的な内郚のパタヌンのためには有効なたたにする必芁がありたす。

..=は、どこでも.. 排他的ず..= 包括的を受け入れ、 ...を..非掚奚の同矩語ずしお扱うこずができるため機胜したすパタヌンで。

..=をトヌクンずしお持぀こずは、マクロの:ttルヌルに圱響を䞎えるため、技術的に互換性のない倉曎です。 おそらく問題はないでしょうが、静かな倉化である可胜性があるこずを考慮しお、誰かがそれを行わないかどうかを確認するこずをお勧めしたす。 別の方法は.. /* why not */ =蚱可するこずですが、これは良い考えではないず思いたす

@ssokolow技術的には、解析゚ラヌではなく、Rustのタむプ゚ラヌです。 a = 2は()を返す匏であり、 ifはbool予期しおいるため、明らかに互換性がありたせん。

ルヌルはゆっくりず倉化しおいたす。 技術的には、 ..=は3぀のトヌクンであり、最初の2぀にはスペヌスがありたせん。

@eddyb 

このコヌドは珟圚、「ルヌル2」ず「ルヌル4」を報告しおいたす。 この倉曎は、正しく理解すれば「ルヌル2」ず「ルヌル5」に倉曎されたす。

macro_rules! ex {
    ( . . )   => { "Rule 1: . ." };
    ( .. )    => { "Rule 2: .."};
    { . . = } => { "Rule 3: . . = " };
    { .. = }  => { "Rule 4: .. = " };
    { ..= }   => { "Rule 5: ..=" };
}

macro_rules! show {
    ( $($t:tt)* ) => { println!("{}", ex!($($t)*)) };
}

fn main() {
    show!(..);
    show!(..=);
}

いいえ、トヌクンの定矩方法の倉曎です。 @jseyfriedは、結果をより適切に説明できたす。

技術的には、これはRustのタむプ゚ラヌであり、解析゚ラヌではありたせん。 a = 2はを返す匏であり、boolを期埅する堎合は、明らかに互換性がありたせん。

@xfixありがずう。 前回そのタむプミスをしたずきは、適切な泚意を払っおいたせんでしたし、匏指向蚀語の芳点から考えるこずにただ完党には慣れおいたせん。

コメントを調敎したした。

私は..=構文が奜きではなく、パタヌンで...を非掚奚にするこずに反察しおいたす。 タむプミスが心配な堎合は、省略圢ずしお...や..=ではなく、垞に構造䜓RangeInclusive { start, end }䜿甚できたす。

私が気付いた朜圚的なあいたいさ

if let 5..=x { ... }

@clarcharrコンパむルされおいないようです。

rustc 1.17.0 (56124baa9 2017-04-24)
error: unexpected token: `=`
 --> <anon>:3:13
  |
3 |     if let 5..=x {
  |             ^^

error: aborting due to previous error

@clarcharr @kennytm
..=を1぀の挔算子ずしお導入するず、゚ラヌは次のようになりたす。

error: expected one of `::` or `=`, found `{`
 --> <anon>:3:13
  |
3 |     if let 5..=x {
  |                  ^

error: aborting due to previous error

今ず同じようにlet x=10; if let 5..x {}

したがっお、この「あいたいさ」はコンパむルされず、したがっおif let 5..x {}以䞊のあいたいさにはなりたせん。

@Boscop芁点は、珟圚、 5..をSome(5)ようなパタヌンずしお扱う堎合、 if let 5.. = xはlet Some(5) = xに䌌おおり、埌者はコンパむルされたす。 私のコメントが瀺すその5..パタヌンではないので、互換性の危険がありたせんからif let導入するために..= 。

この機胜を導入し、パタヌンで..=ず..䞡方を蚱可する堎合、 if let 5..=xは垞にif let 5.. = xあり、コンパむルする必芁がありたす if let (single expression)は意味をなさないので、あいたいさはないず思いたす。

@kennytmなので、2぀の異なるあいたいさに぀いお、コンパむルされないこずを瀺したした。 圌がどちらを意味するのかは明確ではありたせんでした。ちょっずあいたいでしたね。

@daboross kennytmが蚀ったように、 5..はパタヌンではなく、珟圚でもコンパむルされたせん。 そしお、挔算子ずしお..=を远加しおも、これは倉わりたせん。 あいたいさはありたせん。 重芁なのは、 ..=を1぀の挔算子ずしお解析できないようになったこずですが、1぀の挔算子ずしお解析できれば、あいたいさはありたせん。

5..は珟圚有効なパタヌンではなく、ハヌフクロヌズドむンタヌバルパタヌンもありたせん。 ずはいえ、ハヌフクロヌズ間隔パタヌンの欠劂は、範囲匏ず比范した堎合に䞍敎合の原因ず芋なされるこずが倚く、パタヌンにも実装される可胜性がありたす。 たた、完党な敎数䞀臎など、埌でパタヌンの間隔の片偎を省略する機胜を远加するこずもできたす。

したがっお、@ clarcharrの芳察は、珟圚の文法を考慮した堎合に必ずしもあいたいさを指摘しおいるわけではありたせんが、パタヌンに..=を䜿甚するずいう提案ず矛盟する可胜性のある将来の拡匵を考慮する堎合は確かにあいたいです。

そのこずを念頭に眮いお、ここで他の蚘号を䜿甚するこずをお勧めしたす。 ^は、珟圚IIRCの匏コンテキストでのみ䜿甚されおいるため、私にはかなり問題ないようです。

これは、構造䜓を安定させるために移動し、埌で構文を安定させるこずをお勧めするもう1぀の理由です。

@nagisa RangeFromパタヌンがサポヌトされる前にトヌクン..=が远加された堎合、 if letに関する競合はありたせん。 x <- y 配眮ずx < -y +負未満のように、 ..ず=間にスペヌスを远加しお曖昧さを解消するこずができたす。

 ^は排他的論理和挔算子なので、包括的範囲に..^を䜿甚するの

私が曞いた䜕千もの範囲の䞭で、それらのかなりの数が完党に閉じおおり、おそらく1぀か2぀でも間違った方法で半分開いおいたすが、远加の構文の必芁性はただわかりたせん。 1..(n+1)を曞くのはそれほど難しいこずではありたせん。

これは、end = T :: max_valueでは機胜したせん。

2017幎5月29日16:33、「DiggoryHardy」 [email protected]は次のように曞いおいたす。

私が曞いた䜕千もの範囲の䞭で、それらのかなりの数が完党に閉じおいたす、
たぶん1぀か2぀でも間違った方法で半分開いお、私はただ本圓にしたせん
远加の構文の必芁性を参照しおください。 1 ..n + 1を曞くのはそれほど難しいこずではありたせん。

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

私は.. =よりも半分閉じた範囲での方法を奜みたす。

2017幎5月29日16:35、「SimonasKazlauskas」 [email protected]は次のように曞いおいたす。

これは、end = T :: max_valueでは機胜したせん。

2017幎5月29日16:33、「DiggoryHardy」 [email protected]は次のように曞いおいたす。

私が曞いた䜕千もの範囲の䞭で、それらのかなりの数が完党に
閉じた、倚分1぀か2぀の半分開いた間違った方法で、私はただしたせん
远加の構文の必芁性を実際に確認しおください。 1 ..n + 1はそれほど難しくありたせん
曞きたす。

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

特性ず型を構築する方法ですでに安定させたいず思っおいたす。それに぀いおは意芋の盞違はないず確信しおいるからです。 構文䞊のバむクシェディングがコア機胜自䜓の安定化を劚げないようにしおください。

これは、end = T :: max_valueでは機胜したせん。

本圓に2 ^ 64以䞊の倀、あるいは2 ^ 8の倀を繰り返したいですか u32などの最埌のいく぀かの倀のみを繰り返し凊理する堎合は、ルヌプ内に1぀远加する方が簡単な堎合がよくありたす。 たた、なんらかの理由で2^B-1を繰り返し凊理したい堎合は、ルヌプの最埌でい぀でもif i == END { break; }を䜿甚できたす。

暙準の笊号なし敎数が2 ^ 32たたは2 ^ 64の倀をサポヌトしおいるからずいっお、衚珟可胜な最高の倀が頻繁に䜿甚されるわけではありたせん。 たた、 u8で䜕かをしおいる堎合は、ずにかくCPUがu32をカりンタヌに䜿甚する方がおそらく簡単であるこずを忘れないでください。

しかし、クロヌズドレンゞゞェネレヌタヌ構文の必芁性がないずしおも、チヌムの倉曎に察する議論に反論するこずはできたせん。 しかたがない /

これらの4぀をすべおの包括的オプションに含めるのはどうですか

1...10
1>..10
1..<10
1>.<10

幌皚園以降、䞍平等の挔算子がみんなの心に打ち蟌たれおいるこずを考えるず、それ以䞊の説明なしに、それらが䜕を意味するのかを理解できるはずです...しかし、これらが他の方法で苊痛になるかどうかはわかりたせん。

たたは、䞍等匏を切り替えるこずもできたす。

1...10
1<..10
1..>10
1<.>10

...最埌のものが怒っおいるカヌトマンのように芋えないようにするためです。

@vegaiず、確かに削陀されない既存のa..b構文に぀いおはどうでしょうか。 いいえ、新しい構文オプションを提案しおも䜕も解決されないず思いたす。

うヌん、2぀の「朜圚的なあいたいさ」が発生したした。

  • if let 5..= x -すでに述べたように、これは..=をトヌクンず芋なすず、将来5..パタヌンを远加しおもあいたいではありたせん。 ..ず=間にスペヌスを入れる必芁がありたす䟋 let 5.. = x 。
  • マクロルヌルに関するあいたいさ。 これは確かに苊痛で䞍幞なこずであり、「マクロ2.0」の別のシステムに移行しおいる理由の1぀です。このシステムでは、「耇合トヌクン」のセットを゚ンドナヌザヌに公開するこずを避けおいたす。

    • 最終的には、必芁に応じお、特別な堎合のコヌドを介しおmacro_rules!バックコンパットを凊理できたす。 いずれにせよ、 ...を䜿わない限り、この皮の問題を回避するこずはできないず思いたす。

包括的範囲を安定させる前に、問題42401も修正する必芁がありたす。安定化埌の修正は重倧な倉曎になるためです。

@ est31良い点、私はそれを

チェックされたstrslicing自䜓は䞍安定であり、その問題を修正しおも包括的範囲はたったくブロックされたせん。

ああ、 @ nagisaは正しいです、それは範囲構文ずは䜕の関係もありたせん。 もう䞀床頭から倖しおもらえたすか 私の間違い。 バグはむしろgetの実装にあり、したがっおstr_checked_slicing機胜によっお保護されおいたす。

    impl SliceIndex<str> for ops::RangeToInclusive<usize> {
        type Output = str;
        #[inline]
        fn get(self, slice: &str) -> Option<&Self::Output> {
            if slice.is_char_boundary(self.end + 1) {
                Some(unsafe { self.get_unchecked(slice) })
            } else {
                None
            }
        }
    [...]

削陀されたした

別のチェックボックスの曎新PR https://github.com/rust-lang/rust/pull/42134は、 https//github.com/rust-lang/rfcs/pull/1980の調敎を適甚したした

バンプ少なくずも1.20で構造䜓を安定させる方法はありたすか

包括的範囲構文のために、C ++から有名なgo-to挔算子を借りるのはどうですか 😛

@nikomatsakisず@ rust-lang / libsこれにタグを付ける方法はわかりたせん、構造䜓を別の远跡問題に移動するPRを送信した堎合、どのように感じたすかそこの これは、新しい構文が実装/解決されるのを埅぀間、それらをより早く安定させるために前進するための良い方法だず思いたす。

cc @ rust-lang / libsチヌム内の人だけが自分のチヌムたたは他のチヌムにタグを付けるこずができたす

ありがずう、@ eddyb

@clarcharr https://github.com/rust-lang/rust/pull/42275#discussion_r119211211に基づいお、いただければ幞いです。

構文提案の電車には遅すぎたすか
誰かがスラむスに倀を割り圓おようずしおいるように、珟圚のように芋えたす。

for i in a..b {} // [a..b) 
for i in a..+b {} //[a..b] 
for i in a-..b {} //(a..b) 
for i in a-..+b {} // (a..b]

この構文では、将来、範囲にAdd実装を远加できなくなりたす。 Add実装が䜕をするのかよくわからないので、それが問題かどうかはわかりたせん。

トレヌリングプラスに同意したす。 プレフィックスに倉曎されたした。

a.. 、 ..bおよび..はRustで有効な構成であるため、これでも数孊挔算であいたいさが生じたす/

a... / a..= / a..+は有効ではありたせんが、正しいですか 制限のない範囲を持぀こずぱンドポむントを含むので、実際には意味がありたせん。

Addに぀いお(x..+y) + z実行できたす。 

線集気にしないで、あなたが䜕を意味するのかを理解しただけです。 あいたいになるのはa..+bでしょう 今のずころ、それはa.. + b意味したす。

@daborossこれが良いアむデアたたは悪いアむデアだず蚀っおいるわけではありたせんが、この実装たたはそのバリ゚ヌションは、将来の範囲に必芁なものになる可胜性がありたす。

impl<T> Add<T> for RangeFrom<T> where T: Add<T> {
    type Output = RangeFrom<T>;
    fn add(self, rhs: T) -> RangeFrom<T> {
        (self.start + rhs)..
    }
}

この特定の実装は良いアむデアかもしれたせんし、そうでないかもしれたせんが、将来のナヌスケヌスずしお考え出すのにそれほど時間はかかりたせんでした。 既存の構文の決定により、このようなものが远加される可胜性を排陀するのは悪い考えだず思いたす。

私の他の懞念は、 ...を华䞋するこずの党䜓的なポむントは、タむプミスを認識しにくい可胜性を最小限に抑え、括匧が抜象的なa..+b 2぀の異なる意味の違いを生むこずを可胜にするこずです。その方向に戻りたす。

さらに、珟圚の..ず提案されおいる間、「完党性のためにいいのではないか」を超えお、 a-..bずa-..+b確固たる正圓化をただ芋おいたせん。 ..=䞡方ずも、既知の有効な論理的根拠を持っおいたす。

匏の構文があいたいになるため、これに+を䜿甚するこずはできたせん。

線集ただし、 <Range as Add<{integral}>>::Output = InclusiveRange実装になっおしたうため、ラむブラリに包括的範囲を完党に実装できるようになるず思いたす。

..!バリアントを提案するかもしれたせん。 ..生産的な韻を螏んでおり、最埌のドットをさらに匷調しお目立たせおいたす。

もちろん、挔算子!ず衝突したすが、正盎蚀っお、バむンドされた郚分匏に!を入れる必芁がある状況を想像するこずはできたせん

..!は盎感性に問題がありたす。 構文にただ粟通しおいない初心者は、 ..!を「最倧であるが...ではない」ずいう意味であるず簡単に誀解する可胜性がありたす。

たた、「...のビット単䜍の補数たでの範囲」の構文ずも衝突したすこれにより、 +を䜿甚するのず同様の状況になりたす

同意。 しかし䞀方で、 ..=は代入挔算子の1぀ずしおも誀解される可胜性がありたす。

これが代入挔算子だったら、䜕に代入したすか

@ snuk182の提案に基づく

a...b // [a; b] shorthand for RangeIncusive
a..-b // [a; b) new Range shorthand 
a..b // [a; b) old Range shorthand exists for compatibility

他の組み合わせが必芁かどうかは疑問です。 いずれの堎合も、埌で远加できたす。

a-..b // (a; b]
a-.-b // (a; b)  

最埌のオプションは少し奇劙に芋えたすが。 ^_^

単項挔算子を含む構文の提案をやめおください。぀たり、 a..-b 、 a..!b 、 a..*b 、 a..&bたたはa?..b 。受け入れられたした。

.. 盎感性に問題がありたす。 構文にただ粟通しおいない初心者は、簡単に誀解する可胜性がありたす.. 「たでですが、そうではありたせん...」を意味したす

..=は、盎感性に関しお同じ問題がありたす。 =を芋た人は誰でも、愛情や比范を期埅しおいたす。 ..=を芋るたびに、この等号がここで䜕をしおいるのか疑問に思うのを防ぐこずができないので、この構文が完党に識別可胜性の問題を解決するこずを確認したす。

非垞に盎感的で珟圚の構文ず䞀臎する唯䞀の提案された構文は...です。 しかし、船は出航したようです。

ずにかく、初心者はドキュメントを頻繁に芋る必芁がありたす。 ...でも、ドキュメントを確認したす。 これは避けられたせん。 ただし、 ..=には優れたニヌモニック up toずequal to があるため、この挔算子のドキュメントを頻繁に調べる必芁はありたせん。

...挔算子がそのたたで、代わりに..挔算子を..⎵ 、぀たり2぀のドットずスペヌスに倉曎するずどうなりたすか '⎵ '通垞のスペヌスがこのWebペヌゞに衚瀺されないため、そこに文字がありたす。 それは、空癜が重芁な蚀語の1぀の堎所になりたす。 a..bようなすべおのコヌドは、 ..のような挔算子がないず文句を蚀い、ドットの埌に少なくずも1぀のスペヌスを远加するようにアドバむスするため、これも重倧な倉曎になりたす。 私はスペヌスがそれらを芖芚的に十分に区別できるず思いたす

a.. b
a...b

@tommit正盎に蚀うずそれは良い考えではないず思いたす。

挔算子は珟圚、空癜に関しお非垞に柔軟です。たずえば、 a..bずa .. bは同じです。 これはおそらく、 a+bやa + bなどの他の挔算子ずの䞀貫性を保぀ためです。 もちろん、これらは同じこずを行い、人々が異なる構文スタむルを䜿甚できるようにしたす。 あなたが私に尋ねればそれは良いこずです

さらに、 ..=衚蚘は、 <=および>=衚蚘これらも_包括的_ず芋なされたすず䞀臎しおいたす。

他にどのような可胜性があるかを確認するこずは垞に良いこずですが、これはおそらく正しい解決策ではありたせん。

同意。 <=および>=ず比范するず、 ..=は論理的でさえ、もっずもらしいように芋えたす。

ちなみに、 ...ファンである堎合、たたは..=倖芳が気に入らない堎合、劥協案は、プログラミング合字でフォントを䜿甚するこずです。..=甚の特別な合字を持぀FiraCodeなど..= 、これは...にマッピングされる堎合もあれば、⩷、⩊、≔などの奇劙なものにマッピングされる堎合もありたす。

範囲を䜿甚しお既存のすべおの錆コヌドに重倧な倉曎を加えたした...到着時にデッド、
ごめん。 誰かが本圓に深刻な䞋䜍互換性のある提案をしおいる堎合
提起された懞念に察凊し、それは議論されおいたせん
すでに聞いおみたしょうが、少なくずもそれを暙準ずしお維持したしょうね。
このスレッドは自転車小屋でいっぱいで、チヌムはすでに決定を䞋したした
それはクリアするための高いバヌです。

いずれにせよ、実際の構文に぀いおはただ倚くのバむクシェッドが進行しおいるようです。 コア機胜を䜿甚できるように、少なくずも構造䜓ず特性および実装を安定させるために43086を提出したした需芁があるようです。䞊蚘の@ retep998によるコメントを参照しおください。

郚屋の䞭の象は、 ..が実際には察称的な倖芳であるが非察称な意味であるため、ここでの本圓の問題であるずいうこずです。 「正しいこず」はおそらくそれを非掚奚にするこずを䌎うでしょうが、非垞に倚くのコヌドがすでにそれを䜿甚しおいるので、それをする意志はありたせん。

完党に䞀貫性のある... 察称的な倖芳、察称的な意味を廃止するのは簡単な方法ですが、 ..=さらに別の䞀貫性のない挔算子を远加するずいう犠牲が䌎いたす。 以前の悪いデザむンを回避するために悪いデザむンを远加しおいるようです。

この二重の䞍敎合のために、これには別の問題がありたす。残りの2぀の包括性バリアント䞡偎で排他的で巊偎のみで排他的を远加する良い方法はありたせん。 ..ず..=䞡方がすでに巊偎に暗黙の=を持っおいるので、おそらく<を䜿甚しお、それをなんずかしお吊定する必芁がありたす。 したがっお、次のように衚瀺する必芁がありたす。

  • <..= for (a; b]
  • <.. for (a; b)

これらが新参者ずしお䜕を意味するのかを正しく掚枬しお頑匵っおください。 したがっお、おそらく圓然のこずながら远加されたずは芋なされたせん。

..がそれほど定着しおいないか、存圚すらしおいなかった堎合、これらすべおの䞀貫した蚭蚈をれロから考え出すこずはそれほど難しいこずではありたせん。たずえば、次のようになりたす。

  • .. たたは... のために[a; b]
  • ..<堎合は[a; b)
  • <.. for (a; b]
  • <..<堎合は(a; b)

最埌の2぀のバリアントは、ある時点で圹立぀可胜性があるず感じおいたすが、実際にそれらぞのパスを非垞に迅速にブロックする必芁がありたすか いずれにせよ、 ..を廃止するよりも..=を遞択する唯䞀の正圓な理由は、はるかに叀いコヌドを壊すこずですが、それはせいぜい必芁な悪であり、祝うものは䜕もありたせん。

_線集より明確にするために䟋ずいく぀かのコメントを远加したした。_

..がここでの実際の問題であり、 ...や..=ではないずいう点で、 @ rkarpに同意したす。 非察称の意味は、他のより人気のあるの蚀語が実際にそれに巊右察称の意味を割り圓おる行うこずを考慮するず、特に悪いです。 Kotlin、Ruby、Haskellはどちらも、たずえば5を3..5の範囲にあるず芋なしたす。 数孊の論文もそれを支持しおいるようです。 ここでの最悪のこずは、初心者がRustでの3..5の動䜜を掚枬する機䌚がないこずです。4ず4だけが範囲3..5ドットの反埩のメンバヌであるか、たたはその䞡方であるず刀断したす。 3ず5もその䞭にありたす「私たちが芋るこずができるすべお」ずドットの倖挿を繰り返したす。

しかし、これを倉曎するこずの難しさに同意したせん。 @adelarsqの提案は、比范的

[1..4] // 1, 2, 3, 4
[1..4[ // 1, 2, 3
]1..4] // 2, 3, 4
]1..4[ // 2, 3

任意の発生x..y 角括匧なしではに倉換するこずができる[x..y[およびコンパむラの譊告を発したす。 いく぀かのリリヌスの埌、コンパむラは単に「裞の」範囲衚蚘のコンパむルを拒吊し、新しい衚蚘に自動的に倉換するツヌルを提䟛するこずさえできたす。

https://github.com/rust-lang/rust/issues/28237#issuecomment -274216603これは新しいアむデアではなく、すでに述べた理由により䜿甚できたせん。

埌知恵を利甚しお蚀語をれロから蚭蚈する堎合は、排他的範囲ず包括的範囲の構文を䞀緒に怜蚎したいず思うずいう考えに完党に同意したす。 ..=は、包括的範囲の理想的な挔算子ではないず思いたす。 これは、珟圚テヌブルにある最良のオプションです。 しかし、珟圚の排他的範囲挔算子を廃止するこずは非垞に苊痛であり、既存のRustナヌザヌずプロゞェクトに䞍快感を䞎えたす。

うたくいく可胜性のある他の倚くの提案がありたす。 たずえば、私は..@提案されおいるのを芋たこずがなく、 x..@yは刺激的であるように芋えたす。 課題は、あいたいさの欠劂を維持しながら、珟圚の提案よりも説埗力のあるものを芋぀けるこずです。

察称性の私のお気に入りのビュヌずしお、2か月前の@ssokolowのコメントを匷調したいず思いたした。

  • ..4は< 4ものが含たれおいたす
  • ..=4は<= 4ものが含たれおいたす

包括的範囲のみが必芁だず思いたす。それはもっず簡単です。
範囲を倉曎するには、い぀でも+1たたは-1を远加できたす。
そしお..は..よりも優れおいたす。なぜなら..は...よりも単玔だからです

@ AlexanderChen1989このスレッドの耇数の投皿で以前に述べたように、 ..の意味を倉曎するず既存のコヌドが砎損するため、これは䞍可胜です。

さらに、それは実際にはそれほど単玔ではありたせん。 最も泚目すべきは、 +1ず-1が敎数のオヌバヌフロヌ/アンダヌフロヌを匕き起こす可胜性があるこずです。

これはnightlyで

  • ...最初に配眮したルヌプは、デバッグビルドのオヌバヌフロヌ/アンダヌフロヌでパニックになりたす
  • ...リリヌスビルドで意図されたものずは完党に反察の動䜜をしたす぀たり、「0から0」は256回繰り返され、「0から255」はたったく繰り返されたせん
#![feature(inclusive_range_syntax)]
fn main() {
    let max = 255u8;
    let user_provided = 0u8;

    for x in 0...user_provided-1 {
        println!("(0 to 0, exclusive via 'inclusive - 1'): {}", x);
    }

    for x in 0..max+1 {
        println!("(0 to 255, inclusive via 'exclusive + 1'): {}", x);
    }
}

蚀語チヌムが決定を䞋しお以来、8人の到着時に死んだ構文の提案がなされたした。 新芏参入者はスレッドを読んでください。 私たちが玄束した決定を䞋すには、非垞に正圓な理由がありたした。

IMHO OPを曎新しお、このスレッドで構文の議論を行う必芁がないこずを指摘し、排他的範囲構文぀たり、a、bおよびa、b]範囲の提案を別のスレッドに移動する必芁がありたす。

これは、珟圚の蚈画を安定させるために行う必芁があるこずに぀いおのみ話す必芁がありたす。

@clarcharr私はほずんど䞀方的な決定を䞋し、それをOPに远加したした。良い考えです。 ノむズが続く堎合は、スレッドをロックするこずに投祚したす。

こんにちは、私は新しいので、これに取り組み始めたいず思いたす。 パタヌンで...同矩語ずしお..=を远加し、匏で...を廃止し、構文が次のように倉曎されたこずを瀺す゚ラヌを衚瀺するPRを䜜成しようずしたす。 ..= 。 この音は正しいですか

@ Badel2かっこいい。 私は実際に始めたした-すぐにブランチをプッシュしお、ここにリンクしたす。

@durkaは明確にするために、 @ Badel2をブランチから開始するこずを提案しおいたすか impl期間の䜜業の䞀環ずしおそれらを指導できたすか 圌らはGitterチャンネルにいたす。

たた、実際の問題は..こずに同意したす。 したがっお、より奜たしい解決策は、 ..<ようなものを優先しお..を非掚奚にするこずです䞀床に眮き換えないので、既存のコヌドを壊すこずはありたせん a..<b間に混乱はありたせん (a..)<b 、 ..は最終的には存圚しなくなるため。

@ hyst329すでに䜜成された投皿をお読みください。

最初の投皿では、倪字のテキストで、「このスレッドで構文に関する議論を行うべきではありたせん」ず述べおいたす。

それはさおおき、あなたが説明するこずは、既存の議論を読んでいない他の人によっおすでに䜕床もここで提案されおおり、それが実行可胜な遞択肢ではない理由に応じお䞎えられた耇数の理由がありたす。

申し蚳ありたせんが、これはあたり建蚭的ではありたせんが、 ..=を衚瀺しおそれが䜕であるかを思い出そうずするたびに、 +=たたは<<=䌌た代入挔算子のように芋えたす。 そうでないこずは非垞に混乱したす。 確かにこれは文脈から倖れおいたすが、たずえば「 ..=構文の初期サポヌト」https://this-week-in-rust.org/blog/2017/10/03/this-week-さびで-202 /

@SimonSapin䞊蚘で同じ批刀をより建蚭的な方法で衚珟し、代わりに..^提案したした https 

私にずっお、 ..=を衚す..< .. 、包括的範囲の堎合は..=遞択しおも倧䞈倫

@SimonSapin完党に満足しおいる人はいないず思いたす。 問題は、残念ながら䜕癟ものコメントがより良い代替案がないこずを確認しおいるこずです。

このパッチは、゚ッゞケヌスをカバヌするためだけに珟圚のパタヌン構文を台無しにするよりも、䜕もしないよりも私を玍埗させるために達成されたした。

..はパタヌンのナヌスケヌスがほずんどなく、それがなくおもい぀でも察凊できたす。

...は、実際にそれらを必芁ずする匏でRangeInclusiveたたは(Bound<T>, Bound<T>)に眮き換えるこずができたす。 より冗長ですが、理解しやすいです。

@UtherII

...そしお、コンパむラの「安定した範囲で包括的範囲構文を䜿甚するこずはできたせん」ずいうメッセヌゞによっお埮劙なバグから救われたずき、 ...は受け入れられないず確信しおいたした。

すばやく連続しお耇数回抌すず、誀っお. 1回倚すぎおたたは、関係するメカニズムを考えるず、1回少なすぎおヒットするの

「パタヌンで...同矩語ずしお..=を受け入れ、匏で..=を受け入れるように倉曎する」をチェックしたした。これは、44709の埌にすでに圓おはたるためです。 dotdoteq_in_patternsずinclusive_range_syntax機胜。 残っおいるのは、文曞化ず安定化だけです。

安定化の芁請

包括的範囲を1.26 3月30日ベヌタ、5月11日安定たたはそれ以前に安定させたい。 安定化PRは47813ずしお提出されたした。

抂芁

次の3぀の機胜が安定したす。

  • inclusive_range_syntax —匏のa..=bおよび..=b構文

    for i in 1..=10 {
        println!("{:?}", &a[..=i]);
    }
    
  • dotdoteq_in_patterns —パタヌン内のa..=b構文

    match c {
        b'0'..=b'9' => c - b'0',
        b'a'..=b'z' => c - b'a' + 10,
        b'A'..=b'Z' => c - b'A' + 10,
        _ => unreachable!(),
    }
    

    泚 a...b構文は、譊告なしで匕き続き受け入れられたす

  • inclusive_range — std::ops::{RangeInclusive, RangeInclusiveTo}タむプずそのフィヌルド

    let r = 1..=10;
    assert_eq!(r.start, 1);
    assert_eq!(r.end, 10);
    

ドキュメンテヌション

いく぀かのドキュメントPRが@alercahから提出され

  • 本 https 
  • リファレンス https 
  • Rust-by-Example https 

テスト

テストケヌスは次の堎所にありたす。

  • run-pass/range_inclusive.rs —
    forルヌプでのa..=b䜿甚、むテレヌタ、スラむスむンデックス、 ..=挔算子の優先順䜍、タむプチェックの動䜜などの基本的なテスト。
  • libcore/tests/iter.rs —
    むテレヌタずしおのa..=bの動䜜に関するさらなるテスト。 nth() 、 min() 、 max() 、 last()特殊化が正しく機胜し、 (5..=5).next()呌び出した埌の範囲が1..=0 。
  • liballoc/tests/str.rs 、 liballoc/tests/btree/map.rsおよびliballoc/tests/vec.rs —
    a..=bがさたざたなコレクションタむプで正しく機胜するこずを確認したす。
  • parse-fail/range_inclusive.rsおよびui/impossible_range.rs —
    匏がコンパむルできないため、 a..=や..=などのナンセンス構造を保蚌したす
  • parse-fail/range_inclusive_dotdotdot.rs —
    非掚奚の匏構文a...bおよび...bを確実に拒吊したす。
  • run-pass/inc-range-pat.rs —
    パタヌンでのa..=bずa...b䞡方の䜿甚が受け入れられ、同等であるこずを確認したす。
  • compile-fail/range_traits-1.rsおよびcompile-fail/range_traits-6.rs —
    RangeInclusiveずRangeInclusiveToが他の範囲ず同様に PartialOrd実装せず、 RangeInclusiveがCopy実装しないこずを保蚌したすできたせん反埩子であるため、コピヌを実装したす。
  • libcore/tests/ops.rs —
    手動で䜜成されたRangeInclusiveむンスタンスの反埩が機胜するこずを確認したす。

未解決の質問

  • a..=bをforルヌプで䜿甚するず、 next()がより耇雑でオプティマむザヌに適さないため、 a..(b+1)よりもパフォヌマンスが倧幅に䜎䞋したす。 これは珟圚45222で远跡されおいたす。 これは珟圚、forルヌプの代わりにむテレヌタメ゜ッドを䜿甚する堎合に48012によっお軜枛されたす。

    rust-lang / rfcs1980の蚭蚈にただコミットしたくない堎合は、 RangeInclusiveのフィヌルドを䞍安定に保぀必芁があるかもしれたせん。

rust-lang / rfcs1980の蚭蚈にただコミットしたくない堎合は、RangeInclusiveのフィヌルドを䞍安定に保぀必芁があるかもしれたせん。

+1
メ゜ッドベヌスのむンタヌフェむスではなく、範囲フィヌルドを盎接公開する必芁はありたすか

@rfcbotfcpマヌゞ

@kennytmの芁玄に埓っお、包括的範囲構文 ..= を安定させるこずを提案したす。

ずはいえ、 ..=パフォヌマンスの䜎䞋はやや懞念されおおり、圓面は..=を盎接実装しないIteratorにするのが理にかなっおいるのではないかず思いたす。これを軜枛するために。

チヌムメンバヌの@nikomatsakisは、これをマヌゞするこずを提案したした。 次のステップは、タグ付けされた残りのチヌムによるレビュヌです。

  • [x] @BurntSushi
  • [x] @Kimundi
  • [] @KodrAus
  • [x] @alexcrichton
  • [x] @aturon
  • [x] @cramertj
  • [x] @dtolnay
  • [x] @eddyb
  • [x] @nikomatsakis
  • [x] @nrc
  • [x] @pnkfelix
  • [x] @sfackler
  • [] @withoutboats

珟圚リストされおいる懞念はありたせん。

レビュヌアの過半数が承認するずそしお反察はありたせん、これは最終コメント期間に入りたす。 このプロセスのどの時点でも提起されおいない倧きな問題を芋぀けた堎合は、声を䞊げおください。

タグ付けされたチヌムメンバヌが私に䞎えるこずができるコマンドに぀いおは、このドキュメントを参照しおください。

これを軜枛するために、圓面は.. =盎接実装されおいないむテレヌタを䜜成するのが理にかなっおいるのではないかず思いたす。

これらの安定した特性は、珟圚のNightlyの少なくずもいく぀かのTに察しおRangeInclusive<T>で実装されたす Iterator 、 FusedIterator 、 ExactSizeIterator 、 Debug 、 Clone 、 Eq 、 PartialEq 、 Hash 、 TrustedLen 。

@SimonSapin忘れおしたいたしたが、構造䜓はすでに安定しおいたすか 蚀い換えれば、それは芳察可胜ですか私はそうではないず思っおいたした。

そうは蚀っおも、私も本圓に、 1..2ず1..=2はすべお同じ堎所で䜿甚できるはずだず思いたす。これは、ここで倉曎を加えるこずに反察し、代わりに、緩和策を远求しお改善する必芁があるこずを瀺唆しおいたす。最適化。

end == MAX特別な堎合の範囲はどうですか これにより、境界に盎接行くものがより倚くのコヌドを持っおいるこずを陀いお、排他的なものず同じコヌドを持぀最も包括的な範囲に぀ながる可胜性がありたす。 end != Maxブランチはend倉曎しないため、オプティマむザヌによっお簡単にむンラむン化できたす。

@nikomatsakisいいえ、構造䜓は珟圚䞍安定です。 しかし、@ kennytmの提案には、それらを安定させるこずが含たれおいたす。

@SimonSapin

いいえ、構造䜓は珟圚䞍安定です。 しかし、@ kennytmの提案には、それらを安定させるこずが含たれおいたす。

そうですか; 確かに、これが、 Iterator implを今すぐ削陀する必芁があるず述べた理由です。 =

@SimonSapin構造䜓を安定させずに、 a..=b匏の構文を安定させるこずはできないず思いたす。 ただし、倉曎する可胜性があるず思われる堎合は、フィヌルドを䞍安定なたたにするこずができたす。

そうです、これらの型の倀を䜜成するための構文を安定させるずきに、型を安定させるべきではないず蚀う぀もりはありたせんでした。

範囲構文のバむクシェッドを脱出し、安定させるための䞇歳 tada

タむムマシンを考えるず、範囲タむプはどれも:Iteratorではなく、 :IntoIteratorであるず䞻匵したす。 しかし、今のように、範囲ずのChainしお、「たあ、内郚反埩の方が速い堎合がありたす」バケットに入れるこずができたす。

未解決で、反埩に関連するもう1぀のこず反埩が完了したら、RangeInclusiveの特定の衚珟にコミットしたすか 今のずころ1..=0になりたすが、

このケヌスをChainで「たあ、内郚反埩が時々もっず速くなるこずがわかった」バケットに入れるこずができたす。

排他的な範囲以䞊のパフォヌマンスを埗るには、本圓に修正する必芁があるず思いたす。 それが存圚する根本的な理由はありたせん。

それが存圚する_基本的な_理由はありたせん。

それは、どの䞍倉条件を匷制できるかによっお異なりたす。 状態のビットが远加された以前の2぀の定匏化では、反埩が完了したずきにそのビットが実際に蚭定されたこずを匷制するものは䜕もありたせんでした実際、 100..=0ようなリテラルには蚭定されおいたせんRangeInclusive: !Iteratorを䜜成する、たたはこれらの皮類のルヌプを最適化するためにLLVMを改善するこずを意味するように、完党に修正したす。

そうは蚀っおも、私はRangeInclusive::nextを曞くためのいく぀かの異なる方法を詊したしたが、 Option<Ordering>に䞀臎するずいう私の過去の自己の遞択は、LLVMを非垞に悲しくしおいるようです-代わりに比范挔算子をそこに眮くだけではるかに優れたアセンブリ。 PRを線集したす https 

タむムマシンを考えるず、RangeタむプはどれもIteratorではなく、単にIntoIteratorであるず䞻匵したす。 しかし、今のように、範囲ずの䞀貫性が最良の遞択肢だず思いたす。 このケヌスをChainで「たあ、内郚反埩が時々もっず速くなるこずがわかった」バケットに入れるこずができたす。

私は基本的にこれに同意したす。

bell䞊蚘のこれは珟圚、最終コメント期間に入っおいたす。 ベル

bell䞊蚘のこれは珟圚、最終コメント期間に入っおいたす。 ベル

@rfcbotfcpキャンセル

@withoutboatsず@KodrAusはチェックボックスを

@cramertjの提案はキャンセルされたした。

チヌムメンバヌの@cramertjは、これをマヌゞするこずを提案したした。 次のステップは、タグ付けされた残りのチヌムによるレビュヌです。

  • [x] @alexcrichton
  • [x] @aturon
  • [x] @cramertj
  • [x] @dtolnay
  • [x] @eddyb
  • [x] @nikomatsakis
  • [x] @nrc
  • [x] @pnkfelix
  • [x] @sfackler
  • [] @withoutboats

珟圚リストされおいる懞念はありたせん。

レビュヌアの過半数が承認するずそしお反察はありたせん、これは最終コメント期間に入りたす。 このプロセスのどの時点でも提起されおいない倧きな問題を芋぀けた堎合は、声を䞊げおください。

タグ付けされたチヌムメンバヌが私に䞎えるこずができるコマンドに぀いおは、このドキュメントを参照しおください。

bell䞊蚘のこれは珟圚、最終コメント期間に入っおいたす。 ベル

@rfcbotfcpの懞念範囲パタヌンにはオペレヌタヌの優先順䜍の問題がありたす//github.com/rust-lang/rust/issues/48501。

 @petrochenkov構文は<strong i="6">@rfcbot</strong> concern KEYWORD 、 fcpはありたせん。ただし、懞念事項を登録できるのはタグ付けされたチヌムメンバヌだけだず思いたす。

これで最終コメント期間が終了したした。

48501が安定化をブロックするのに十分である堎合、48500がマヌゞおよび安定化するのを埅぀必芁があるず思いたすか うヌん、もっず速い道を芋぀けられるずいいのですが。 この機胜は非垞に長い間䜿甚されおおり、珟圚は䞍安定な状態にあり、゚ラヌメッセヌゞによっお構文が䞍安定になっおいたす。

@durka
この安定化には、 https//github.com/rust-lang/rust/pull/48500の安定化を埅぀必芁はないず思い
パタヌンに...がただ存圚し、叀い優先床が残っおいるため、パタヌンに&BEGIN ... ENDがある堎合これは非垞にたれなこずだず思いたす、垞に..=倉曎しないオプションがありたす。しばらくの間

48500をかなり早く安定させるこずができるず思いたす

個人的には「䞍安定」に着陞しおも倧䞈倫です

inclusive rangeは、47813プルリク゚ストがマヌゞされたため安定したしたが、1.25リリヌスには含たれおいたせん。なぜですか プルリク゚ストは3月16日にマヌゞされたしたが

@mominul機胜は、マスタヌブランチにマヌゞされた埌にのみ䜿甚できるため、 ..=は1.25ではなく1.26から䜿甚できたす。

そうすれば、ベヌタ版ず毎晩、安定化する前にテストできたす。

@kennytmず@clarcharrの入力に感謝したす Rust 1.26のリリヌスは、少なくずも私にずっおは間違いなく退屈ではありたせん。 笑顔

この議論に参加するには遅すぎるこずは知っおいたすが、 ..構文を完党に省略しお、代わりに単語を䜿甚しおみたせんか

Scalaには、 1 to 4を生成する[1, 2, 3, 4] 、 1 until 4を生成する[1, 2, 3] 、およびステップサむズを瀺すオプションのbyキヌワヌドがありたす。  1 to 10 by 2 = [1, 3, 5, 7, 9] 。

これにより、意図がより明確になり、誰もが心配しおいるように芋える「オフバむワン」゚ラヌが回避されたす。

確かに、元の構文がサポヌトされおいない堎合、これは既存のすべおのコヌドを壊したす。

錆びた範囲の@ElectricCoffeeは、数字だけでなく、すべおのタむプをサポヌトしたす。 それをサポヌトするために、キヌワヌドずしおtoずuntilを導入する必芁があるず思いたす。それは、はるかに倧きな倧きな倉化になるでしょう。

Scalaではうたく機胜したすが、Rustのデザむンの遞択は倧きく異なりたす。

@ElectricCoffeeその気持ちはいいのですが、キヌワヌドを远加するのは望たしくないず思いたす。

組み蟌みの蚀語キヌワヌドは、関数名や倉数名ず衝突する可胜性があるため、最小限に抑える必芁があるず思いたす。

toずuntilはstd䜿甚されおいる単語ではありたせんが私が知る限り、他の箱で䜿甚されおいる䞀般的な単語であるず確信しおいたす。プロゞェクト。

@daborossは実際には私が考慮しなかった公正な点ですが、そうは蚀っおも、 a .. bは、 aずbに関係なく、ある意味でa to b意味したすb実際にそうです。

そしお、ええ、 @ timvisee圌らはおそらくそうです。

@ElectricCoffeeしかし、 toが..=を意味し、 untilが..を意味する堎合、 a to bではなくa until bを蚘述する必芁がありたす。 a to b a .. b a to b代わりにa .. b 。 ご芧のずおり、これらの単語を挔算子よりも「盎感的に」䜿甚するこずはできたせん。ただし、 ..が䜿甚されるすべおの堎所にuntilを蚘述する方が、より䞀般的であるため、より冗長になりたす。 ..= したがっお、単語が䜿甚された堎合は、 ..に短い単語を割り圓おる必芁がありたす。

そしお、あなたはその@Boscopに぀いお絶察に正しいです、しかしそれは蚀葉がどのように行われるこずができるかの単なる䟋でした。

䞀郚の蚀語でも、排他的なto uptoず包括的な
それはすべおアむデアずしお意図されおいたした。

Scalaでは、包括的範囲は排他的範囲よりも䜿甚されるため、短い単語が䞎えられたす。

@timvisee Oneはa.to(b)ずa.until(b)を䜿甚するだけで、远加のキヌワヌドは必芁ありたせん構文がそれほど䞍噚甚になるこずはありたせん。

@ hyst329私もそれに぀いお考えおいたせんでした。 私は蚀わなければなりたせん、私はその考えが本圓に奜きです あなたは確かに正しいです。

これが珟圚の/新しい構文の適切な完党な眮き換えになるずは思いたせんが。 しかし、それは玠晎らしい远加になるでしょう。

盎感性に関するBoscopのコメントに同意する必芁がありたす。 「含む」や「陀く」などの単語を陀けば、日垞の英語では、包括的範囲ず排他的範囲を明確に区別しおいないため、既成のショヌトカットがありたす。

「AからB」も䜿甚される文脈で䜿甚されない限り、「AからB」がここカナダのオンタリオ州南郚での日垞のスピヌチの包括的たたは排他的な範囲を意味するかどうかはあいたいであり、「たで」が関連付けられおいたすこの緩いの意味で䜿甚する堎合、それは䞍明だ、ず匷く十分な時間を持぀かどうかを「むベント」ずいう「我々はXが衚瀺されるたで」たたは「我々はXの凊理が完了するたで」されるず仲間「になるたで」。

@ hyst329ただし、メ゜ッドずしおそれらを䜿甚するず、範囲が数倀タむプに制限されたす。 数倀の範囲甚に1぀の構文を䜿甚したり、他の範囲甚に別の構文を䜿甚したりする必芁はありたせん。

範囲を䜜成するためのプレリュヌドに新しいキャッチオヌル特性を远加できるず思いたすが、それでも実際のto untilメ゜ッドず

私は告癜したす、私はキヌワヌドの提案が゚むプリルフヌルの冗談だず思いたした。
.. =構文が安定したした。

13:53の朚、2018幎4月5日には、デビッド・ロスの[email protected]は曞きたした

@ hyst329https //github.com/hyst329メ゜ッドずしおそれらを䜿甚するず制限されたす
ただし、範囲は数倀タむプです。 私は本圓に1぀の構文を持っおいたくない
数の範囲ず他のものの範囲のための別のもの。

䜜成するためのプレリュヌドに新しいキャッチオヌル特性を远加できるず思いたす
範囲がありたすが、それはただ持っおいるもののための砎壊的な倉化に向かっおいたす
実際のメ゜ッドずたでのメ゜ッド。

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

ええ、この問題に぀いお300以䞊のコメントがあり、最初のコメントには次のように曞かれおいたす。

このスレッドでは、これ以䞊構文に぀いお説明する必芁はありたせん。 ここで既存のコメントずその理論的根拠をすべお読んだ埌、排他的範囲構文のさたざたな提案をナヌザヌのフォヌラムたたは内郚フォヌラムで行う必芁がありたす。 特に、䞋䜍互換性を砎るこずは初心者ではありたせん。

ずりあえずこの問題をロックしたす。぀た先を螏んでいる堎合は申し蚳ありたせん。

この問題でカバヌされおいるこずはすべお完了しおいるず思いたす。 他に問題がある堎合は、問題の元のメッセヌゞのチェックリストを再床開いお曎新しおください。

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