1 名前:デフォルトの名無しさん mailto:sage [2021/04/02(金) 21:38:04.11 ID:L7IeSfpL.net] Mozilla発のRust言語のスレ 公式 https://www.rust-lang.org/ https://blog.rust-lang.org/ https://github.com/rust-lang/rust Web上の実行環境 https://play.rust-lang.org 日本語の情報 https://rust-jp.rs/ 前スレ Rust part9 https://mevius.5ch.net/test/read.cgi/tech/1598112455/
356 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 10:12:57.76 ID:HN4XQcog.net] >>349 言語仕様的にチェックされるかという意味ならYes
357 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 10:51:18.82 ID:EDIdYwla.net] >>351 ライブラリの実装ではチェックされるようなコードになっているが 最適化で消えるかも知れないので実行時に必ずしもチェックされるとは限らないという意味?
358 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 11:29:39.09 ID:1OyY1L+6.net] コンパイル時に境界チェックを外せると確定してない限り最適化しようが境界チェックはやる
359 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 13:16:17.19 ID:BfdKSrwu.net] 例のLKML見直してて思ったけど unsafeなコードetcが不変条件を破壊した場合に対する安全な対処法って今なんかあるのかな
360 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 13:47:19.78 ID:3EuQZ3Ew.net] こんなとこじゃね https://doc.rust-lang.org/edition-guide/rust-2018/error-handling-and-panics/controlling-panics-with-std-panic.html
361 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 15:27:12.87 ID:jQpDsyge.net] 二重投稿になるかも知れませんが、[0; n] で、n要素のi32 型の配列という 意味になるようですが、n が実行時にしか決まらない変数でも大丈夫ですか? その場合、データ領域はスタック領域から確保するのでしょうか。
362 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 18:08:50.70 ID:HN4XQcog.net] >>356 まずはリファレンスを https://doc.rust-lang.org/std/primitive.array.html
363 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 18:22:21.07 ID:t+PzYqgO.net] >>354 不変条件の種類によるけど最悪 undefined behavior になるから対処は無理じゃないかな コンパイラの最適化レベル落とすとかで振る舞いを予測可能にすることは出来るのかも
364 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 19:36:40.90 ID:jQpDsyge.net] >>357 でも、Box::new([0; n])と書いた場合には、nはコンパイル時に決まらない値 でもいいの?
365 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 20:41:55.42 ID:m2UbhZH5.net] いいに決まってんだろハゲ!
366 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 20:43:40.06 ID:XWuZH88T.net] Vec::with_capacity使えよ
367 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 21:18:06.47 ID:EDIdYwla.net] 試せば2秒で分かるんだから試しなよ
368 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 21:32:36.01 ID:lX6x7Umv.net] 2秒で試してみろや
369 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 21:34:25.75 ID:lX6x7Umv.net] うまくいかなかったとしてほかに問題がないか状況を切り分け周辺を調査 誤りのない環境を整備 学習内容を保存し整理 単純な文法ひとつでも最低30分
370 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 22:27:00.95 ID:GVcFAhra.net] Rustの場合 「2秒で試せる」 || 「試すしたら2秒でわかる」 error: 意図が曖昧です Cの場合 「2秒で試せる」 「2秒で試してみろやカス」
371 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 00:40:38.91 ID:xah6OenV.net] Golangが難しかったのでRustにきました よろしくおねがいします
372 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 00:53:02.27 ID:90w9Shfm.net] ゴールデンウィークに釣りですか
373 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 12:40:02.43 ID:K/HFYMcp.net] Animal から、C++ の継承のようなことをした構造体(?)を Dog とした時、 Box<T> a; で T を Animalのようなものにして、a には、実際には Dog への参照を入れるようなことは出来ますか?
374 名前:はちみつ餃子 mailto:sage [2021/04/29(木) 13:12:17.47 ID:x0Vd7BP9.net] >>368 dyn かな? 完全に一致する機能というわけではないけど、 Rust ではトレイトに dyn キーワードを付けると (C++ で言うところの) 抽象クラスのように機能する。
375 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 13:33:28.09 ID:K/HFYMcp.net] >>369 https://stackoverflow.com/questions/53897315/rust-polymorphic-calls-for-structs-in-a-vector ↑には、Questionの人の書いたのももしかしたら動作するかも知れないけど Answerの人に従えば、以下のようにするのが正しいのかな? trait Function { fn value(&self, arg: &[f64]) -> f64; } struct Add {} struct Multiply {} impl Function for Add { fn value(&self, arg: &[f64]) -> f64 { arg[0] + arg[1] } } impl Function for Multiply { fn value(&self, arg: &[f64]) -> f64 { arg[0] * arg[1] } } impl Add { fn new() -> Add { Add {} } fn new_boxed() -> Box<Add> { Box::new(Add::new()) } } impl Multiply { fn new() -> Multiply { Multiply {} } fn new_boxed() -> Box<Multiply> { Box::new(Multiply::new()) } } fn main() { let x = vec![1.0, 2.0]; let funcs: Vec<Box<dyn Function>> = vec![Add::new_boxed(), Multiply::new_boxed())]; for f in funcs { println!("{}", f.value(&x)); } }
376 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 17:34:51.47 ID:HuHtKfqb.net] C++でis-a関係の継承使うデータはRustだとenum使う方が単純になるケースもある struct AnimalData { ... } struct DogData { ... } struct CatData { ... } #[non_exhaustive] enum Animal { Dog (AnimalData, DogData), Cat (AnimalData, CatData), } この方法にも色々欠点はあるけど(クレートの外で新しいAnimalを追加できないとか) trait使う抽象化が大袈裟だと思ったら考えてみて
377 名前:デフォルトの名無しさん mailto:sage [2021/04/29(木) 17:51:11.31 ID:GXfM8nV1.net] >>370 継承とは違うけど そのユースケースはfnかFn使えば十分じゃないの? let functions: Vec<fn(f64, f64) -> f64> = vec![|x, y| x + y, |x, y| x * y]; for f in &functions { println!("{}", f(1.0, 2.0)); }
378 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 01:35:27.25 ID:7VhEvZ/Q.net] >>372 簡単な例として書いただけで、同じ表示結果を得ることが目的ではないので そういうこととは趣旨が違う。 さまざまな種類の多態なオブジェクトを1つのリストの中に入れるということは オブジェクト指向に置いて基本的な概念の一つで、Polymorphismの基本なので、 継承的なものを使わずに同じ結果を書けたとしてもそれは違う。
379 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 15:35:29.77 ID:dTeJW22U.net] ポリモーフィズムを理解してないようなやつでもRustをはじめるようになったんだな
380 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 17:06:26.25 ID:8uDUVNfy.net] c++と同じで難しくてランタイム速度最強てなところが厨を呼び寄せてる
381 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 18:24:08.88 ID:K785SuXO.net] C++やってたら配列のインデックスアクセスが安全かどうかや ディスパッチがスタティックかどうかを普通気にするよね
382 名前:デフォルトの名無しさん [2021/04/30(金) 20:47:52.42 ID:eR/nI2gV.net] グーグルやMSが「Rust」言語でOS開発、背景に国家による諜報活動の影=日経 xTECH中田敦 背景に国家による諜報活動の影っていう根拠が1つも示されてないんだけど、こいつの言ってることマジなん? それとも日経新聞のおなじみの「飛ばし」によるクリック集め?
383 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 21:05:00.75 ID:MgEdsK0p.net] GAFAMって言いたいだけ
384 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 21:27:01.84 ID:8uDUVNfy.net] マイクロソフトがwindows書くのにc++使って後悔した話も知らん層が今も同じようなことやろうとしてんだろ。。 バカは歴史に学ばない。
385 名前:デフォルトの名無しさん [2021/05/01(土) 00:25:31.33 ID:6VZJr73m.net] これ見てたら、いきなり日本語で「ネコ」って出てきてびっくりした https://www.programming-idioms.org/cheatsheet/Rust 実は、お前らの中の誰かが書いてんのか?
386 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 05:47:22.98 ID:5xLRGYfU.net] >>380 https://www.publickey1.jp/blog/21/http35firefoxmozillaquicrustneqo.html 今、プログラムやる若い層じゃアニメとアニメに出てくる簡単な日本語は基礎教養だぞ github見たらアニメキャラアイコンだらけだ
387 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 08:00:51.92 ID:GEnkdmRT.net] NANI
388 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 17:02:13.98 ID:1WejqaZh.net] >>379 >マイクロソフトがwindows書くのにc++使って後悔した話 興味有るので詳しく :
389 名前: mailto:sage [2021/05/01(土) 17:21:37.61 ID:m+tkSw04.net] >>379 流出したソースを見る限り、MS は C で Windows を書いていたようですよ‥‥
390 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 17:53:57.44 ID:/Wzn7OVr.net] そういえば初期WindowsのWindow管理のサンプルコード見た記憶がある ツリーリンクリストが構造体に埋め込む形で自作されてた
391 名前:デフォルトの名無しさん mailto:sage [2021/05/01(土) 17:54:25.77 ID:/Wzn7OVr.net] コードの8割方コメントだった
392 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 09:31:00.53 ID:/RYlgP4n.net] The Windows Research Kernel AKA WRK https://github.com/zhuhuibeishadiao/ntoskrnl
393 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 09:42:02.70 ID:3kB7D+rP.net] 9割がCか
394 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 09:51:42.31 ID:3kB7D+rP.net] まあLinuxもCと一部アセンブラだから似たようなものか
395 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 12:27:53.91 ID:Jc9e5ibu.net] 当時の言語状況からして他に選択肢なんかなかったと思うがねぇ。 他の言語選択してたら駆逐されてた可能性すらある。
396 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 12:37:35.62 ID:anCj3LhS.net] NT kernelが開発されたのが1990年代か C++も既にあったがまだ浸透してなかったかな
397 名前:デフォルトの名無しさん [2021/05/02(日) 13:45:15.23 ID:c1rmI49h.net] チュートリアルやってたらトレートオブジェクトってのの説明が意味不明級だったぜ https://tourofrust.com/82_ja.html なんじゃこりゃ
398 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 14:35:17.11 ID:n4dQrb8u.net] >>392 Javaの知識があれば trait object: interfaceとして渡されたオブジェクト という感じで説明できるけど何か使い慣れた言語はあるかね
399 名前:デフォルトの名無しさん [2021/05/02(日) 15:05:16.82 ID:c1rmI49h.net] >>393 もしかしてExistential Container(和訳不明)が独立のオブジェクトとして括り出さている感じですか? なおC#が一番使い慣れているのですが、この範囲ではJavaと大きく違わなさそうでしょうか・・・・
400 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 15:36:14.52 ID:hSgvj4Ff.net] >>392 The Bookの該当箇所を読むのを勧める Java/C#のインターフェースと基本的には同じだけど違う部分もある https://doc.rust-lang.org/book/ch17-02-trait-objects.html その少し後に出てくるBoxのコードに出てくる `animals: Vec<Box<dyn NoiseMaker>>`の Box<dyn NoiseMaker>がTrait Object Trait Objectは動的サイズの型なので&NoiseMakerやBox<dyn NoiseMaker>のようにポインタの形になる そのチュートリアルは前後のページとどう関係があるのかについて説明がほぼないのでわかりにくいかもね
401 名前:はちみつ餃子 mailto:sage [2021/05/02(日) 15:50:22.98 ID:VAfyzxcR.net] 他の言語の概念と対応付けるよりはそれ自体として理解したほうがいいのは確かだと思う。 (理解できずに行き詰まるくらいなら雑な理解でも一旦前に進んだほうがいいかもしれんけど。) 言語機能ってひとつだけを取り出して使えるものじゃなくて、他の言語機能との連携の中で活きてくるものだから 個別の言語機能を他言語の言語機能と対応付けて理解しても綺麗に繋がらない感じがする。
402 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 15:58:09.22 ID:TmCNx2ML.net] https://doc.rust-lang.org/reference/types/trait-object.html こっちじゃ`dyn Trait`のことをtrait objectと呼んでいるようだけど というか俺はこれだと思ってた Traitを実装する具体型の値のアドレスと、その型に対するTrait実装のvtableの組
403 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 16:04:49.31 ID:n4dQrb8u.net] >>394 C#はあまり詳しくないけど、例えばListのAddRange関数の引数の(IEnumerable collection)が近いかな AddRangeにはIEnumerableを実装してればどんな型でも渡せるはず(ArrayList、HashSet, etc) これをAddRangeの視点で見ると、渡されたcollectionが実際に何の型かは分からないけど IEnumerable(interface≒trait)を実装してることは分かってるから そのGetEnumeratorを呼んでIEnumeratorを受け取ってそこから取り出せる要素を全部追加すれば 目的の動作は果たせることになる このAddRangeの引数のcollectionがIEnumerableトレイトを実装したtrait objectって感じ
404 名前:デフォルトの名無しさん mailto:sage [2021/05/02(日) 17:25:27.83 ID:hSgvj4Ff.net] >>397 正確に言うとリファレンスに書いてる通りdyn Trait型のオブジェクトがTrait Object &dyn TraitやBox<dyn Trait>はTrait Objectを指してるfat pointer でも実用上は&dyn TraitやBox<dyn Trait>のfat pointerのこと自体を Trait Objectというものとして理解したほうがわかりやすいので The Bookや他の解説書でも区別してないのが多い
405 名前:デフォルトの名無しさん mailto:sage [2021/05/03(月) 09:09:00.34 ID:AyvebyYK.net] >>76 Visual Rust#やろ
406 名前:デフォルトの名無しさん mailto:sage [2021/05/03(月) 11:04:52.91 ID:L2uysNOu.net] https://marketplace.visualstudio.com/items?itemName=vosen.VisualRust
407 名前:デフォルトの名無しさん mailto:sage [2021/05/03(月) 15:28:19.67 ID:lWPqbdGD.net] 囲い込んでブラックボックス強要するあたりはMSと相性いいかもな
408 名前:デフォルトの名無しさん mailto:sage [2021/05/04(火) 15:41:01.40 ID:6lvPuDrb.net] facebookも財団に参加したのか appleも時間の問題かな intelとかのCPUメーカーにも参加して欲しい所だが
409 名前:デフォルトの名無しさん mailto:sage [2021/05/04(火) 17:15:37.01 ID:lMvsmKDJ.net] CPUメーカーが参加するとどういうことが嬉しいの? LLVMなら分かるんだけど
410 名前:デフォルトの名無しさん mailto:sage [2021/05/04(火) 20:03:06.80 ID:6lvPuDrb.net] まあ元intelのエンジニアも開発に参加しとるけどね
411 名前:デフォルトの名無しさん mailto:sage [2021/05/04(火) 20:33:44
] [ここ壊れてます]
412 名前:.63 ID:PCq3WtR4.net mailto: え?脆弱で有名なあのインテル? ヤバいじゃないですかぁ [] [ここ壊れてます]
413 名前:デフォルトの名無しさん mailto:sage [2021/05/04(火) 21:04:23.81 ID:mgj/rIpW.net] rustが低レイヤーの開発言語としては覇権取りそうね 今から勉強しとくのが良さそう
414 名前:デフォルトの名無しさん mailto:sage [2021/05/04(火) 22:09:05.61 ID:mvlmOZ0b.net] 低レイヤーの仕事をしたことないってのがよくわかるわ。
415 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 00:03:56.29 ID:UOumGkwv.net] >>405 エンジニア個々人が参加するのは普通にあると思うんだけど 企業として支援することにどんなうまみがあるのかなと思って ただ改めて思うとintelもソフトウェアたくさん出しててrust使う旨みはあるから支援する意味はありそうだね
416 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 01:46:02.42 ID:E1emjEBd.net] SHやArmのRustコンパイラをメーカーが出たらガチ
417 名前:はちみつ餃子 mailto:sage [2021/05/05(水) 03:09:13.31 ID:o0iQ7lyN.net] うまみっていうか、それが上手くいくかどうかなんて事前にはわからん。 ほどほどに有用そうなものに支援してたらどれかひとつくらいはいい感じって程度の話だろ。
418 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 05:31:11.89 ID:rumk0idO.net] 協力し合うと同時にあまり勝手しないように牽制するのも目的なので
419 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 12:35:13.44 ID:UNdhfIGe.net] どうも頭の悪い輩が多いなと思ってたけど、 この言語、ある程度まではスクリプト的に書けるからなんだな。。 なんとなくおかしなこと言ってる奴の感覚がわかってきたわ。
420 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 13:37:38.31 ID:ZpSbA1Y5.net] >>413 > この言語、ある程度まではスクリプト的に書けるからなんだな。。 短く簡単に書けるようにするのはRustの課題の一つだと思ってるので、どういう観点から「スクリプト的に書ける」とおっしゃるのか伺いたいです よく比較に上がるC++よりはよっぽど記述量多くなるよね?
421 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 14:30:15.37 ID:UNdhfIGe.net] そりゃautoなんかを使いまくった最近のスクリプト厨のc++ならそうだろうけれど、 普通に仕事で読むc++コードはそういう感じではないからね。 てかc++と一口に言っても年代で全く別言語だわ。 そういうスクリプト的な書き方をした場合、rustのがc++より快適に感じるのはまあわかるよ。 問題もrustのが少なく感じる。そういう書き方だけしてる場合はね。
422 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 14:59:14.54 ID:ZpSbA1Y5.net] 炎上学習法かってくらい何も理解してない感じでワロス
423 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 15:13:12.13 ID:UOumGkwv.net] autoと動的型付けの区別が付いていない...?
424 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 15:19:43.76 ID:nBZStdai.net] 型再構築なんてむしろ厳格に型付けされた言語から生まれたんだが
425 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 15:21:51.15 ID:2WIXJ/st.net] C#でvarキーワードが導入された時も 基本型の変数にvar使うのやめましょうみたいな規約を 意味不明な根拠で良い規約と信じて導入しようとする おかしな人達がそこら中に居た 後にEffective C#かそこらの書籍で ローカル変数はvar使えと明確に書かれるようになって 老害ザマァと思ったものだ
426 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 15:46:10.02 ID:sMGymnD4.net] 正義が世俗の愚劣さに屈した
427 名前:はちみつ餃子 mailto:sage [2021/05/05(水) 15:47:19.58 ID:o0iQ7lyN.net] ローカル変数の場合は型がすぐ隣に書いてあるような状況だろうからな。
428 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 16:17:27.41 ID:UNdhfIGe.net] ほらね。 好き勝手な自分流でコード書いてるだけで人のコードを読んでないのが丸わかりなコメントしてても 全く気づかないバカしかいない。
429 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 16:25:26.72 ID:GNJam4rN.net] >>421 ようするに型情報を二重に書いてるようなものだよな 情報の多重化であり 小さなDRY
430 名前:エ則違反 こんな簡単な理屈を理解出来ない奴が不思議 [] [ここ壊れてます]
431 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 16:30:24.49 ID:sMGymnD4.net] 書かれておらずメソッドで戻り値を取得するような場合 C#もJavaも型で呼び出し先が変わる仕組みなので 意図せずに処理の流れまで変わってしまう
432 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 16:44:03.35 ID:GNJam4rN.net] >>424 お前は日本語勉強しろよ 普通に読解不能なんだよ 必要な所には型を書く 当たり前 不要な所に書いてると 「何故書いてるのだろうか? 何か理由を見落としてるだろうか?」 と注意深いプログラマを考えさせるのでエネルギーの無駄
433 名前: mailto:sage [2021/05/05(水) 16:50:12.99 ID:tRoHSHAj.net] >>416 >炎上学習法 懐かしい言葉ですね‥‥
434 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 16:59:13.24 ID:sMGymnD4.net] >>425 varにするようになったら全部varにするだろ?
435 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 17:40:56.63 ID:iUhohRzs.net] >>416 相手してるお前も同罪やぞ すぐ見分けつくだろ
436 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 18:09:53.05 ID:UOumGkwv.net] VSCode + rust-analyzer だとletやメソッドチェーンのところに型が表示されるし 今時の開発環境使っていればローカル変数の型がぱっと見で分からなくて苦労することは少ないのでは
437 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 18:14:24.50 ID:GNJam4rN.net] >>427 何を言っとるんだお前は? 右辺値と同じ型で「困る」時は型を書くに決まってるだろ 下手するとvarの仕様も理解せずに混乱した事を書いてんじゃないだろうな
438 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 18:51:20.46 ID:cJbqSzge.net] ゲェーQZ居着いてんのかよこのスレ バカなくせに出しゃばりでウザいからC++スレから出てくんなよ
439 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 19:01:51.22 ID:sMGymnD4.net] >>430 後から右辺値の型が変わったら気が付かないうちに影響が波及するじゃん
440 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 19:41:05.57 ID:E1emjEBd.net] var xの型が何であるかはxの初期化のときただ一度きりの右辺の型で決まるんジャネーノ だとしたら後から右辺値の型が変わることに関して varの導入で傷口が広がったことにはならない
441 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 19:44:32.97 ID:E1emjEBd.net] 二回目以降の右辺値はxに対する代入でしかありえない それらはxに対して(暗黙の型変換等を経て)代入可能ならコンパイルが通るし、 代入不可能ならエラーになる。 xの初期化時にvarを使おうが使うまいが(明示的に型を書こうが)変わらない話
442 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 20:38:12.35 ID:UOumGkwv.net] せめてletの話をしろよ
443 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 20:48:36.67 ID:vgXZGrp9.net] RustのletはJS由来? それともHaskell?
444 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 21:09:59.09 ID:1EwqoC8k.net] JavaScriptにもletあるけど語源調べたら普通に英単語のletで短縮形ってわけじゃないらしい
445 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 21:24:20.68 ID:ra+BilqN.net] BASICの時代からletはあったけどな
446 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 21:31:43.51 ID:ZsCzZm1J.net] letはlisp系から始まったイメージ。
447 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 22:26:24.94 ID:vWJ975z5.net] RustのletはML系由来だろ
448 名前:デフォルトの名無しさん mailto:sage [2021/05/05(水) 22:44:48.04 ID:UOumGkwv.net] 最初のrustcはocamlで書かれてたくらいだしML系の影響は色濃そう
449 名前: mailto:sage [2021/05/05(水) 22:49:49.94 ID:tRoHSHAj.net] >>431 https://mevius.5ch.net/test/read.cgi/tech/1610096040/839
450 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 01:02:12.67 ID:SpjdL+PT.net] let mut にするか var にするかの決定で、 目立たないけどRustに貢献した人という記事が最近書かれたので貼っとく https://brson.github.io/2021/05/02/rusts-most-unrecognized-contributor
451 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 01:05:25.16 ID:ut0g6JOd.net] >>443 3行でまとめて
452 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 01:35:02.38 ID:SpjdL+PT.net] デイブ・ハーマン(Dave Herman)というECMAScript委員会のMozillaの代表者の人がいました。 リポジトリ上のコミットログでは目立ちませんが、彼の好みがRustチームの好みを作り、チームの組織と維持に重要な役割を果たしていました。 彼はチームの決定をほとんど穏やかに受け入れていましたが、let mut と var のどちらにするかについては var を使うというチームの決定に同意しませんでした。
453 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 01:36:11.91 ID:V2I8vwdu.net] >>421 でも、 BYTE c = 'a'; と let c = 'a'; では間違い易さが違う。後者は、int か BYTE か SBYTE か分からない。
454 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 01:37:37.69 ID:V2I8vwdu.net] Rustだと、明示するには、 let c:i8 = 'a'; とキータイプが多くなってしまうな。
455 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 01:40:47.77 ID:V2I8vwdu.net] 例えばの話、演算子も優先順位が決まっているので、 if ( (a >= 5 && a <= 10) || (b>=10 && b <=20) ) {・・・} 見たいな条件も、優先順位の括弧を省略できるかも知れないが、勘違いや 記憶違いを防ぐために書いた方がいいと言われている。 int c = 'a'; char c ='a'; auto c = 'a'; ではやはり、autoはバグの原因になりそう。
456 名前:デフォルトの名無しさん mailto:sage [2021/05/06(木) 01:47:50.96 ID:V2I8vwdu.net] それと、型を明示した方が後から見たときにプログラマの脳内の想定もわかり易い。 float a = 1.0f; float b = a + 5.0f; みたいなものも、もし、 auto a = 1.0f; auto b = a + 5.0f; と書くと b は、double 型になってしまうかもしれないが、テストしても 間違いに気づかず、僅かに速度低下やメモリーを多く食ってしまう かもしれない。また、思想にもよるが、1.0f などと書かずに float a = 1; float b = 5; と書きたい人も居ると思う。これの方が、後から double 型に変えたときに 右辺を訂正する必要がないメリットもある。