公式
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を学びたい人はまず最初に公式のThe Bookを読むこと
https://doc.rust-lang.org/book/
※Rustを学ぶ際に犯しがちな12の過ち
https://dystroy.org/blog/how-not-to-learn-rust
※Rustのasyncについて知りたければ「async-book」は必読
https://rust-lang.github.io/async-book/
※C++との比較は専用スレへ
C++ vs Rust
https://mevius.5ch.net/test/read.cgi/tech/1619219089/
※次スレは原則>>980が立てること
前スレ
Rust part13
https://mevius.5ch.net/test/read.cgi/tech/1636247099/
Rust part14
■ このスレッドは過去ログ倉庫に格納されています
2022/02/12(土) 01:24:16.59ID:XYE+Rws6
2022/02/22(火) 12:24:58.23ID:M+NPwtu0
違う型のvtableがmergeされることもあるみたい
https://rust-lang.github.io/rust-clippy/master/#vtable_address_comparisons
https://rust-lang.github.io/rust-clippy/master/#vtable_address_comparisons
2022/02/22(火) 12:36:19.01ID:Uj7UhjXB
2022/02/22(火) 14:56:23.72ID:S7d5HFwX
>>60
もう少しvtableの情報を詳細にした
let mut file: std::fs::File = std::fs::File::open("/dev/null").unwrap();
let addr_file = addr!(file);
let dyn_file: &mut dyn std::io::Read = &mut file;
という状況で以下が成立
assert_eq!(val!(addr!(dyn_file), 0), addr_file);
let vtable_file = val!(addr!(dyn_file), 1);
assert_eq!(val!(vtable_file, 0), std::ptr::drop_in_place::<std::fs::File> as usize);
assert_eq!(val!(vtable_file, 1), std::mem::size_of::<std::fs::File>());
assert_eq!(val!(vtable_file, 2), std::mem::align_of::<std::fs::File>());
assert_eq!(val!(vtable_file, 3), <std::fs::File as std::io::Read>::read as usize);
assert_eq!(val!(vtable_file, 4), <std::fs::File as std::io::Read>::read_vectored as usize);
つまり型情報が消失したdynにおいてもこのvtableさえ保持していれば正しくトレイトメソッドやデストラクタを呼び出せる
>>65
そのコードだと比較しようとしているのはvtableやそのアドレスではなく
上述コードでのdyn_fileのアドレスを比較しているだけなのでそもそも前提が謎だな
さらにvtableの内容は各型に完全に依存しているからmergeの意味もよくわからない
もう少しvtableの情報を詳細にした
let mut file: std::fs::File = std::fs::File::open("/dev/null").unwrap();
let addr_file = addr!(file);
let dyn_file: &mut dyn std::io::Read = &mut file;
という状況で以下が成立
assert_eq!(val!(addr!(dyn_file), 0), addr_file);
let vtable_file = val!(addr!(dyn_file), 1);
assert_eq!(val!(vtable_file, 0), std::ptr::drop_in_place::<std::fs::File> as usize);
assert_eq!(val!(vtable_file, 1), std::mem::size_of::<std::fs::File>());
assert_eq!(val!(vtable_file, 2), std::mem::align_of::<std::fs::File>());
assert_eq!(val!(vtable_file, 3), <std::fs::File as std::io::Read>::read as usize);
assert_eq!(val!(vtable_file, 4), <std::fs::File as std::io::Read>::read_vectored as usize);
つまり型情報が消失したdynにおいてもこのvtableさえ保持していれば正しくトレイトメソッドやデストラクタを呼び出せる
>>65
そのコードだと比較しようとしているのはvtableやそのアドレスではなく
上述コードでのdyn_fileのアドレスを比較しているだけなのでそもそも前提が謎だな
さらにvtableの内容は各型に完全に依存しているからmergeの意味もよくわからない
2022/02/22(火) 15:27:07.33ID:Uj7UhjXB
空traitなんかは異なる型同士でvtable使い回しできるのでは
あとは全associated fnにデフォルト実装が与えられていて中身が全く同じものとか
いずれにせよLLVMがよしなに最適化してくれるとかなのでは?
あとは全associated fnにデフォルト実装が与えられていて中身が全く同じものとか
いずれにせよLLVMがよしなに最適化してくれるとかなのでは?
2022/02/22(火) 17:06:00.72ID:S7d5HFwX
vtableにはデストラクタも乗ってるようだけどそれも必要ない場合あるもんな
>>67の状況も今後実装が変わったり最適化で消えたり色々ありうるわけだ
いずれにせよ我々は興味本位で語り合ってるだけであり
このあたりの非公開の仕様に依存したコードを書いてはいけないしな
>>67の状況も今後実装が変わったり最適化で消えたり色々ありうるわけだ
いずれにせよ我々は興味本位で語り合ってるだけであり
このあたりの非公開の仕様に依存したコードを書いてはいけないしな
2022/02/22(火) 23:08:55.74ID:uChpKE+n
>>67
>上述コードでのdyn_fileのアドレスを比較しているだけなのでそもそも前提が謎だな
Rc::ptr_eqで単純に比較するとfat pointer内のdataへのpointerとvtableへのpointerの両方が一致してるかのテストになる
>さらにvtableの内容は各型に完全に依存しているからmergeの意味もよくわからない
わかりやすいのは&Tと&mut Tのように可視性のみ違う場合
>上述コードでのdyn_fileのアドレスを比較しているだけなのでそもそも前提が謎だな
Rc::ptr_eqで単純に比較するとfat pointer内のdataへのpointerとvtableへのpointerの両方が一致してるかのテストになる
>さらにvtableの内容は各型に完全に依存しているからmergeの意味もよくわからない
わかりやすいのは&Tと&mut Tのように可視性のみ違う場合
2022/02/22(火) 23:17:56.21ID:WirMN8li
2022/02/22(火) 23:33:33.79ID:uChpKE+n
2022/02/22(火) 23:44:43.85ID:uChpKE+n
>>71
std::ptr::eqでdataへのpointerを比較すれば保証されると思うよ
std::ptr::eqでdataへのpointerを比較すれば保証されると思うよ
2022/02/23(水) 08:40:05.57ID:jDTq074F
プロジェクトのディレクトリの外から
$ cargo run
するときってどうやってプロジェクト (ディレクトリ) を指定するの?
$ cargo run
するときってどうやってプロジェクト (ディレクトリ) を指定するの?
2022/02/23(水) 10:36:44.63ID:gSf/7C4x
2022/02/23(水) 15:08:57.81ID:d/vifWyJ
>>74
用途が違うかもしれんがworkspace配下からなら-p <package-name>で指定できる
用途が違うかもしれんがworkspace配下からなら-p <package-name>で指定できる
2022/02/23(水) 23:58:29.92ID:EqZ7VJsi
>>70
vtableがmergeされるのかどうか
trait定義methodの定数返しと最適化されやすいようにして
さらに &T と &mut T でやってみたがtableは別々になった
まず最初の原因はvtable最初の要素である以下が成立していないためとわかった
assert_eq!(std::ptr::drop_in_place::<&i32> as usize, std::ptr::drop_in_place::<&mut i32> as usize);
ところが--releaseにすると上記は成立するようになった
同様にtrait定義methodも--releaseにすると同じアドレスとなった
つまりこういう実験において--releaseオプションは必須
そしてvtableの内容は全て完全に一致
しかしvtableのアドレス(格納場所)は異なり別々のvtableのままであった
vtableがmergeされるのかどうか
trait定義methodの定数返しと最適化されやすいようにして
さらに &T と &mut T でやってみたがtableは別々になった
まず最初の原因はvtable最初の要素である以下が成立していないためとわかった
assert_eq!(std::ptr::drop_in_place::<&i32> as usize, std::ptr::drop_in_place::<&mut i32> as usize);
ところが--releaseにすると上記は成立するようになった
同様にtrait定義methodも--releaseにすると同じアドレスとなった
つまりこういう実験において--releaseオプションは必須
そしてvtableの内容は全て完全に一致
しかしvtableのアドレス(格納場所)は異なり別々のvtableのままであった
2022/02/24(木) 00:46:54.35ID:rseQo+7Q
LLVMの最適化で何が行われるかrust側では保証できないから >>65 みたいに同一性について保証しないって仕様になっているんだろうね
79デフォルトの名無しさん
2022/02/24(木) 00:52:17.43ID:8HElZ5AU そういえばRustってC++とかFortranみたいに最適化で結果変わる可能性ってあるの?
2022/02/24(木) 00:56:53.49ID:rseQo+7Q
>>77 がその結果の変わる一例では、ってことではない?
81デフォルトの名無しさん
2022/02/24(木) 00:59:33.72ID:8HElZ5AU >>77は内部構造が変わるという話で出力が変わるという話ではないと思っていた
2022/02/24(木) 01:53:13.93ID:9O+r6lMK
>>79
Rustは他の言語と違い、UB (undefined behavior)すなわち未定義動作を基本的に起こさないように安全に設計されている
最適化オプションの有無でもその点は大丈夫
もちろん念のためだが、入力が異なれば結果は変わるし、非同期の実行タイミングは当然保証されないから実行順序に依存するコードは結果が変わり得る
そういうことでないならば結果は同じになる
ちなみにvtableの件は仕様が公開すらされていない内部情報の話
しかもそこに収容される関数のアドレスの値やvtableのアドレスの値というプログラマーが全く気にする必要ない話
だからこれらは変化してももちろん良くてそれを承知の上で盛り上がってるだけ
Rustは他の言語と違い、UB (undefined behavior)すなわち未定義動作を基本的に起こさないように安全に設計されている
最適化オプションの有無でもその点は大丈夫
もちろん念のためだが、入力が異なれば結果は変わるし、非同期の実行タイミングは当然保証されないから実行順序に依存するコードは結果が変わり得る
そういうことでないならば結果は同じになる
ちなみにvtableの件は仕様が公開すらされていない内部情報の話
しかもそこに収容される関数のアドレスの値やvtableのアドレスの値というプログラマーが全く気にする必要ない話
だからこれらは変化してももちろん良くてそれを承知の上で盛り上がってるだけ
83デフォルトの名無しさん
2022/02/24(木) 01:56:10.31ID:8HElZ5AU >>82
よかった。安心したわ。ありがとう
よかった。安心したわ。ありがとう
2022/02/24(木) 14:04:31.52ID:J4Zng4Gd
vtableの話は元々のスタックやヒープの話と関係あったの?
2022/02/24(木) 14:36:03.44ID:rseQo+7Q
関係ないけどスタックやヒープの話よりも面白かった
2022/02/25(金) 09:31:23.23ID:oVhsjzPL
ついに期待のRust 1.59がリリース!
2022/02/25(金) 09:56:57.35ID:Ttq2k6xT
>>86
なにか目玉機能あるの?
なにか目玉機能あるの?
2022/02/25(金) 11:13:21.04ID:q7+lZsL0
asm!とdestructuring assignmentかな
2022/02/25(金) 12:42:45.63ID:eJN5yWKN
来たね
2022/02/25(金) 15:06:17.84ID:5XzVm2I+
inline asm安定化は嬉しい、stableでベアメタルやりやすくなるかも
2022/02/25(金) 16:04:22.84ID:kxjR7eze
2022/02/25(金) 17:28:20.31ID:kxjR7eze
同じやつかもしれんが、スレ違いの指摘を聞かない馬鹿3名引き取ってくれ
ID:u7rOKKj6
ID:iu2arc+w
ID:aDhOSI3t
ID:u7rOKKj6
ID:iu2arc+w
ID:aDhOSI3t
2022/02/25(金) 17:31:49.95ID:hSBNElz8
お膣毛
2022/02/25(金) 17:39:52.83ID:q7+lZsL0
rustのバージョンごとのリリース予定機能ってどこかにまとまってるの?
betaに入ったものはだいたいそのままstableになるから事前にどの機能が来るのか分かると思うんだが
いつもstableリリースのブログ投稿で知るので、もっと早めに知れると嬉しい
betaに入ったものはだいたいそのままstableになるから事前にどの機能が来るのか分かると思うんだが
いつもstableリリースのブログ投稿で知るので、もっと早めに知れると嬉しい
2022/02/25(金) 18:25:23.29ID:clIznFGF
Rust コンパイラのリリースサイクルは六週間という時間で区切ってるから
その時点で確定してるものが入るって感じじゃないの。
次のリリースまでにこれとこれを……というようなマイルストーン方式ではない。
その時点で確定してるものが入るって感じじゃないの。
次のリリースまでにこれとこれを……というようなマイルストーン方式ではない。
2022/02/25(金) 18:45:09.48ID:q7+lZsL0
最近12週間でnightly(master)でstabilizeされた機能一覧とか
最近6週間でbetaに入った機能一覧を知る方法ない?って意図だった
最近6週間でbetaに入った機能一覧を知る方法ない?って意図だった
2022/02/25(金) 18:59:15.48ID:qITSG3O9
Githubのマイルストーン見ればいいんじゃない?
例えば1.60.0だとこれが入る予定なはず
https://github.com/rust-lang/rust/milestone/90?closed=1
例えば1.60.0だとこれが入る予定なはず
https://github.com/rust-lang/rust/milestone/90?closed=1
2022/02/25(金) 19:27:57.07ID:q7+lZsL0
なるほどmilestoneがあったか
relnotesラベルで絞り込むといい感じだ
ありがとう
https://github.com/rust-lang/rust/issues?q=milestone%3A1.60.0+label%3Arelnotes
relnotesラベルで絞り込むといい感じだ
ありがとう
https://github.com/rust-lang/rust/issues?q=milestone%3A1.60.0+label%3Arelnotes
2022/02/25(金) 21:16:51.47ID:kxjR7eze
100デフォルトの名無しさん
2022/03/02(水) 12:22:44.66ID:Pojz7Ujc Electronの代替を目指す軽量なRust製フレームワーク「Tauri」、リリース候補版に到達
https://www.publickey1.jp/blog/22/electronrusttauri.html
Electronの優れた特徴を備えつつ、よりメモリ消費量が小さくファイルサイズもコンパクトで、高いセキュリティを備え、柔軟なライセンスを実現しようと開発されたのが「Tauri」です。
GitHubにはElectronとの比較表が示されています。それによるとLinux版のインストールサイズがElectronで52.1MBのところ、Tauriは10分の1以下のわずか3.1MB。同じくLinux版でのメモリ消費量はElectronが462MBのところ、Tauriは半分以下の180MBとなっています。
起動時間もElectronの0.80秒に対してTauriは0.39秒です。
https://www.publickey1.jp/blog/22/electronrusttauri.html
Electronの優れた特徴を備えつつ、よりメモリ消費量が小さくファイルサイズもコンパクトで、高いセキュリティを備え、柔軟なライセンスを実現しようと開発されたのが「Tauri」です。
GitHubにはElectronとの比較表が示されています。それによるとLinux版のインストールサイズがElectronで52.1MBのところ、Tauriは10分の1以下のわずか3.1MB。同じくLinux版でのメモリ消費量はElectronが462MBのところ、Tauriは半分以下の180MBとなっています。
起動時間もElectronの0.80秒に対してTauriは0.39秒です。
101デフォルトの名無しさん
2022/03/02(水) 13:09:17.24ID:f02FsuUz モバイル版も予定されてるとなるとFlutterにも似てるかな
あっちはモバイルベースのフレームワークだけど
あっちはモバイルベースのフレームワークだけど
102デフォルトの名無しさん
2022/03/02(水) 16:28:42.01ID:GthnxnyS rustで複数のプロセスで「共有メモリ」したい場合ってどうすればいいの?
103デフォルトの名無しさん
2022/03/02(水) 16:53:15.47ID:Bz8WDQhq プロセス間だとCと大して変わらないと思う
libcのmmapとかでアドレスに共有ファイルを割り当ててそのポインタをBoxもどきで包む
Drop時にfreeじゃなくmunmapするBoxっぽい別の型が必要でプロセス間のロックとか考えるともっと面倒くさい
mmapでcrate検索すれば使えるのがあるかもしれない
libcのmmapとかでアドレスに共有ファイルを割り当ててそのポインタをBoxもどきで包む
Drop時にfreeじゃなくmunmapするBoxっぽい別の型が必要でプロセス間のロックとか考えるともっと面倒くさい
mmapでcrate検索すれば使えるのがあるかもしれない
104デフォルトの名無しさん
2022/03/02(水) 17:43:29.63ID:uPKvDIET 基本的には >>103 の言うとおり C と変わらないと思う
shared_memoryというLinuxとWindowsで使えるクロスプラットフォームなcrateもあるみたいだね
ただプロセス間でメモリを共有する場合に複数プロセスから同一領域に対して &mut 参照を作っちゃうと UB にならないかは気になる
shared_memoryというLinuxとWindowsで使えるクロスプラットフォームなcrateもあるみたいだね
ただプロセス間でメモリを共有する場合に複数プロセスから同一領域に対して &mut 参照を作っちゃうと UB にならないかは気になる
105デフォルトの名無しさん
2022/03/03(木) 05:15:49.21ID:CxPtyFsv106デフォルトの名無しさん
2022/03/03(木) 05:38:31.20ID:uxaiIIsi >>105
かなり違うよ?
かなり違うよ?
107デフォルトの名無しさん
2022/03/03(木) 07:53:58.47ID:XBGsBJa3 むしろ、rustでプロセス間通信をする場合に相性が良いのは何か、というのが本質では無いだろうか?
プロセス間共有メモリをrust的に安全になるように包むことは可能なのか?
パイプやソケットの再実装にならないか?
プロセス間共有メモリをrust的に安全になるように包むことは可能なのか?
パイプやソケットの再実装にならないか?
108デフォルトの名無しさん
2022/03/03(木) 08:16:43.34ID:yxmIabOi 本当に共有メモリが必要なのか?って所だよな
ベアメタル開発時のハードウェアみたいに必須のケースもあるけど
ベアメタル開発時のハードウェアみたいに必須のケースもあるけど
109デフォルトの名無しさん
2022/03/03(木) 08:44:34.78ID:y+9ANsMY メッセージキューのほうが安全かね。
速度と手間は犠牲になりそうだけど。
速度と手間は犠牲になりそうだけど。
110デフォルトの名無しさん
2022/03/03(木) 09:15:37.98ID:yKQiCvPK どういう問題を解決したいかという文脈抜きに
どういう手段がいいかを論じても意味ないよ
いわゆるXY problem
どういう手段がいいかを論じても意味ないよ
いわゆるXY problem
111デフォルトの名無しさん
2022/03/03(木) 09:18:31.12ID:QJbsAkty >>107
共有メモリをミューテクスで排他制御するならロックの取得/解放をメモリの取得/解放と同等に扱えるような気はするが
共有メモリをミューテクスで排他制御するならロックの取得/解放をメモリの取得/解放と同等に扱えるような気はするが
112デフォルトの名無しさん
2022/03/03(木) 10:18:45.28ID:sMoqT2I4 volatileアクセスするのが自然なんじゃねーの。
113デフォルトの名無しさん
2022/03/03(木) 16:55:17.18ID:/KrGueou >>112
volataileはプロセス間のリソース共有とは概念的には別の話。
volataileはプロセス間のリソース共有とは概念的には別の話。
114デフォルトの名無しさん
2022/03/03(木) 17:16:17.86ID:P+eyfKB6 少なくともCでは
CON02-C. volatile を同期用プリミティブとして使用しない
ttps://www.jpcert.or.jp/sc-rules/c-con02-c.html
だけど、Rustは同期が保証されるんだっけ?
CON02-C. volatile を同期用プリミティブとして使用しない
ttps://www.jpcert.or.jp/sc-rules/c-con02-c.html
だけど、Rustは同期が保証されるんだっけ?
115デフォルトの名無しさん
2022/03/03(木) 19:04:46.11ID:XBGsBJa3 それはマルチスレッドの話でしょ?
116デフォルトの名無しさん
2022/03/03(木) 19:15:45.62ID:hTxF5AaQ 全ての共有メモリのページアクセスに対して割込みをかけてるならそういう実装も可能だろうけど、現実的には考えにくいだろうw
アホなこと考える前に自分でコード読めよw
アホなこと考える前に自分でコード読めよw
117デフォルトの名無しさん
2022/03/03(木) 19:22:14.52ID:Rf6M0oqn118デフォルトの名無しさん
2022/03/04(金) 11:29:49.34ID:gcV9MtLz >>117
根拠はないけどできると思うよ
根拠はないけどできると思うよ
119デフォルトの名無しさん
2022/03/04(金) 18:24:33.40ID:t2OBVARw で、Tauri使ってみた人いるの?
120デフォルトの名無しさん
2022/03/04(金) 18:45:00.29ID:JMvj/uct >>119
その質問の意図は?
その質問の意図は?
121デフォルトの名無しさん
2022/03/04(金) 20:47:25.90ID:4zB49VIz Rustみたいな標準ライブラリが未熟で安全性のかけらもなく、野良のゴミコードばかりの言語ありがたがって使うアホいないよなw
122デフォルトの名無しさん
2022/03/04(金) 20:50:32.75ID:JMvj/uct >>121
Javaもそう言われてたけどなw20年くらい前
Javaもそう言われてたけどなw20年くらい前
123デフォルトの名無しさん
2022/03/04(金) 20:57:54.90ID:4zB49VIz 20年くらい前のJavaはSunの強力な後押しでつよつよだったからなw
ソフト資産も順当に増えたw 安全性はRustの比じゃないし、らいとわんすらんえびうぇあと嘯いてたw
ソフト資産も順当に増えたw 安全性はRustの比じゃないし、らいとわんすらんえびうぇあと嘯いてたw
124デフォルトの名無しさん
2022/03/04(金) 21:04:31.08ID:e8gLPWot125デフォルトの名無しさん
2022/03/04(金) 21:06:23.95ID:4zB49VIz ぬるぽなどの安全性!?ぬるぽなんて安全そのもので代名詞みたいなもんだろうw
126デフォルトの名無しさん
2022/03/04(金) 21:10:22.89ID:4zB49VIz Rustなんて誰も知りませんよ?
https://trends.google.co.jp/trends/explore?date=today%205-y&q=%2Fm%2F0dsbpg6,%2Fm%2F07sbkfb,%2Fm%2F05z1_
https://trends.google.co.jp/trends/explore?date=today%205-y&q=%2Fm%2F0dsbpg6,%2Fm%2F07sbkfb,%2Fm%2F05z1_
127デフォルトの名無しさん
2022/03/04(金) 21:11:31.69ID:4zB49VIz ;消してなw
128デフォルトの名無しさん
2022/03/04(金) 21:15:18.91ID:2tyOtSaX >>124
それ以外にもJavaは実行時エラー(例外)が多すぎですね
Rustはコンパイル時にエラー検出してくれるものが多いだけでなく
実行時エラーとなるものでもResultやOptionで返すからエラー処理忘れが起きないけど
Javaは忘れていても通ってしまい実行時にレア発生するものだと本運用で例外発生で落ちたり
それ以外にもJavaは実行時エラー(例外)が多すぎですね
Rustはコンパイル時にエラー検出してくれるものが多いだけでなく
実行時エラーとなるものでもResultやOptionで返すからエラー処理忘れが起きないけど
Javaは忘れていても通ってしまい実行時にレア発生するものだと本運用で例外発生で落ちたり
129デフォルトの名無しさん
2022/03/04(金) 21:19:19.87ID:bhso8MNW Rustでも雑にunwrap使ったらpanicで死ぬ可能性あるよね
130デフォルトの名無しさん
2022/03/04(金) 21:20:22.36ID:4zB49VIz そんなこと起きないし
Rustみたいに
誰もコーディングできません
聞ける人いません
ライブラリありません
エラーわかりません
とか言われないw
Rustみたいに
誰もコーディングできません
聞ける人いません
ライブラリありません
エラーわかりません
とか言われないw
131デフォルトの名無しさん
2022/03/04(金) 21:24:24.27ID:yoTd6F0f おじさん芸風変えたのか?
132デフォルトの名無しさん
2022/03/04(金) 21:27:15.64ID:t2OBVARw リリース前にunwrap全部消しとかないと叩かれるの?
133デフォルトの名無しさん
2022/03/04(金) 21:33:51.78ID:4zB49VIz どんな言語でもロジックミスでプログラムが終了することはいくらでもあるw
安全というのはそういう事態が起きてもプログラムがsegmentation faultなどで落ちないことw
よりよい実装方法はあるけど、それはそれw
まあリリース後にpanicで終了するのは製品ならやばいw
安全というのはそういう事態が起きてもプログラムがsegmentation faultなどで落ちないことw
よりよい実装方法はあるけど、それはそれw
まあリリース後にpanicで終了するのは製品ならやばいw
134デフォルトの名無しさん
2022/03/04(金) 21:47:04.33ID:2tyOtSaX >>132
可能な限りunwrap()は避けたほうがよいでしょう
もちろん続行不可能なために意図的にpanic終了させたい場合は別です
ロジック的にここでは絶対にNoneやErrが来ないはず!(と思い込んでいる)ケースもありますが
それならばせめてその理由を記述したexpect()を呼ぶように変えることで
発生時対処やコードをレビューする人にも役立つと思います
可能な限りunwrap()は避けたほうがよいでしょう
もちろん続行不可能なために意図的にpanic終了させたい場合は別です
ロジック的にここでは絶対にNoneやErrが来ないはず!(と思い込んでいる)ケースもありますが
それならばせめてその理由を記述したexpect()を呼ぶように変えることで
発生時対処やコードをレビューする人にも役立つと思います
135デフォルトの名無しさん
2022/03/04(金) 21:49:55.68ID:4zB49VIz unwrapなんていくらでもそこら中で使ってるだろw
流石Rust wwww
流石Rust wwww
136デフォルトの名無しさん
2022/03/04(金) 21:57:04.53ID:2tyOtSaX もちろん誰が見ても起きないとわかる自明な場合はunwrap()でいいと思いますよ
自明でない場合はせめてコメントに理由を残すとよいでしょう
自分で書いたコードでも1年後に「ここでunwrap()大丈夫だっけ?」と忘れてることもありうるためw
自明でない場合はせめてコメントに理由を残すとよいでしょう
自分で書いたコードでも1年後に「ここでunwrap()大丈夫だっけ?」と忘れてることもありうるためw
137デフォルトの名無しさん
2022/03/04(金) 22:05:29.47ID:4zB49VIz そんなのは誰がどんな理由でどう書いたってその人の自由w
他の人がどう思うかを気にするなら、べき論くらいは知っててもいい程度の話w
他の人がどう思うかを気にするなら、べき論くらいは知っててもいい程度の話w
138デフォルトの名無しさん
2022/03/04(金) 22:05:29.91ID:yoTd6F0f unwrapはunwrapで死ぬけどヌルポはしばらく動いてから死ぬという地味な怖さがある
139デフォルトの名無しさん
2022/03/04(金) 22:07:00.39ID:4zB49VIz RustがJavaやC#より安全なわけないだろw 頭悪すぎw
140デフォルトの名無しさん
2022/03/04(金) 22:14:27.75ID:e8gLPWot141デフォルトの名無しさん
2022/03/04(金) 22:51:40.80ID:4zB49VIz unsafeこんもりのRustが安全なわけないだろw
142デフォルトの名無しさん
2022/03/04(金) 23:07:12.52ID:oa4nu3Sp 理由を書かずに同じ言葉繰り返すだけのおじさん
143デフォルトの名無しさん
2022/03/04(金) 23:14:03.66ID:rsYyHWe+ もしかして手元のCコードをRustにベタ移植してる?
コンパイル通すためにunsafeこんもりなら納得できるが
コンパイル通すためにunsafeこんもりなら納得できるが
144デフォルトの名無しさん
2022/03/04(金) 23:23:45.83ID:0+y+EQw3 熱烈なJava信者なのかもな
145デフォルトの名無しさん
2022/03/05(土) 00:20:00.76ID:lbLi/sOl まあいうほど安全だったらもっと早く全てrustに置き換わってるわな。
146デフォルトの名無しさん
2022/03/05(土) 00:22:29.41ID:6Mx0EdLs すまん。セグフォする言語使ってる雑魚おる?
147デフォルトの名無しさん
2022/03/05(土) 00:23:59.45ID:AqnMHu7I ああ、Rustっていう言語ねw
https://mevius.5ch.net/test/read.cgi/tech/1638086359/480
https://mevius.5ch.net/test/read.cgi/tech/1638086359/480
148デフォルトの名無しさん
2022/03/05(土) 02:38:11.66ID:S5Q/+OCY 何ヶ月か前にもいたな。Rustのいう安全とは何かを知る気が一切無いまま、安全じゃないって煽ってたやつが
149デフォルトの名無しさん
2022/03/05(土) 02:50:45.20ID:AqnMHu7I Rustはunsafeを隠蔽し、しかも内包する動機を安全の核とする部分に持つ劇的矛盾言語w
それを安全安全高速と謳って騙ってベアメタル領域に行ってみたり、他スレまでしゃしゃり出るうざさw
マジで迷惑w
firefoxだけで使って大人しくしとけw
それを安全安全高速と謳って騙ってベアメタル領域に行ってみたり、他スレまでしゃしゃり出るうざさw
マジで迷惑w
firefoxだけで使って大人しくしとけw
150デフォルトの名無しさん
2022/03/05(土) 03:34:00.88ID:cFQpklvh ネガキャンしようが
ttps://foundation.rust-lang.org/members/
これが現実w
ttps://foundation.rust-lang.org/members/
これが現実w
151デフォルトの名無しさん
2022/03/05(土) 03:55:08.77ID:AqnMHu7I 俺が出したやつじゃんw
あのときも言ったけど、その辺の巨人は必要のあるニッチな領域を持ってるからバックにいるだけw
あのときからマジでRust推しがウザすぎてRust推すのやめたんだよなw
あのときも言ったけど、その辺の巨人は必要のあるニッチな領域を持ってるからバックにいるだけw
あのときからマジでRust推しがウザすぎてRust推すのやめたんだよなw
152デフォルトの名無しさん
2022/03/05(土) 10:45:20.33ID:RFq7TQA4153デフォルトの名無しさん
2022/03/05(土) 10:45:48.31ID:RFq7TQA4 >>119
今日使うわ
今日使うわ
154デフォルトの名無しさん
2022/03/06(日) 00:17:17.68ID:ea3LwkPH tauri触ってみたけどRust⇔JSの値のやりとりはJSON限定なのかな
Responseのbodyにバイナリデータ入れて返す方法を探してるけど
iframe内で送受信するオプションがあるからできないかもしれない
Responseのbodyにバイナリデータ入れて返す方法を探してるけど
iframe内で送受信するオプションがあるからできないかもしれない
155デフォルトの名無しさん
2022/03/06(日) 02:29:18.30ID:m6vdBUAZ base64
156デフォルトの名無しさん
2022/03/06(日) 12:07:19.24ID:ea3LwkPH 154だけどBuilderのregister_uri_scheme_protocolでいけそう
WebViewのIPCをちょっと勘違いしてた
WebViewのIPCをちょっと勘違いしてた
157デフォルトの名無しさん
2022/03/06(日) 12:57:45.63ID:oRBcPyqI 全く使ってないけど結局js使うんならややこしくなるだけだろw
electronでwasm使ってウンウン唸ってる層にしか刺さらないように見えるのに宣伝うるさすぎw
しかもRust推しの数字操作は常にえげつないw
実効果と桁が違う宣伝効果をタイトルに持ってきちゃうw 詐欺かよw
electronでwasm使ってウンウン唸ってる層にしか刺さらないように見えるのに宣伝うるさすぎw
しかもRust推しの数字操作は常にえげつないw
実効果と桁が違う宣伝効果をタイトルに持ってきちゃうw 詐欺かよw
158デフォルトの名無しさん
2022/03/06(日) 13:11:37.97ID:oRBcPyqI js周りで言えばdenoとか最近どうなん?
わざわざ作り直した挙げ句、「全然速くなってませんでした!!!!少し設定とか出来るから許して…てへw」では困るだろw
いろいろ足りない処理もあるし、ベンチ向けに偏りすぎてると思うけど、後発ならjust-jsとか特定用途で高速化・コンパクト化できている
この差は何なんだろう?
わざわざ作り直した挙げ句、「全然速くなってませんでした!!!!少し設定とか出来るから許して…てへw」では困るだろw
いろいろ足りない処理もあるし、ベンチ向けに偏りすぎてると思うけど、後発ならjust-jsとか特定用途で高速化・コンパクト化できている
この差は何なんだろう?
159デフォルトの名無しさん
2022/03/06(日) 14:19:43.76ID:XU+V9ZSH denoってセキュリティ周りをどうにかするのがモチベーションで高速であることは謳ってないのでは
160デフォルトの名無しさん
2022/03/06(日) 14:25:13.83ID:ea3LwkPH >>157
内部処理もUI周りも全部同じ言語で書いた方が楽って層には敬遠されそうだけど
内部処理はRust、UI周りはHTML+JSの方が書きやすいって層には需要があると思う
electronはよく知らないけどWebViewはバイナリにブラウザ埋め込む感じだから
ブラウザ内でバイナリ実行するwasmとはあまり関係ないかも
内部処理もUI周りも全部同じ言語で書いた方が楽って層には敬遠されそうだけど
内部処理はRust、UI周りはHTML+JSの方が書きやすいって層には需要があると思う
electronはよく知らないけどWebViewはバイナリにブラウザ埋め込む感じだから
ブラウザ内でバイナリ実行するwasmとはあまり関係ないかも
161デフォルトの名無しさん
2022/03/06(日) 15:17:04.79ID:oRBcPyqI >>159
作者のモチベーションがどうというより、ユーザー視点だとわざわざ書き直したにしてはパッとしないってこと
しかも書きっぷりまで変わるんではちょっとね
V8の上側にRust入ってるのになぁ〜w
>>160
> 内部処理はRust、UI周りはHTML+JSの方が書きやすいって層
wasm使う層だよねw
> electronはよく知らないけどWebViewはバイナリにブラウザ埋め込む感じだから
> ブラウザ内でバイナリ実行するwasmとはあまり関係ないかも
埋め込むというかバイナリをくっつけるだけでしょw
包含関係が逆なだけで酷似してるし、問題も似たような問題ばかりw
wasmならwebでそのまま動くが、tauriだとplatform限定されてnativeな分Rust側の速度が速いってだけw
作者のモチベーションがどうというより、ユーザー視点だとわざわざ書き直したにしてはパッとしないってこと
しかも書きっぷりまで変わるんではちょっとね
V8の上側にRust入ってるのになぁ〜w
>>160
> 内部処理はRust、UI周りはHTML+JSの方が書きやすいって層
wasm使う層だよねw
> electronはよく知らないけどWebViewはバイナリにブラウザ埋め込む感じだから
> ブラウザ内でバイナリ実行するwasmとはあまり関係ないかも
埋め込むというかバイナリをくっつけるだけでしょw
包含関係が逆なだけで酷似してるし、問題も似たような問題ばかりw
wasmならwebでそのまま動くが、tauriだとplatform限定されてnativeな分Rust側の速度が速いってだけw
162デフォルトの名無しさん
2022/03/06(日) 15:42:49.31ID:yex+Q2w4 Rustでそんな便利な状況になっているのか
tauriというのをちょっと試してみるかな
tauriというのをちょっと試してみるかな
163デフォルトの名無しさん
2022/03/06(日) 16:43:21.41ID:oq6skpEb tauri自体うんぬんじゃなくて、electronクラスのメジャーミドルにまでRustでの書き換えが浸透してきてるってこと
すなわちRustがシステムプログラミングのデファクトスタンダードになったってことを表すエビデンスが1つ増えた
すなわちRustがシステムプログラミングのデファクトスタンダードになったってことを表すエビデンスが1つ増えた
164デフォルトの名無しさん
2022/03/06(日) 16:58:21.68ID:oRBcPyqI 逆だよw
electronはそもそもjsでアプリを書こうというものであって、ごく一部のクソメジャーアプリを除けばjsの範疇を出ないし、クソメジャーアプリはもうそれ自体がプラットフォームと化してるからカウントできないw
C#で書けば楽に何でも書けるのになんでわざわざHTML+JS+Rustを不自由なフレームまで使って書きたがるのか・・・ユーザーは不便、開発者も面倒とメリットなんて全くないのにw
結局ただの自己満足なんだよね
electronはそもそもjsでアプリを書こうというものであって、ごく一部のクソメジャーアプリを除けばjsの範疇を出ないし、クソメジャーアプリはもうそれ自体がプラットフォームと化してるからカウントできないw
C#で書けば楽に何でも書けるのになんでわざわざHTML+JS+Rustを不自由なフレームまで使って書きたがるのか・・・ユーザーは不便、開発者も面倒とメリットなんて全くないのにw
結局ただの自己満足なんだよね
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国「国連安保理の許可なしに日本攻撃可能」 Xで旧敵国条項に言及… ★7 [BFU★]
- 中国「国連安保理の許可なしに日本攻撃可能」 Xで旧敵国条項に言及… ★8 [BFU★]
- 【千葉】コンビニに尿入りペットボトル並べた疑い、26歳男「むしゃくしゃして」…購入した客が飲もうとしたところ臭いに違和感 [ぐれ★]
- 高市首相が異例の“買春行為の罰則化の検討”に言及…世界では“買う側”に罰則を科すのが先進国のスタンダード ★2 [樽悶★]
- 【サッカー】U-17W杯 日本代表、無念のベスト8敗退… チャンスは多く作ったが仕留め切れず オーストリアに0-1で敗戦 [冬月記者★]
- 中国官製報道「日本経済はもう持たない」にネット民ツッコミ「ニュースだけ見てたら日本はもう百回くらい爆発してる」 [1ゲットロボ★]
- 現役JKのお茶会スレ( ¨̮ )︎︎𖠚ᐝ158
- (*´ω`*)明日の映画なんだけど人数分チケット取っといて!( ・᷄ὢ・᷅ )わかった!みんなで映画行くの楽しみ!
- 【ガチ正論】一般人「中国に規制制裁されて、『中国ムカつく』じゃなくて矛先が『許さんぞ高市』になってる奴、頭おかしいの?」 ★2 [153490809]
- 琴桜が来場所の角番を回避するためには豊昇龍、大の里、安青錦のいずれか1人から勝たないとならない
- シコシコして寝ます
- 【ぺこ専🐰】なんG 兎田ぺこら突発配信実況スレ🏡【ホロライブ▶】
