Mozilla発のRust言語のスレ
公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust
Web上の実行環境
https://play.rust-lang.org
前スレ
Rust Part7
http://mevius.5ch.net/test/read.cgi/tech/1563114707/
Rust part8
■ このスレッドは過去ログ倉庫に格納されています
2020/01/24(金) 11:47:52.41ID:9oO1hUHl
424デフォルトの名無しさん
2020/04/16(木) 09:03:49.64ID:YGIESbh5 Rust界隈で一番貢献度高いのってAlexとかになるかな?
425デフォルトの名無しさん
2020/04/17(金) 14:41:30.42ID:SjHnVlOc Microsoftに期待してるんだが今はそれどころじゃ無さそう
426デフォルトの名無しさん
2020/04/18(土) 00:35:43.07ID:Dq0Xmd2Y Alexは人の話聞けっていう
427デフォルトの名無しさん
2020/04/18(土) 07:35:23.99ID:mN+EtaBg428デフォルトの名無しさん
2020/04/18(土) 15:23:13.66ID:8wM3wY+l 勉強がてらこちらの二分探索木を真似してみたのですが、コンパイルエラーが出てしまいます。
https://codereview.stackexchange.com/questions/133209/binary-tree-implementation-in-rust
playgroundで試してみた結果がこれです。
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=fc1fe0d2a4c39c6b28d017539419fa2a
どうやら古いRustならコンパイルが通るようなのですが、今のRustでコンパイルを通すにはどうすればよいのでしょうか?
https://codereview.stackexchange.com/questions/133209/binary-tree-implementation-in-rust
playgroundで試してみた結果がこれです。
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=fc1fe0d2a4c39c6b28d017539419fa2a
どうやら古いRustならコンパイルが通るようなのですが、今のRustでコンパイルを通すにはどうすればよいのでしょうか?
429デフォルトの名無しさん
2020/04/18(土) 18:14:53.19ID:EW6Y9RQI Alexが人の話聞かないってこと?
430デフォルトの名無しさん
2020/04/19(日) 10:46:13.87ID:8Q+7ObaB ダメ出しよろ https://ideone.com/fswv4P
431デフォルトの名無しさん
2020/04/19(日) 12:14:31.72ID:lAlWodFD 非常に良いと思います。flagの意図を読み解くのが少し難しいくらいです。
432デフォルトの名無しさん
2020/04/20(月) 08:24:43.01ID:JR6Mr590 確かにflagが読みづらいからコメントは欲しいかな
個人的にはuse Exp::*;とExp::V => Exp::Valueにするのとテストケース増やしてmod testsにするかな
let exp = Value("MITSU").add(Value("MITSU")).add(Value("MITSU")).eql(Value("CORONA"));
let solver = Solver::new(exp);
// prints solved exp
solver.solve();
最初のインスタンスは読みにくいからこうするかも、それかマクロかビルダー作るか
個人的にはuse Exp::*;とExp::V => Exp::Valueにするのとテストケース増やしてmod testsにするかな
let exp = Value("MITSU").add(Value("MITSU")).add(Value("MITSU")).eql(Value("CORONA"));
let solver = Solver::new(exp);
// prints solved exp
solver.solve();
最初のインスタンスは読みにくいからこうするかも、それかマクロかビルダー作るか
433デフォルトの名無しさん
2020/04/23(木) 19:29:00.20ID:WjWrG05V トレイトって機能を追加するときどういう機能であるかの特徴を一見して分かりやすくするためだけのもの?
434デフォルトの名無しさん
2020/04/23(木) 20:53:30.42ID:87GHMCpD 振る舞いや
435デフォルトの名無しさん
2020/04/23(木) 22:36:03.84ID:5udoMUF9436デフォルトの名無しさん
2020/04/25(土) 02:58:36.79ID:FXjmUrQ8 これライフタイム記述を省略できないのなんで? https://git.io/JfL6t
437デフォルトの名無しさん
2020/04/25(土) 21:29:12.23ID:2AkpFzKs 省略してコンパイラ通るけどstableは無理なん?
438デフォルトの名無しさん
2020/04/26(日) 00:34:16.68ID:eoUYVhAX 関数内で同じ一連の処理を複数回実行するときマクロにまとめるのが一般的?それともクロージャ?
他にやりかたある?
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=30449f979231232b68016cab5cd1fb1e
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=e5fc7f66785bb3794df19104d5c479ff
他にやりかたある?
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=30449f979231232b68016cab5cd1fb1e
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=e5fc7f66785bb3794df19104d5c479ff
439デフォルトの名無しさん
2020/04/26(日) 01:44:31.54ID:bgNhzTiH440デフォルトの名無しさん
2020/04/26(日) 01:49:37.98ID:bgNhzTiH https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=b03bef5cb6f98821032c5fb1cce618a1
441デフォルトの名無しさん
2020/04/26(日) 08:01:37.17ID:eoUYVhAX そのコードは実際に使うコードじゃなくてさあ、変数が何個もあったりすると関数切り出しは引数が地獄になるじゃん
442デフォルトの名無しさん
2020/04/26(日) 11:00:13.57ID:bgNhzTiH その例でマクロかクロージャの二択ならクロージャだけど
>>438のは外側の変数をキャプチャすることで複雑化してるから&tangoを渡すようにする
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=ec760be4190e2ad4ab21fbea3c84b0ed
そうすると結局クロージャも関数と同じように適切なシグニチャを考える必要があるから
関数化に比べて楽ってことはないんじゃないかと思う
>>438のは外側の変数をキャプチャすることで複雑化してるから&tangoを渡すようにする
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=ec760be4190e2ad4ab21fbea3c84b0ed
そうすると結局クロージャも関数と同じように適切なシグニチャを考える必要があるから
関数化に比べて楽ってことはないんじゃないかと思う
443デフォルトの名無しさん
2020/04/26(日) 12:20:05.30ID:9haVb0dh Rustの問題集みたいなのってあったりする?
444デフォルトの名無しさん
2020/04/26(日) 12:50:17.90ID:9haVb0dh この連休である程度かけるようになりたい
445デフォルトの名無しさん
2020/04/26(日) 14:52:26.46ID:WcQXqCZk 連休だけでRustかけると思うことが間違ってるよ
446デフォルトの名無しさん
2020/04/26(日) 15:59:36.18ID:bgNhzTiH 公式のGithubにrustlingsっていう簡単な練習問題がある
The Bookを読んだ後に基本文法をおさらいしたい人向け
https://github.com/rust-lang/rustlings
The Bookを読んだ後に基本文法をおさらいしたい人向け
https://github.com/rust-lang/rustlings
447デフォルトの名無しさん
2020/04/26(日) 16:01:54.22ID:9haVb0dh >>446
うおおおおおおサンクス
うおおおおおおサンクス
448デフォルトの名無しさん
2020/04/27(月) 05:09:42.36ID:4dCrlHPD ↓Vecだと動くのに配列にするとコンパイルできないの何で?
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=6321129e5cc3853ef1421d706e19a136
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=6321129e5cc3853ef1421d706e19a136
449デフォルトの名無しさん
2020/04/27(月) 06:06:02.00ID:9c9dxgXm 配列にinto_iterしてもmoveされずに参照が返るから
450デフォルトの名無しさん
2020/04/27(月) 09:24:11.80ID:xj40wisa rustいつのまにか蟹のイメージになってるけど、オライリーの影響?それとももっと前から何かあるのかな?
451デフォルトの名無しさん
2020/04/27(月) 09:35:35.74ID:qLbh0tK5 よくしらんけどこれじゃね?
https://rustacean.net/
https://rustacean.net/
452デフォルトの名無しさん
2020/04/27(月) 12:48:32.95ID:vsE9eV5m let mut heap = BinaryHeap::new();
heap.push(10);
heap.push(9);
heap.push(20);
for x in &heap {
println!("{:?}", x);
}
これでバイナリヒープすると
20
9
10
ってなるんだけどバグ?
heap.push(10);
heap.push(9);
heap.push(20);
for x in &heap {
println!("{:?}", x);
}
これでバイナリヒープすると
20
9
10
ってなるんだけどバグ?
453デフォルトの名無しさん
2020/04/27(月) 12:51:07.20ID:On5R6UtW >>448
配列のIntoIteratorは
&[T; N]と&mut [T; N]に対して実装されてるが[T; N]に対しては実装されてないのでmove不可
対してVecのIntoIteratorは
&Vec<T>と&mut Vec<T>だけでなくVec<T>に対しても実装されてるので
moveが必要なコンテキストならIntoIterator for Vec<T>が選択されmove可能
配列のIntoIteratorは
&[T; N]と&mut [T; N]に対して実装されてるが[T; N]に対しては実装されてないのでmove不可
対してVecのIntoIteratorは
&Vec<T>と&mut Vec<T>だけでなくVec<T>に対しても実装されてるので
moveが必要なコンテキストならIntoIterator for Vec<T>が選択されmove可能
454デフォルトの名無しさん
2020/04/27(月) 12:53:27.20ID:ucpPL8Eb >>452
ドキュメントに書いてある通り、iterは適当な順序で出てくるので仕様。
https://doc.rust-lang.org/std/collections/struct.BinaryHeap.html
ドキュメントに書いてある通り、iterは適当な順序で出てくるので仕様。
https://doc.rust-lang.org/std/collections/struct.BinaryHeap.html
455デフォルトの名無しさん
2020/04/27(月) 13:16:59.92ID:On5R6UtW >>448
配列でやりたい場合はFooにClone実装してfoo.clone()
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=8fdb065f764ac7a0be3a3de161bfa984
配列でやりたい場合はFooにClone実装してfoo.clone()
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=8fdb065f764ac7a0be3a3de161bfa984
456デフォルトの名無しさん
2020/04/27(月) 14:12:45.55ID:ZRv/ULjO 学術の巨大掲示板群 - アルファ・ラボ
ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など
PS 連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など
PS 連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
457デフォルトの名無しさん
2020/04/27(月) 15:43:57.57ID:vsE9eV5m >>454
thx 見逃してた
thx 見逃してた
458デフォルトの名無しさん
2020/04/27(月) 17:58:08.76ID:4dCrlHPD 配列のIntoIteratorにmoveが実装されてないの何で?
459デフォルトの名無しさん
2020/04/27(月) 18:30:46.65ID:On5R6UtW >>458
詳しいことはよくわからないけど実装が難しかったみたいよ
興味あればこのissue読んでみて
https://github.com/rust-lang/rust/issues/25725
nightly使えばmoveできる機能はあるみたい
https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=6a22ab054f5ec52ea942a1186710a516
詳しいことはよくわからないけど実装が難しかったみたいよ
興味あればこのissue読んでみて
https://github.com/rust-lang/rust/issues/25725
nightly使えばmoveできる機能はあるみたい
https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=6a22ab054f5ec52ea942a1186710a516
460デフォルトの名無しさん
2020/04/27(月) 22:17:40.40ID:e7WQ8CRR >>457
型制約見ればええんやで。
`pub fn iter(&self) -> Iter<T>`は`impl<T> BinaryHeap<T>`。
`impl<T> BinaryHeap<T> where T: Ord,` に`pub fn into_sorted_vec(self) -> Vec<T>`てあるやろ。
rustのOrdは全順序や!
型制約見ればええんやで。
`pub fn iter(&self) -> Iter<T>`は`impl<T> BinaryHeap<T>`。
`impl<T> BinaryHeap<T> where T: Ord,` に`pub fn into_sorted_vec(self) -> Vec<T>`てあるやろ。
rustのOrdは全順序や!
461デフォルトの名無しさん
2020/04/28(火) 01:18:27.68ID:barKq4nx この場合はifを使うのとmatchを使うのとどっちがおすすめ?
if nanika_shori().filter(hoshiimonokana).is_some() {
hoge();
mitsukatta();
} else {
fuga();
mitsukaranakatta();
}
match nanika_shori() {
Some(butsu) if hoshiimonokana(butsu) => {
hoge();
mitsukatta();
}
_ => {
fuga();
mitsukaranakatta();
}
}
if nanika_shori().filter(hoshiimonokana).is_some() {
hoge();
mitsukatta();
} else {
fuga();
mitsukaranakatta();
}
match nanika_shori() {
Some(butsu) if hoshiimonokana(butsu) => {
hoge();
mitsukatta();
}
_ => {
fuga();
mitsukaranakatta();
}
}
462デフォルトの名無しさん
2020/04/28(火) 01:37:40.02ID:aaB86vh6463デフォルトの名無しさん
2020/04/28(火) 02:09:21.04ID:nfkWT3p7 テレワーク中なのか連休入ったせいなのか知らんけど猛者が全部回答してくれるから助かるわ
464デフォルトの名無しさん
2020/04/28(火) 07:51:49.83ID:SJTliuFD >>461
前者
前者
465デフォルトの名無しさん
2020/04/28(火) 11:46:15.82ID:nnss28av >>461
match nanika_shori().filter(hoshiimonokana) {
Some(x) => {…},
None => {…}
}
か
if let Some(x) = nanika_shori().filter(hoshiimononanoka) {…} else {…}
か
boolを返す関数作ってif else
fn are_aruka(hoshiimono: Hoge) -> bool {
match nanika_shori() {
Some(x) if x == hoshiimono => true,
_ => false
}
}
match nanika_shori().filter(hoshiimonokana) {
Some(x) => {…},
None => {…}
}
か
if let Some(x) = nanika_shori().filter(hoshiimononanoka) {…} else {…}
か
boolを返す関数作ってif else
fn are_aruka(hoshiimono: Hoge) -> bool {
match nanika_shori() {
Some(x) if x == hoshiimono => true,
_ => false
}
}
466デフォルトの名無しさん
2020/04/28(火) 12:32:50.40ID:GQyYGa/W filter(...).is_some()
って形はかなり読みにくい
ようは設計が悪い
って形はかなり読みにくい
ようは設計が悪い
467デフォルトの名無しさん
2020/04/29(水) 02:11:05.39ID:mpM8GrXg ResultやOptionが複数ネストしたやつをイイカンジにmapとかやれるか
468デフォルトの名無しさん
2020/04/29(水) 18:51:17.07ID:F+b7zcTP flatMap 的な?
469デフォルトの名無しさん
2020/04/29(水) 20:08:03.11ID:lsvcqJYy Rustやる前に軽くScalaとかHaskellやっとけば
コレクションライブラリ見たときに「あっ、これ進研ゼミでやったところだ!」って
なるから理解が早いよ
コレクションライブラリ見たときに「あっ、これ進研ゼミでやったところだ!」って
なるから理解が早いよ
470デフォルトの名無しさん
2020/04/29(水) 23:56:45.59ID:VSyDHJCJ ゼミ講習の変態度が高過ぎるわ
471デフォルトの名無しさん
2020/04/30(木) 05:16:29.11ID:yR2jzUGm このコードがコンパイル通って実行できて期待した実行結果にならない
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=4472067bedcd681b8154620b3023f278
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=4472067bedcd681b8154620b3023f278
472デフォルトの名無しさん
2020/04/30(木) 11:08:02.17ID:aC6sOq5z >>471
警告を消しなよ
警告を消しなよ
473デフォルトの名無しさん
2020/05/01(金) 05:37:23.81ID:+OCTqmPQ HashMapでキーを参照にしたときキーがアドレス値にならないのなんで?
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=9f33505748c782a7b5a2cd22481e5b68
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=9f33505748c782a7b5a2cd22481e5b68
474デフォルトの名無しさん
2020/05/01(金) 09:19:46.17ID:xXuuls7c >>473
&strのEqはアドレス比較じゃないから
&strのEqはアドレス比較じゃないから
475デフォルトの名無しさん
2020/05/01(金) 10:58:05.97ID:gc2qK0CV476デフォルトの名無しさん
2020/05/01(金) 12:59:00.58ID:wrmDV0oq Rustは、Releaseモードでも、Runtimeをstatic linkする場合は、61MB、
dynamic linkする場合は、8.2MBになるらしい。
dynamic linkで、さらにサイズ重視最適化した場合、4.6MB、strip した場合、
3.1MBになる。
でも、C++に変わる言語を標榜するにしては大きすぎる。
https://www.quora.com/Why-are-the-Rust-and-Go-binaries-so-large-compared-to-C-or-Pascal
dynamic linkする場合は、8.2MBになるらしい。
dynamic linkで、さらにサイズ重視最適化した場合、4.6MB、strip した場合、
3.1MBになる。
でも、C++に変わる言語を標榜するにしては大きすぎる。
https://www.quora.com/Why-are-the-Rust-and-Go-binaries-so-large-compared-to-C-or-Pascal
477デフォルトの名無しさん
2020/05/01(金) 13:58:13.26ID:xXuuls7c >>476
>Rustは、Releaseモードでも、Runtimeをstatic linkする場合は、61MB、
>dynamic linkする場合は、8.2MBになるらしい。
Debugモードが61MB
Releaseモード(デフォルト設定)が8.2MB って書いてるよ
それにlinkするのはRuntimeではない
もう少しちゃんと読もう
>Rustは、Releaseモードでも、Runtimeをstatic linkする場合は、61MB、
>dynamic linkする場合は、8.2MBになるらしい。
Debugモードが61MB
Releaseモード(デフォルト設定)が8.2MB って書いてるよ
それにlinkするのはRuntimeではない
もう少しちゃんと読もう
478デフォルトの名無しさん
2020/05/01(金) 13:58:40.83ID:i4mzH/oB479デフォルトの名無しさん
2020/05/01(金) 20:43:43.74ID:suCtdez/480デフォルトの名無しさん
2020/05/01(金) 21:17:00.16ID:iuGoF6Kh https://lifthrasiir.github.io/rustlog/why-is-a-rust-executable-large.html
これとかは結構限界まで削ってる感じかな。ちょっと古いけど。
あと
https://github.com/johnthagen/min-sized-rust/blob/master/README.md
にサイズ最適化したいときのやり方一覧がある。
これとかは結構限界まで削ってる感じかな。ちょっと古いけど。
あと
https://github.com/johnthagen/min-sized-rust/blob/master/README.md
にサイズ最適化したいときのやり方一覧がある。
481デフォルトの名無しさん
2020/05/02(土) 00:00:07.90ID:rieFiUeI release profileでもデバッグシンボル含めてるからprofileオプション安定化までお預けかな。
482デフォルトの名無しさん
2020/05/02(土) 01:05:23.19ID:RJOTvgjs アイデアありませんか?
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=88804aace268a5d6adbdf8a8e4423fe4
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=88804aace268a5d6adbdf8a8e4423fe4
483デフォルトの名無しさん
2020/05/02(土) 02:00:10.73ID:HIdampCl scanでどうでしょ
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=0092b046fa5b3fa9f1aba90d35a93f4a
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=0092b046fa5b3fa9f1aba90d35a93f4a
484デフォルトの名無しさん
2020/05/02(土) 10:05:59.92ID:8Sc54whm お前らおっぱいだって大きいほうが好きなくせに何バイナリのファイルサイズが大きめだからって文句言ってるんだよ
485デフォルトの名無しさん
2020/05/02(土) 10:07:50.85ID:aaZCC6Sm 貧乳が至高
これだけは譲れない
これだけは譲れない
486デフォルトの名無しさん
2020/05/02(土) 11:59:56.20ID:UBE5VHp1 バイナリサイズの話題ってずーっと昔に出てたよな
ここで出たのかどこで見たのか忘れたけど
Why are Rust executables so huge?
https://stackoverflow.com/questions/29008127
これかなぁ?
ここで出たのかどこで見たのか忘れたけど
Why are Rust executables so huge?
https://stackoverflow.com/questions/29008127
これかなぁ?
487デフォルトの名無しさん
2020/05/02(土) 12:05:15.40ID:UBE5VHp1488デフォルトの名無しさん
2020/05/02(土) 15:10:30.93ID:f7vdsp57 let hoge = match s {
"hage" => hage,
"moge"=> moge, // 何かの関数や構造体を返そうとしたがhogeは一意の型しか受け取らないから無理
_=> return
}
loop {
hoge()
}
的な事やろうと色々試したけど、超絶複雑な事になってヤバい匂いしかしない。
ループの外でループ内で呼ぶ関数の分岐を書くのは何かのアンチパターンなのか
そもそも、ループの中でMatch書いても外からイミュータブルな値を渡すの分かってるなら
コンパイラが最適化してループ毎に分岐なんてしないから普通に入れて書けば良い?
"hage" => hage,
"moge"=> moge, // 何かの関数や構造体を返そうとしたがhogeは一意の型しか受け取らないから無理
_=> return
}
loop {
hoge()
}
的な事やろうと色々試したけど、超絶複雑な事になってヤバい匂いしかしない。
ループの外でループ内で呼ぶ関数の分岐を書くのは何かのアンチパターンなのか
そもそも、ループの中でMatch書いても外からイミュータブルな値を渡すの分かってるなら
コンパイラが最適化してループ毎に分岐なんてしないから普通に入れて書けば良い?
489デフォルトの名無しさん
2020/05/02(土) 16:28:13.09ID:0Y98m9EQ >>482
inclusiveなtake_untilは標準では無いみたいだから自分で作るかcrate探すかになるっぽい
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=b74ec6655adc38e1e790a35485eee01c
https://github.com/rust-lang/rust/issues/62208
既存Traitを拡張するのはめんどくさいから
自分ならイテレータを受け取ってイテレータを返す関数で我慢する
inclusiveなtake_untilは標準では無いみたいだから自分で作るかcrate探すかになるっぽい
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=b74ec6655adc38e1e790a35485eee01c
https://github.com/rust-lang/rust/issues/62208
既存Traitを拡張するのはめんどくさいから
自分ならイテレータを受け取ってイテレータを返す関数で我慢する
490デフォルトの名無しさん
2020/05/02(土) 16:54:44.18ID:4YXjnjKT491デフォルトの名無しさん
2020/05/02(土) 16:58:06.87ID:4YXjnjKT あるいはFnとかにして型を揃えれば
loop内の分岐はなくなるかな。
たださっきも書いた通り分岐をなくすことに
それほど意味があるとも思えない。
loop内の分岐はなくなるかな。
たださっきも書いた通り分岐をなくすことに
それほど意味があるとも思えない。
492デフォルトの名無しさん
2020/05/03(日) 03:41:22.86ID:HKq7AyzP こういうパターンマッチの使い方ってマイナー?保守性が悪い?
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=29945c6422cbc643197b73631691211b
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=29945c6422cbc643197b73631691211b
493デフォルトの名無しさん
2020/05/03(日) 14:40:33.37ID:CQw0w+cb >>488
enumで紐つけても結局hogeでmatch使う事になる。
Fnで返すと所謂if文と関数ポインタどっちが早い?的な事になって
最適化するとif文のが早くなる。つまりループの中でMatchしとけば良い。
enumで紐つけても結局hogeでmatch使う事になる。
Fnで返すと所謂if文と関数ポインタどっちが早い?的な事になって
最適化するとif文のが早くなる。つまりループの中でMatchしとけば良い。
494デフォルトの名無しさん
2020/05/03(日) 21:48:29.60ID:zX3s2fU5 rustのenumはsum typeだからjitがあればmegamorphicでもtracingじゃなくてもjit効いて
インラインキャッシュも必要ないからそのままインライン展開出来るんだが、この辺がAOTの限界だな。
まあ、分岐予測外れるような呼び出しなら初めからvtable使うだろう。
Rust/WinRT見てc++と違っていきなりマクロ出てくるからMFCの悪夢が蘇った。
インラインキャッシュも必要ないからそのままインライン展開出来るんだが、この辺がAOTの限界だな。
まあ、分岐予測外れるような呼び出しなら初めからvtable使うだろう。
Rust/WinRT見てc++と違っていきなりマクロ出てくるからMFCの悪夢が蘇った。
495デフォルトの名無しさん
2020/05/03(日) 22:46:23.02ID:zpY+Khfl >>492
ローカルにあるcrateとrustのソースをgrepしてみたがほとんど使われてないね
シグニチャに書くことで可読性が高まるケースであれば使えばいいと思うけど
そうじゃなければ一旦受けてから関数内で分割したほうがよさそう
ローカルにあるcrateとrustのソースをgrepしてみたがほとんど使われてないね
シグニチャに書くことで可読性が高まるケースであれば使えばいいと思うけど
そうじゃなければ一旦受けてから関数内で分割したほうがよさそう
496デフォルトの名無しさん
2020/05/04(月) 11:52:28.65ID:sauq4xLT レンジ自体にマッチしたいんだけど書きかたって今はない?
match 1..3 {
2..3 => println!("2..3"),
1...3 => println!("matched!"),
_ => println!("_"),
}
match 1..3 {
2..3 => println!("2..3"),
1...3 => println!("matched!"),
_ => println!("_"),
}
497デフォルトの名無しさん
2020/05/04(月) 12:22:11.14ID:au6sJ5VU >>496
use std::ops::Range;
match 1..3 {
Range{start: 2, end: 3} => println!("2..3"),
Range{start: 1, end: 3} => println!("matched!"),
_ => println!("_"),
}
use std::ops::Range;
match 1..3 {
Range{start: 2, end: 3} => println!("2..3"),
Range{start: 1, end: 3} => println!("matched!"),
_ => println!("_"),
}
498デフォルトの名無しさん
2020/05/05(火) 02:10:07.89ID:em9v0/Ay >>497
ありがとう。
でもなんで
match 1 {
1...2 => println!("matched!"),
_ => todo!(),
}
こっちのマッチは ... で一個点々多く使わないといけなくなったの?
Range{start: 2, end: 3}をつかうなら1...2じゃなくて1..2でもよかったんじゃ
ありがとう。
でもなんで
match 1 {
1...2 => println!("matched!"),
_ => todo!(),
}
こっちのマッチは ... で一個点々多く使わないといけなくなったの?
Range{start: 2, end: 3}をつかうなら1...2じゃなくて1..2でもよかったんじゃ
499デフォルトの名無しさん
2020/05/05(火) 03:39:54.86ID:ZuBK36Gv ...ってまだ使えるのか。..=に置き換えられたのかと
500デフォルトの名無しさん
2020/05/05(火) 09:01:40.68ID:uTsiWylk >>498
matchのarmでrangeを使うケースはほぼ100%inclusive rangeなので
half openのexclusive rangeとは区別して利便性を上げつつ
不用意なバグをコンパイル時に弾けるようにしたのが理由だと思うよ
>Range{start: 2, end: 3}をつかうなら1...2じゃなくて1..2でもよかったんじゃ
んん?
そもそも「レンジ自体にマッチしたい」ってどういう用途?
matchのarmでrangeを使うケースはほぼ100%inclusive rangeなので
half openのexclusive rangeとは区別して利便性を上げつつ
不用意なバグをコンパイル時に弾けるようにしたのが理由だと思うよ
>Range{start: 2, end: 3}をつかうなら1...2じゃなくて1..2でもよかったんじゃ
んん?
そもそも「レンジ自体にマッチしたい」ってどういう用途?
501デフォルトの名無しさん
2020/05/06(水) 11:12:57.23ID:exILxtx0 Rust の API についてはメソッドのシグネチャとコメントからドキュメントを生成できるけど、
バイナリクレートにユーザー向けのドキュメントを付けるときの作法とかってあるの?
バイナリクレートにユーザー向けのドキュメントを付けるときの作法とかってあるの?
502デフォルトの名無しさん
2020/05/06(水) 22:11:17.73ID:Rwb7Dx/N i32とかにあるdiv_euclidってどういうときに使うものなの?
503デフォルトの名無しさん
2020/05/06(水) 22:52:21.93ID:A+GAumiz >>502
「負数の剰余」で調べると違いが分かるかと。
「負数の剰余」で調べると違いが分かるかと。
504デフォルトの名無しさん
2020/05/07(木) 16:40:36.21ID:82eQknS5 ドキュメントコメントでのassetでのテストとmod testsってどう使い分けたらいいの?
ドキュメントテストすればユニットテスト書かなくていい?
ドキュメントは使用例だけで、assertでのテストって意味なくね?って思ってしまう。無視もできるし
ドキュメントテストすればユニットテスト書かなくていい?
ドキュメントは使用例だけで、assertでのテストって意味なくね?って思ってしまう。無視もできるし
505デフォルトの名無しさん
2020/05/07(木) 17:28:34.50ID:k47Mu4KT >>504
ドキュメントテストはドキュメントであってテストではない。
説明上分かりやすいならassertしてもいいけど、別になくてもいい。
それでもドキュメントテストを通すのは、古いサンプルコードがいつの間にかコンパイル通らなくなっている、というのを防ぐため。
ユニットテストは普通にmod testsで書けばいいよ。
ドキュメントテストはドキュメントであってテストではない。
説明上分かりやすいならassertしてもいいけど、別になくてもいい。
それでもドキュメントテストを通すのは、古いサンプルコードがいつの間にかコンパイル通らなくなっている、というのを防ぐため。
ユニットテストは普通にmod testsで書けばいいよ。
506デフォルトの名無しさん
2020/05/07(木) 18:37:23.38ID:ywncHnjy doit()はclone()が入るとエラーが出るんだけど何で?
TにCloneが必要って出て来るけどTの実体をCloneしないのに必要ないだろJKって感じのエラーなんだが?
これどうしたらいいの?
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=31635004c1ad9fd9e5ba0f859f28ceb0
TにCloneが必要って出て来るけどTの実体をCloneしないのに必要ないだろJKって感じのエラーなんだが?
これどうしたらいいの?
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=31635004c1ad9fd9e5ba0f859f28ceb0
507デフォルトの名無しさん
2020/05/07(木) 19:32:09.83ID:ywncHnjy508デフォルトの名無しさん
2020/05/07(木) 19:52:47.71ID:ywncHnjy これdoit()のget()がTに'static必要ってコンパイル失敗すんだけど
Tを直接扱ってないんだからTに'static要らんだろって感じなんだが?
関数ポインタくらい静的に解決できんだろJK
どうしたらいいんだよ
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=b69fe063a3cc2fae6f1cc7536007fe8e
Tを直接扱ってないんだからTに'static要らんだろって感じなんだが?
関数ポインタくらい静的に解決できんだろJK
どうしたらいいんだよ
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=b69fe063a3cc2fae6f1cc7536007fe8e
509デフォルトの名無しさん
2020/05/07(木) 21:47:17.14ID:82eQknS5510デフォルトの名無しさん
2020/05/07(木) 21:48:25.25ID:TSVqZJLC コンパイル通さずにどうやってassertだけ通すんじゃ
511デフォルトの名無しさん
2020/05/07(木) 22:52:31.79ID:ufUjH0LD >>508
doitのTにstaticを指定すればいい。fn <T:'static> doit ....
doitのTにstaticを指定すればいい。fn <T:'static> doit ....
512デフォルトの名無しさん
2020/05/07(木) 23:07:35.28ID:k47Mu4KT513デフォルトの名無しさん
2020/05/08(金) 15:31:13.15ID:2R+BCvOe なんで型って大文字始まりなのにi32とかは全部小文字始まりになってんの?
初期のデザインミス?
初期のデザインミス?
514デフォルトの名無しさん
2020/05/08(金) 15:47:25.70ID:Pb0t26ee primitiveは小文字で統一したんじゃないの?
515デフォルトの名無しさん
2020/05/08(金) 22:20:21.51ID:UFFnLRtI 0u32
みたいにサフィックスとしても使うし
みたいにサフィックスとしても使うし
516デフォルトの名無しさん
2020/05/09(土) 06:11:48.26ID:gxFlq1V3 Rustみたいに標準ライブラリは最小に留めてるような言語って他にありますか?
それとコンパイラ内部のCargo.tomlにライブラリのバージョン書けば別に最小に留めなくてもと思うんですが、どうでしょうか?
それとコンパイラ内部のCargo.tomlにライブラリのバージョン書けば別に最小に留めなくてもと思うんですが、どうでしょうか?
517デフォルトの名無しさん
2020/05/09(土) 10:20:58.87ID:MmeKQuXy >>516
Lua とか
Lua とか
518デフォルトの名無しさん
2020/05/10(日) 04:53:09.49ID:aajKhScH >>516
どこまでを最小というかによるがC++は似たようなもんじゃないかしら
どこまでを最小というかによるがC++は似たようなもんじゃないかしら
519デフォルトの名無しさん
2020/05/12(火) 08:44:05.53ID:l1cRSbJI これってなんで&mut になんの?
n: mut &i32のほうが差分的にも視覚的にもいいと思うけど、どっかに理由とか書かれてないかな?
fn example(n: &mut i32) {
}
let mut r = &10;
example(mut r);
n: mut &i32のほうが差分的にも視覚的にもいいと思うけど、どっかに理由とか書かれてないかな?
fn example(n: &mut i32) {
}
let mut r = &10;
example(mut r);
520デフォルトの名無しさん
2020/05/12(火) 10:47:54.41ID:yEVh4LKg521デフォルトの名無しさん
2020/05/12(火) 11:12:17.10ID:rr7jvTFY >>519
変数がmutableなのか、immutableなのかと
変数の型がownedなのか、shared referenceなのか、mutable referenceなのかとは別
mutable referenceを表す記号として`&mut`で一塊なのでmut &i32は微妙
n: mut i32みたいに型として意味のないコードを書いて
何が悪いのかわからないってことになりにくい
コンパイラ的にも`&`が先にあったほうが処理が簡単そう
変数がmutableなのか、immutableなのかと
変数の型がownedなのか、shared referenceなのか、mutable referenceなのかとは別
mutable referenceを表す記号として`&mut`で一塊なのでmut &i32は微妙
n: mut i32みたいに型として意味のないコードを書いて
何が悪いのかわからないってことになりにくい
コンパイラ的にも`&`が先にあったほうが処理が簡単そう
522デフォルトの名無しさん
2020/05/12(火) 17:14:57.85ID:pSulPVQF なるほど
523デフォルトの名無しさん
2020/05/12(火) 17:49:29.28ID:jco3JkFf524デフォルトの名無しさん
2020/05/12(火) 18:24:06.26ID:rr7jvTFY■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【速報】日本産牛肉の対中国輸出再開協議が中止 [おっさん友の会★]
- 【次の一手】台湾問題で小林よしのり氏が私見「まさに戦争前夜」「ただちに徴兵制を敷いて、高市支持者を最前線へ」… ★2 [BFU★]
- 【次の一手】台湾問題で小林よしのり氏が私見「まさに戦争前夜」「ただちに徴兵制を敷いて、高市支持者を最前線へ」… ★3 [BFU★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 ★4 [ぐれ★]
- 毛寧(もう・ねい)報道官「中国に日本の水産品の市場は無い」 高市首相の国会答弁に「中国民衆の強い怒り」 [ぐれ★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 ★3 [ぐれ★]
- 【実況】博衣こよりのえちえち雑談🧪★2
- 高市早苗って戦後最悪の総理大臣なのでは🤔? [929293504]
- 【悲報】自民党「聞いてないよー」 [616817505]
- 【実況】博衣こよりのえちえち雑談🧪
- 【高市速報】トヨタ社長、MAGA帽子をかぶって登場し世界を震撼させる [462275543]
- 竹田天皇「ホタテ輸入禁止されても中国以外誰も困らない。中国以外に売ればいいんだから」高市 [931948549]
