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/
Rust part10
■ このスレッドは過去ログ倉庫に格納されています
2021/04/02(金) 21:38:04.11ID:L7IeSfpL
595デフォルトの名無しさん
2021/05/13(木) 18:39:15.84ID:oBGJ4/nI Rust for Windowsを欲しがったのはMicrosoft自身だろう
既にVSのインストーラー内部などでRust使用中なので
既にVSのインストーラー内部などでRust使用中なので
596デフォルトの名無しさん
2021/05/13(木) 19:27:59.33ID:4YggBXb4 rust for windowsで作る本作ってくださいお願いします
597デフォルトの名無しさん
2021/05/13(木) 19:29:13.29ID:vZYCxDQa >>594 Windows専用のアプリが作りたいならC#でも使えばいいと思うけど...
598デフォルトの名無しさん
2021/05/13(木) 19:30:20.99ID:vZYCxDQa >>594 Windows専用のアプリが作りたいならC#でも使えばいいと思うけど...
599デフォルトの名無しさん
2021/05/13(木) 19:30:58.76ID:vZYCxDQa おっとミスって2回書き込んでしまった
失礼
失礼
600デフォルトの名無しさん
2021/05/13(木) 20:59:04.54ID:vzWwtH6K >>590
そういう技術者にも射撃練習とかやらせるのだろうか?
そういう技術者にも射撃練習とかやらせるのだろうか?
601デフォルトの名無しさん
2021/05/13(木) 21:40:48.09ID:NNemQTGQ >>595
もうメジャーな用途で使われてんのか
もうメジャーな用途で使われてんのか
602デフォルトの名無しさん
2021/05/13(木) 21:45:54.80ID:vzWwtH6K windowsもそろそろNTカーネルを捨てる時期が来るだろうし色々模索はしてるんだろうな
603デフォルトの名無しさん
2021/05/13(木) 21:57:03.92ID:WjgS+eLl もし仮にNTカーネル捨てたとしてLinuxカーネル一択だと思うがな
604デフォルトの名無しさん
2021/05/13(木) 22:08:50.47ID:vzWwtH6K Linuxへの接近はここ数年目立ってるし無くはない話だな
独占市場と過去の互換性を捨てきれるか
仮想環境で過去の互換性を維持することも考えられる
独占市場と過去の互換性を捨てきれるか
仮想環境で過去の互換性を維持することも考えられる
605デフォルトの名無しさん
2021/05/14(金) 08:10:59.62ID:FBkeGRqg606デフォルトの名無しさん
2021/05/14(金) 08:37:43.19ID:BI4FO4HO カーネルを捨てて切り替えるとか出来るわけないだろ
607デフォルトの名無しさん
2021/05/14(金) 08:52:11.24ID:9b8NT0Ot 3才児が「ぼくはうちゅうひこうしになるんだ!」って言ってるようなもんだから生暖かく見守ってやれ
608デフォルトの名無しさん
2021/05/14(金) 10:22:28.00ID:6SQ932Rj OSカーネルに対するコンプレックスがすごい人がいるんだろ。
この前のlinuxドライバに関する議論でもそういうの感じるわ
この前のlinuxドライバに関する議論でもそういうの感じるわ
609デフォルトの名無しさん
2021/05/14(金) 11:10:24.23ID:bMDjGf5Y rustがgolangより人気が出ると思っていいですか?
610デフォルトの名無しさん
2021/05/14(金) 11:14:13.19ID:5xLewDJ4 >>609
Goはガーベッジコレクションがあるから?
Goはガーベッジコレクションがあるから?
611デフォルトの名無しさん
2021/05/14(金) 11:29:33.68ID:6SQ932Rj GCとランタイム速度に困ったことのある奴だけ気にすればええ。
612デフォルトの名無しさん
2021/05/14(金) 13:23:04.93ID:TMXA3cLH goとrustどっちが良いか迷うならgoやっといた方が潰しが効くと思う
自分はrust好きだからrust使うが
自分はrust好きだからrust使うが
613デフォルトの名無しさん
2021/05/14(金) 14:57:53.07ID:85G96vHL 両方やっとけ
614デフォルトの名無しさん
2021/05/14(金) 15:16:48.50ID:678S/iU6 なんでマイナー言語のはずのgoがよく言及されるようになったのかと思っていたら、AWSで使える言語の一つになっていた。
Azureでも使えるようだ。
Azureでも使えるようだ。
615デフォルトの名無しさん
2021/05/14(金) 15:45:19.02ID:WB7bczPS goがマイナー。。。..
616デフォルトの名無しさん
2021/05/14(金) 15:46:03.80ID:BI4FO4HO サーバープログラムみたいな閉じた環境で、出来るここまでと決まってて
要らないこと考えたくないなら制約された言語選んだほうが良いかもな
要らないこと考えたくないなら制約された言語選んだほうが良いかもな
617デフォルトの名無しさん
2021/05/14(金) 15:47:17.23ID:6SQ932Rj goでほとんど問題ないんだが、それだとrustの出番なくなっちゃうからね。
618デフォルトの名無しさん
2021/05/14(金) 16:15:48.73ID:1T0ViQH9 Go言語がマイナーならこの言語はどんだけマイナーになっちゃうのよ
619デフォルトの名無しさん
2021/05/14(金) 16:25:56.91ID:Z0ePaP6y goとrustの違いが分からないような知識量ならgoやった方が不幸にならないかと
620デフォルトの名無しさん
2021/05/14(金) 16:48:29.92ID:678S/iU6 参照型はローカル変数にだけ入れて一時的な目的だけに使うことに徹してスクリプト言語の様な書き方だけに専念すればRustはスクリプト言語であるかのように使えて、習得は難しくないかも。
参照型を構造体の中に入れようとしたとたんCやC++では考える必要の無かった難しい問題が生じる。
参照型を構造体の中に入れようとしたとたんCやC++では考える必要の無かった難しい問題が生じる。
621デフォルトの名無しさん
2021/05/14(金) 17:00:31.58ID:dvkZe6EK メジャー言語
c java vba
c java vba
622デフォルトの名無しさん
2021/05/14(金) 17:40:01.47ID:N2rlLeCr Rustを勉強したら低レベルが理解出来る!!!わけねえだろ
https://www.akiradeveloper.com/post/learn-rust-and-low-level/
https://www.akiradeveloper.com/post/learn-rust-and-low-level/
623デフォルトの名無しさん
2021/05/14(金) 19:36:04.21ID:5xLewDJ4 例えばWeb系ならばRustがベスト
WasmでGC抱える言語をわざわざ選ぶメリットないからね
WasmでGC抱える言語をわざわざ選ぶメリットないからね
624デフォルトの名無しさん
2021/05/14(金) 19:44:16.91ID:6SQ932Rj こういう詐欺師が普通におるからrustは信用できんわ
625デフォルトの名無しさん
2021/05/14(金) 19:51:45.41ID:WB7bczPS rustに対するコンプレックスすごい人いるね
626デフォルトの名無しさん
2021/05/14(金) 20:26:02.54ID:0Bqgd+6M 詐欺師はどこにでもいるからな
とはいえ、webならwasmは正しくないとは思うがwasmならrustは結構正しいと思う
とはいえ、webならwasmは正しくないとは思うがwasmならrustは結構正しいと思う
627デフォルトの名無しさん
2021/05/14(金) 20:32:01.67ID:6SQ932Rj wasm,rustでまともに開発してたら絶対そんなこと思わんわ。。どいつもこいつも馬鹿すぎる
628デフォルトの名無しさん
2021/05/14(金) 20:40:33.59ID:WB7bczPS それで、どんなまともなものを作っているんですか
629デフォルトの名無しさん
2021/05/14(金) 20:46:14.11ID:5xLewDJ4630デフォルトの名無しさん
2021/05/14(金) 21:18:15.11ID:TMXA3cLH >>627
それはあなたがまともにrust使えてないだけなんじゃないですかねぇ
それはあなたがまともにrust使えてないだけなんじゃないですかねぇ
631デフォルトの名無しさん
2021/05/14(金) 21:22:56.09ID:yxEaYkUD 話が具体的で説得力がある
632デフォルトの名無しさん
2021/05/14(金) 21:38:43.40ID:2w1FBHD8633デフォルトの名無しさん
2021/05/14(金) 22:59:38.34ID:R2Ezzb7N 「Rustはスクリプト的に書ける」とかいう謎の言葉言う奴沢山いるけどなんぞ?
同一人物か?
同一人物か?
634デフォルトの名無しさん
2021/05/14(金) 23:07:50.74ID:TMXA3cLH 我々が知らないところでevcxrが流行ってるのかもしれない
635デフォルトの名無しさん
2021/05/14(金) 23:23:46.43ID:72ZodHJE google謹製のREPLね
エベクサ?
エベクサ?
636デフォルトの名無しさん
2021/05/15(土) 02:09:59.05ID:BphhllcO >>633
Rubyと同じようなメソッドチェーンを使ったコードを見かけたから。
Rubyと同じようなメソッドチェーンを使ったコードを見かけたから。
637デフォルトの名無しさん
2021/05/15(土) 03:17:16.69ID:vuo6fbRn ドットでメソッド呼び出しする言語は大概そういうライブラリ設計あるでしょ
638デフォルトの名無しさん
2021/05/15(土) 11:05:39.24ID:DTE+piln639デフォルトの名無しさん
2021/05/15(土) 11:12:58.76ID:Y+SvMVkX そもそもメソッドチェーンって「スクリプト的」なのか?
640デフォルトの名無しさん
2021/05/15(土) 11:24:14.14ID:C+CtGbiq 前々からヤベェやつだとは思ってたが
レベルの低さが想像をはるかに超えてた
レベルの低さが想像をはるかに超えてた
641デフォルトの名無しさん
2021/05/15(土) 11:27:04.30ID:MS0dCBGJ c言語みたいにcsvパーサーも自前で用意するような環境だとそらスクリプト的だろうね。
642デフォルトの名無しさん
2021/05/15(土) 12:00:43.05ID:A3vQNOxR unityとかUEがrustに対応しないかなあ
643デフォルトの名無しさん
2021/05/15(土) 12:00:58.11ID:ZgJC7yuF cargoみたいなパッケージマネージャがあるのもスクリプト的な要素のうちなのか?
644デフォルトの名無しさん
2021/05/15(土) 12:10:16.46ID:MS0dCBGJ cargoは低レイヤー慣れてる人からすれば邪魔でしかないけどね。
645デフォルトの名無しさん
2021/05/15(土) 12:20:50.35ID:DTE+piln SourceforgeなどでRustが好きといっている人の大部分はレベルが低いだろう。
そもそもこの世の中、大多数から受けるものにレベルが高いものがあったためしがない。
好きな言語ランキング上位のJS、Pythonも初心者向け言語であることは誰もが認めることだし。
そもそもこの世の中、大多数から受けるものにレベルが高いものがあったためしがない。
好きな言語ランキング上位のJS、Pythonも初心者向け言語であることは誰もが認めることだし。
646デフォルトの名無しさん
2021/05/15(土) 12:40:11.21ID:UqP25wMI sourceforge???
stackoverflowの調査かなんかと勘違いしたの?
stackoverflowの調査かなんかと勘違いしたの?
647デフォルトの名無しさん
2021/05/15(土) 12:41:57.93ID:ZgJC7yuF >>644
どういうこと?ベアメタル向けでもcargo使うのが主流だと思っていた
どういうこと?ベアメタル向けでもcargo使うのが主流だと思っていた
648デフォルトの名無しさん
2021/05/15(土) 12:47:56.99ID:ZgJC7yuF >>645
使用者のレベルの高低と言語のレベル(?)の高低は一致するという主張かな?
言語のレベルが高いというのが最先端のテクノロジーを取り込むという意味ならrustの目指すところではないと思う
他の言語で実証されたコンセプトを取り込むと宣言してる(た?)はず
高レベルな言語が必要な人はこんな普及言語じゃなくてもっと尖った言語を使うか自分で作るべきなのでは
使用者のレベルの高低と言語のレベル(?)の高低は一致するという主張かな?
言語のレベルが高いというのが最先端のテクノロジーを取り込むという意味ならrustの目指すところではないと思う
他の言語で実証されたコンセプトを取り込むと宣言してる(た?)はず
高レベルな言語が必要な人はこんな普及言語じゃなくてもっと尖った言語を使うか自分で作るべきなのでは
649デフォルトの名無しさん
2021/05/15(土) 12:49:38.36ID:DTE+piln650デフォルトの名無しさん
2021/05/15(土) 12:53:14.42ID:DTE+piln >>648
そういうことじゃなくて、
・Rustをほとんど使っても見てないのに勝手に「好き」と言っていることが分かってる。
・Stackoverflowのような沢山の人が集まる場所の調査では、必ずJSやPythonのような初心者向けの言語が人気となるわけだから、そこの人々が好きだと思う言語は、JSやPythonのような感覚で使えると勝手に思い込んである蓋然性が高い。
ただし、現実はRustは実際には使ってないのに勝手に言っている。
ということ。
そういうことじゃなくて、
・Rustをほとんど使っても見てないのに勝手に「好き」と言っていることが分かってる。
・Stackoverflowのような沢山の人が集まる場所の調査では、必ずJSやPythonのような初心者向けの言語が人気となるわけだから、そこの人々が好きだと思う言語は、JSやPythonのような感覚で使えると勝手に思い込んである蓋然性が高い。
ただし、現実はRustは実際には使ってないのに勝手に言っている。
ということ。
651デフォルトの名無しさん
2021/05/15(土) 13:20:44.67ID:YOv93GRR stackoverflowの調査の話なら、調査内容を勘違いしている
あれは「今Rustを使っている人が、今後もRustを使い続けたいかどうか」のアンケート結果をmost lovedと言ってるだけ
だからJSやPythonユーザの意見は入ってない
そもそもloveって言葉に語弊があるし、日本語にしたときに「人気の」とかなって余計訳がわからなくなってる
あれは「今Rustを使っている人が、今後もRustを使い続けたいかどうか」のアンケート結果をmost lovedと言ってるだけ
だからJSやPythonユーザの意見は入ってない
そもそもloveって言葉に語弊があるし、日本語にしたときに「人気の」とかなって余計訳がわからなくなってる
652デフォルトの名無しさん
2021/05/15(土) 13:25:20.53ID:YOv93GRR たぶん「最も嫌嫌使っている人が少ない言語」みたいなのが正確な気がするな
653デフォルトの名無しさん
2021/05/15(土) 14:15:44.60ID:MW7lNw7H 「今使ってる人が次も使いたいと思うか?」ってJetBrainsの調査でも毎回入れてくる項目だな
海外のアンケートではよく見るやつ
海外のアンケートではよく見るやつ
654デフォルトの名無しさん
2021/05/15(土) 14:17:03.39ID:DTE+piln655デフォルトの名無しさん
2021/05/15(土) 14:19:45.06ID:eXXN4CKf 一生でどれか一つのプログラミング言語しか覚えられないとして
Rust選ぶ人いますか?
選択したとして別にその言語がいきなりマスターできるわけでなく
ただその言語しか覚えられないというだけですが
Rust選ぶ人いますか?
選択したとして別にその言語がいきなりマスターできるわけでなく
ただその言語しか覚えられないというだけですが
656デフォルトの名無しさん
2021/05/15(土) 14:23:36.58ID:DTE+piln 今rustを使ってる人って、自ら進んで使おうとした人に限られるから
嫌いな人がほとんどいないのは当たり前だから、調査結果にバイアスが
掛かりすぎていることになるな。
嫌いな人がほとんどいないのは当たり前だから、調査結果にバイアスが
掛かりすぎていることになるな。
657はちみつ餃子 ◆8X2XSCHEME
2021/05/15(土) 15:05:35.65ID:pVi51x8H そういえば C++ でメンバ関数の評価順序に関して設計者も気づいてなかった考慮漏れが見つかった
(よくあるパターンが実際には未定義だった) って話があったな。
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0145r0.pdf
C++17 で修正されているはずだけど。
宣言的な表現や関数的な表現をプログラミング言語に取り込む試みは数多いが
現実は順序からは逃れられぬのだ……。
(よくあるパターンが実際には未定義だった) って話があったな。
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0145r0.pdf
C++17 で修正されているはずだけど。
宣言的な表現や関数的な表現をプログラミング言語に取り込む試みは数多いが
現実は順序からは逃れられぬのだ……。
658デフォルトの名無しさん
2021/05/15(土) 15:16:25.44ID:HcoKJY+/ Rustがスクリプト的に書けるかどうかはおいといて、
個人用のツール書く言語をPythonからRustに乗り換えたっつー話は一応あるな
https://hayatoito.github.io/2017/faq/#programming-language
個人用のツール書く言語をPythonからRustに乗り換えたっつー話は一応あるな
https://hayatoito.github.io/2017/faq/#programming-language
659デフォルトの名無しさん
2021/05/15(土) 15:20:52.26ID:DTE+piln >>658
Googleがnode.jsで書いていたものをRustにしたと聞いたぞ。
Googleがnode.jsで書いていたものをRustにしたと聞いたぞ。
660デフォルトの名無しさん
2021/05/15(土) 15:23:50.02ID:TrqVEcq2 全部書き直すのは逆に効率悪そう
速度的にキツイ場合のみでいいんじゃないか?
速度的にキツイ場合のみでいいんじゃないか?
661デフォルトの名無しさん
2021/05/15(土) 15:32:34.68ID:H/3gPTTR どちらかといえば速度よりも変更頻度が動機になると思う
静的チェックツールも増えてはいるけどコンパイル型はいじる時の安心感が違う
静的チェックツールも増えてはいるけどコンパイル型はいじる時の安心感が違う
662はちみつ餃子 ◆8X2XSCHEME
2021/05/15(土) 15:37:59.52ID:pVi51x8H >>660
言語を跨いで呼出すときはその境界で色々な処理が挟まったりもするので、
まだらに入り乱れるような形になるとそれはそれで実行性能の足を引っ張ることもある。
状況次第なので一概には言えないけど、言語を変更すると決めたなら
そこそこ大きい単位で乗り換えるのが妥当な場合は結構あると思うよ。
言語を跨いで呼出すときはその境界で色々な処理が挟まったりもするので、
まだらに入り乱れるような形になるとそれはそれで実行性能の足を引っ張ることもある。
状況次第なので一概には言えないけど、言語を変更すると決めたなら
そこそこ大きい単位で乗り換えるのが妥当な場合は結構あると思うよ。
663デフォルトの名無しさん
2021/05/15(土) 17:32:17.46ID:jwQMP5Oj664デフォルトの名無しさん
2021/05/15(土) 18:53:39.15ID:IpomZGOJ >>642
MSがdotnet対応のRust#出したらUnityワンチャンあるんやない?
MSがdotnet対応のRust#出したらUnityワンチャンあるんやない?
665デフォルトの名無しさん
2021/05/15(土) 19:10:58.08ID:Y+SvMVkX そこはRust/CLIで。
666デフォルトの名無しさん
2021/05/15(土) 21:52:45.98ID:TrqVEcq2 GCのあるrustに存在意義などない
667デフォルトの名無しさん
2021/05/15(土) 22:13:28.16ID:Y+SvMVkX GCとデストラクタが共存するC++/CLIはなかなか興味深い言語だった。
668デフォルトの名無しさん
2021/05/16(日) 11:00:47.47ID:9EXRd3vl RustのGCって初期はまた復活されるかもーみたいなノリじゃなかったっけ?
669デフォルトの名無しさん
2021/05/16(日) 11:12:01.38ID:SPtqbmz9 RC関連についてはやるとか?
670デフォルトの名無しさん
2021/05/16(日) 12:07:45.66ID:MDYO1Tug @ pointerとか ~ pointerとかあった頃の話?
671デフォルトの名無しさん
2021/05/16(日) 15:06:48.66ID:JH7fFMWR672デフォルトの名無しさん
2021/05/17(月) 10:53:44.01ID:ZSkTvtbm rustが覇権を取るにはPHPみたいにドキュメントの翻訳をたくさん作ること
そしてサンプルコードを盛り込むこと
そしてサンプルコードを盛り込むこと
673デフォルトの名無しさん
2021/05/18(火) 19:40:20.00ID:A1yOEMnk >2021 Editionは2021年10月にリリースされる。今回のエディションは「Rustの使用感を大きく改善する」ものになるという
あんまり前にこんな発表しないでほしい
やる気なくなる
あんまり前にこんな発表しないでほしい
やる気なくなる
674デフォルトの名無しさん
2021/05/18(火) 19:44:35.79ID:Gj41gD2H675デフォルトの名無しさん
2021/05/18(火) 20:19:55.73ID:Z0RWJbQc 所有権は移動するときのほうにマークが出るべきなんじゃあ
676デフォルトの名無しさん
2021/05/19(水) 07:47:56.56ID:X700JkCT まぁコストかかるのはコピーだし
677デフォルトの名無しさん
2021/05/19(水) 08:05:05.13ID:o3bqBTNO Rustの真似をしようとする言語がないのがふしぎだ
678デフォルトの名無しさん
2021/05/19(水) 12:30:25.52ID:HmkTJiD6 https://en.m.wikipedia.org/wiki/Rust_(programming_language)
wikipedia見ただけだけど Crystal, Elm
wikipedia見ただけだけど Crystal, Elm
679デフォルトの名無しさん
2021/05/19(水) 12:30:46.25ID:HmkTJiD6 など影響を与えた言語は列挙されてた
680デフォルトの名無しさん
2021/05/19(水) 12:42:47.10ID:9T1L9lvJ >>678
Elmのどこが?と思ってソースを読んだら
関数型言語なら大体持ってるEither型の名前を Result, Ok, Error にしたところがRust由来とな
うーむ持ってきたのは名前だけなのにInfluencedか
Elmのどこが?と思ってソースを読んだら
関数型言語なら大体持ってるEither型の名前を Result, Ok, Error にしたところがRust由来とな
うーむ持ってきたのは名前だけなのにInfluencedか
681デフォルトの名無しさん
2021/05/19(水) 12:59:40.27ID:u9Tr9lyP682デフォルトの名無しさん
2021/05/19(水) 13:11:21.07ID:bDX8SBSl 所有権の考え方を採用している言語としてはC++などがあります
683デフォルトの名無しさん
2021/05/19(水) 14:00:04.90ID:NOe9g/vN まあインスタンスの共有については何らかの言語サポートが入ってもおかしくないかもね
684デフォルトの名無しさん
2021/05/20(木) 01:09:22.49ID:WwVMFHF+ DにもOwnership入ったとか小耳に挟んだだけなら
685デフォルトの名無しさん
2021/05/20(木) 17:03:02.09ID:VKAk8Olu686デフォルトの名無しさん
2021/05/20(木) 17:06:31.55ID:13olK3Lw >>685
UIがReactというのが残念
UIがReactというのが残念
687デフォルトの名無しさん
2021/05/20(木) 18:20:18.69ID:PiC1UW/o 逆に何ならいいんだよ
688デフォルトの名無しさん
2021/05/20(木) 18:33:43.55ID:UXe9/StR GUIフレームワークをRustで作るうまみあまりなさそう
689デフォルトの名無しさん
2021/05/20(木) 19:39:25.12ID:QrP75Wi1 Rustで作ってあるなら絶対大丈夫だな!
690デフォルトの名無しさん
2021/05/20(木) 22:57:01.82ID:HbCDuKW4 設計がクソだとダメ
ダメなヤツはなにやってもダメ
ダメなヤツはなにやってもダメ
691デフォルトの名無しさん
2021/05/21(金) 11:45:49.77ID:r1IBz1vL >>538
(1)もちろん例外を使わずとも関数呼び出し等がエラー値を返すことで全て実現できます
(2)ところがエラー値が返ってくると毎回if文やmatch等でエラー時はそこですぐreturnする等の処理を書く必要があって面倒かつコードが醜いため例外の使用が好まれました
(3)Rustでは関数の返り値型をResult<T,E>とすることに加えて「?」オペレーター(旧try!マクロ)を使うことで(2)の処理を自動化しました
つまり関数等呼び出し毎にifやmatch等で返り値エラーチェック&returnの記述をしなくても末尾に「?」を記述するだけで済みます
これでチェーンも出来て具体的には
b = a.hage()?.hige()?.hoge()?
と書くだけでhage()でエラーが返れば早期エラーreturnしますしhige()やhoge()でエラーでも同様です
関数の返り値型がResult<T,E>であることが使用条件です
これはもちろん正常値の<T>型とエラー<E>型のenumです
これらにより関数を多段に深く呼び出していても深い所でのエラーがすぐにreturnを多段にしてエラーが戻って来ます
したがってRustでは例外を使わなくても困らないのです
(1)もちろん例外を使わずとも関数呼び出し等がエラー値を返すことで全て実現できます
(2)ところがエラー値が返ってくると毎回if文やmatch等でエラー時はそこですぐreturnする等の処理を書く必要があって面倒かつコードが醜いため例外の使用が好まれました
(3)Rustでは関数の返り値型をResult<T,E>とすることに加えて「?」オペレーター(旧try!マクロ)を使うことで(2)の処理を自動化しました
つまり関数等呼び出し毎にifやmatch等で返り値エラーチェック&returnの記述をしなくても末尾に「?」を記述するだけで済みます
これでチェーンも出来て具体的には
b = a.hage()?.hige()?.hoge()?
と書くだけでhage()でエラーが返れば早期エラーreturnしますしhige()やhoge()でエラーでも同様です
関数の返り値型がResult<T,E>であることが使用条件です
これはもちろん正常値の<T>型とエラー<E>型のenumです
これらにより関数を多段に深く呼び出していても深い所でのエラーがすぐにreturnを多段にしてエラーが戻って来ます
したがってRustでは例外を使わなくても困らないのです
692デフォルトの名無しさん
2021/05/21(金) 13:37:02.96ID:J6y23PLS すまんrust新参者なんだが、Rust By Exampleのコードいじって勉強してて、以下のコードが疑問に感じられた。
以下のプログラムはmain関数内のif文は実行されないとは明らかなんやが、それでもsubの行でいわゆるuse-after-freeのコンパイルエラーが出る。
これはif文が実行されなくてもdropは実行されるということなんですか?
下のコードみたいにuse-after-freeになるかならないかがif文の条件満たすかどうかによって決まるようなプログラムでも
rustでは一緒くたにuse-after-freeになるとみなされるってことなんですね?
そう考えればそこまで賢くないコンパイラですね
struct Droppable {
id: &'static i8,
}
impl Drop for Droppable {
fn drop(&mut self) {
println!("> Dropping {}", self.id);
}
}
fn sub(d: &Droppable) {
if *d.id == 0 {
drop(d);
println!("> Test {}", d.id);
}
}
fn main() {
let _a = Droppable { id: &0 };
if *_a.id == 1 {
drop(_a);
}
sub(&_a);
}
以下のプログラムはmain関数内のif文は実行されないとは明らかなんやが、それでもsubの行でいわゆるuse-after-freeのコンパイルエラーが出る。
これはif文が実行されなくてもdropは実行されるということなんですか?
下のコードみたいにuse-after-freeになるかならないかがif文の条件満たすかどうかによって決まるようなプログラムでも
rustでは一緒くたにuse-after-freeになるとみなされるってことなんですね?
そう考えればそこまで賢くないコンパイラですね
struct Droppable {
id: &'static i8,
}
impl Drop for Droppable {
fn drop(&mut self) {
println!("> Dropping {}", self.id);
}
}
fn sub(d: &Droppable) {
if *d.id == 0 {
drop(d);
println!("> Test {}", d.id);
}
}
fn main() {
let _a = Droppable { id: &0 };
if *_a.id == 1 {
drop(_a);
}
sub(&_a);
}
693デフォルトの名無しさん
2021/05/21(金) 13:40:53.52ID:J6y23PLS ちなみにコンパイルエラーも貼っておく
Compiling playground v0.0.1 (/playground)
error[E0382]: borrow of moved value: `_a`
--> src/main.rs:22:9
|
18 | let _a = Droppable { id: &0 };
| -- move occurs because `_a` has type `Droppable`, which does not implement the `Copy` trait
19 | if *_a.id == 1 {
20 | drop(_a);
| -- value moved here
21 | }
22 | sub(&_a);
| ^^^ value borrowed here after move //ここでuse-after-free errorが発生!
error: aborting due to previous error
For more information about this error, try `rustc --explain E0382`.
error: could not compile `playground`
To learn more, run the command again with --verbose.
Compiling playground v0.0.1 (/playground)
error[E0382]: borrow of moved value: `_a`
--> src/main.rs:22:9
|
18 | let _a = Droppable { id: &0 };
| -- move occurs because `_a` has type `Droppable`, which does not implement the `Copy` trait
19 | if *_a.id == 1 {
20 | drop(_a);
| -- value moved here
21 | }
22 | sub(&_a);
| ^^^ value borrowed here after move //ここでuse-after-free errorが発生!
error: aborting due to previous error
For more information about this error, try `rustc --explain E0382`.
error: could not compile `playground`
To learn more, run the command again with --verbose.
694デフォルトの名無しさん
2021/05/21(金) 13:44:28.52ID:J6y23PLS Compiling playground v0.0.1 (/playground)
error[E0382]: borrow of moved value: `_a`
--> src/main.rs:22:9
|
| let _a = Droppable { id: &0 };
| -- move occurs because `_a` has type `Droppable`, which does not implement the `Copy` trait
| if *_a.id == 1 {
| drop(_a);
| -- value moved here
| }
| sub(&_a);
| ^^^ value borrowed here after move //ここでuse-after-free errorが発生!
error: aborting due to previous error
For more information about this error, try `rustc --explain E0382`.
error: could not compile `playground`
To learn more, run the command again with --verbose.
見やすくした
error[E0382]: borrow of moved value: `_a`
--> src/main.rs:22:9
|
| let _a = Droppable { id: &0 };
| -- move occurs because `_a` has type `Droppable`, which does not implement the `Copy` trait
| if *_a.id == 1 {
| drop(_a);
| -- value moved here
| }
| sub(&_a);
| ^^^ value borrowed here after move //ここでuse-after-free errorが発生!
error: aborting due to previous error
For more information about this error, try `rustc --explain E0382`.
error: could not compile `playground`
To learn more, run the command again with --verbose.
見やすくした
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【和訳付き】レーダー照射問題 中国軍と自衛隊との“音声データ”公開 中国国営メディア [♪♪♪★]
- 【YouTuber】バイク事故で入院のゆたぼん、振込で「お見舞金」募る [muffin★]
- 「中国側も日本機のレーダーを感知していた」 中国メディアが報道 [♪♪♪★]
- 中国とロシアの爆撃機、日本周辺で共同飛行 [少考さん★]
- 堀江貴文、キャッシュレス非対応の店にモヤッ 『PayPay』立ち上げの人物にまさかの直談判「現金決済しかできないんだけど…」 [冬月記者★]
- 高市早苗首相、消費税減税に後ろ向き 足かせはレジシステム? 「責任ある積極財政」期待高いが [蚤の市★]
- 【悲惨】中国軍が自衛隊に「事前通告」し自衛隊も返答した音声が公開されてしまうwwwこれは高市チェックアウトゕ★2 [597533159]
- 【悲報】昭和天皇「朕のチンチンw」ジャップ「現人神!現人神!」 [616817505]
- 【悲惨】中国軍が自衛隊に「事前通告」し自衛隊も返答した音声が公開されてしまうwwwこれは高市チェックアウトゕ★3 [597533159]
- 【高市朗報】ボーナス、支給される [391924956]
- 【悲報】JA「全然米が売れなくて倉庫を圧迫してる。助けて!」米卸売り業者「安売りしたら赤字になる…助けて!」 [802034645]
- 【高市筋肉】筋トレおじさん、爆増wwwwwwwwwwwwwステロイド使用も増 [308389511]
