Rust part15

■ このスレッドは過去ログ倉庫に格納されています
2022/05/12(木) 18:28:20.99ID:cuIcFT6k
公式
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 part14
https://mevius.5ch.net/test/read.cgi/tech/1644596656/
2022/05/20(金) 21:13:38.21ID:zMcvGPNW
>>202
successorsバージョンはシンプルでいいね
2022/05/20(金) 21:27:07.51ID:P7xg55cn
>>190
https://wiki.mozilla.org/Oxidation#Shipped
話題になったServo関連はもちろんとして、他は文字エンコーディングとか言語関連での採用が多いみたいね

https://4e6.github.io/firefox-lang-stats/
行数ではGecko全体の10%程度
208デフォルトの名無しさん
垢版 |
2022/05/20(金) 21:57:08.66ID:j6iPiVjl
RustとC++を学ぼうと思ってるプログラミング初心者です。
両方ともそのうち学ぶとして、どっちを先にした方がいい感じですか?
209デフォルトの名無しさん
垢版 |
2022/05/20(金) 21:59:12.98ID:j6iPiVjl
あ、スレチだったかも...すみません
210デフォルトの名無しさん
垢版 |
2022/05/20(金) 22:06:04.12ID:j6iPiVjl
連投すみません...
C++ vs Rustのスレ終わってたから一応どっちにすべきかここで聞きたい
ちなみに自分の中では
・C++のほうがほんの少しだけ速い
・Rustのほうが書くのとかメモリとか楽
・C++のほうが実行環境とか充実してる
みたいな認識になってます。よろしくお願いします
2022/05/20(金) 23:40:49.05ID:1Ryh5lzf
>>207
ほー
ありがとう
2022/05/21(土) 00:10:36.10ID:gcU5DXZF
>>210
どういう領域のプログラムを作りたいかでどっちが適してるか変わるからもうちょっと学ぶ背景とか教えて
213デフォルトの名無しさん
垢版 |
2022/05/21(土) 01:38:57.59ID:qnjM1Lxc
>>210
仕事で使うほう
2022/05/21(土) 01:45:27.47ID:7bviEaCH
なんのために学ぶのかにもよるけど、なんにせよC言語とJavaScriptはエンジニアなら全員勉強すべき
急いでないなら、そのあとでC++とRustを選んでもいい
2022/05/21(土) 01:46:40.74ID:t6WWJYF7
まぁC言語だよな
2022/05/21(土) 01:58:05.82ID:y9SWDgH5
せっかくRustのスレに来たんだしRustをやりなよ
C++をかじるのはいいけど仕事で使うわけでないなら
じゃじゃ馬を飼い馴らすバッドノウハウを今更学ぶ必要はないよ
217デフォルトの名無しさん
垢版 |
2022/05/21(土) 07:32:51.54ID:yS5lPrM7
回答ありがとうございます…
とりあえずRustにしておこうと思います
2022/05/21(土) 09:16:08.98ID:iurUdiXY
>>217
Rustの入門書をぱらぱらと何冊か見たけど計算の優先順位の話とか普通のプログラム入門は全く書かれてないよね
C++の方は確実に書かれてる

入門はCやC++の方がいいと思うよ
2022/05/21(土) 09:22:23.20ID:iurUdiXY
個人的にRust以外にやったほうがいいと思う言語
C C++(深入りしない) java

多分必用になる(と思われる)言語
javascript python
2022/05/21(土) 09:40:03.63ID:wAUuWoIP
Cをざっと学んでからRustかな
C++は(深入りしない)が重要なんだけど、初心者が自分で判断するのは厳しい
既存の資料もC++98から20まで玉石混交という感じだし
2022/05/21(土) 09:44:15.57ID:iurUdiXY
自分はOOPは学んだほうがいいと思う派なのでRustだけでは不十分だと感じる
絶対業務で必要になるし
C++ java C# 学んだほうがいいと思う
2022/05/21(土) 10:11:16.37ID:gcU5DXZF
いろんなパラダイムの言語を触るのが良いよ
2022/05/21(土) 10:19:06.60ID:5oK/i29u
Rustを学ぶならばほとんどの分野でC++とJavaは不要
C言語は実用とは別に最初に基礎教養として学んでおいたほうがRustの理解が早い
C→Rustも可能だが、その前にスクリプト言語などでオブジェクト指向(のうちインスタンスとメソッド呼び出し等)と、非同期(async/await)をそれぞれ学んでおくと楽だと思う
その場合のスクリプト言語はJavaScript(ただしHTML/CSSに踏み込まなくて済むNode.js)がオススメかな
2022/05/21(土) 10:46:13.19ID:JD6rd3hb
単に習得するためなら Rust を学ぶために他の言語を先に知っておく必要はないが、
C++ を先に使っていると Rust の「ありがたみ」に納得しやすいという意見はあるみたいだね。
まあ C が基礎教養であるというのは私も同意。
2022/05/21(土) 10:50:44.47ID:iurUdiXY
Rustだけを学ぼうとしてもその環境が整ってないんですよ

さっきも書いたけど入門書に演算子の優先順位とかそのレベルの話がどこにも書かれてない
他の言語に乗っかって入門するしかない
2022/05/21(土) 10:59:08.26ID:5oK/i29u
>>224
C++は不要
Cを習得しておけばRustのありがたみがわかる
2022/05/21(土) 11:34:26.44ID:jUaeJjgy
>>225
演算子の優先順位の話はオライリー本には書いてあるよ
プログラミングを初めて学ぶ人間がRustから始めるべきじゃないというのは完全同意だけど
2022/05/21(土) 11:47:35.41ID:vC8/2hE9
ぼくはガベージコレクションが嫌いです
2022/05/21(土) 11:50:19.62ID:KkLFGMWv
オライリー本もヒープとかスタックとか出てくるあたり、CやC++で動的メモリ確保の面倒くささを知ってる人向けだと思う
2022/05/21(土) 11:50:43.88ID:uR6sIAw1
メモリ管理まわりの勉強はcで必須
2022/05/21(土) 11:56:37.53ID:5oK/i29u
逆に考えよう
C→Rustと進むだけで十分であり、何か困ることある?
困ることないよな
232デフォルトの名無しさん
垢版 |
2022/05/21(土) 12:04:35.32ID:CYzzzsUy
ゴミ集めてどうするんだっていう。
2022/05/21(土) 12:06:48.99ID:gyqhSlT2
十分かどうかはさておき
そもそもCをすべきかどうかというと微妙かもしれない
Cしかやってなさそうな人特有の
・変数がたくさんとっちらかった
・変数名が暗号めいてて
・ifやforが多重になってて
・グローバル変数を平気で使っちゃってる
コードみたことあるでしょ
それはそうするしかやり方を知らないから

一方、抽象度の高い言語からやった人は先にそっちに慣れるんで
List(8, 9, 3, 1).sorted.reverse.foreach(print)
こういうふうにスッキリ書けるのを目指してくれる
2022/05/21(土) 12:09:45.76ID:0tb1eDc3
オブジェクト指向がいちばん大事
2022/05/21(土) 12:10:08.62ID:Uoz2jgaJ
格下相手の話だけイキイキするな
2022/05/21(土) 12:12:07.01ID:5oK/i29u
>>233
それは同感で非常に重要
だから最初に>>223でCとJavaScriptを先に学ぶのをオススメと書いた
237デフォルトの名無しさん
垢版 |
2022/05/21(土) 12:39:26.68ID:5HpZ3As+
ありがたみなんて知る必要ないでしょ
典型的な老害だな
2022/05/21(土) 12:39:58.62ID:0jWT+RR4
>>221
C++ と java はやったけど C# 必要ですか?
2022/05/21(土) 13:06:24.69ID:dZzrxVLl
Rustは、プログラミング経験者向けの情報が多い気がするから、PythonとかJavascript辺りをサラッと試してからでも良い気はする。

コンパイルとはとか、型って何?とか。
2022/05/21(土) 14:18:25.43ID:2XTF0B5o
>>235
それな
自演ネタふりの可能性すらある
2022/05/21(土) 14:45:48.56ID:is6KmnjI
いつも同じパターン
質問や相談があると、答えたり情報を出したりせずに、それらをしている人たちをバカにする
コードが出ると、代案コードを出すわけでもなく、とにかく批判のみ行なう
2022/05/21(土) 14:51:09.52ID:/NlDQvZW
プログラミング初心者は言語知識よりも
プログラミングという行為がどういうものなのか
どういうことを考える必要があるかというメタ認知を得ることが最も重要

メタ認知を獲得するために最も効果・効率ともに高い方法は
考えて・書いて・動かして結果を確認するというフィードバックサイクルをとにかく繰り返し回すこと

初心者は上記のサイクルが回しやすい言語から始めると後々の成長が早い
C/C++/Rustはサイクルを回すために越えなければならないハードルが相対的に高いため
現代では初心者向け言語ではない
2022/05/21(土) 14:57:49.13ID:7TYnpeBW
>>241
被害妄想はげしくね?
代案も代替コードもそれなりに出てるよね?
それに悪い物を悪い(汚い物を汚い)というためだけに毎回代案を用意する必要なんて全くないよ
2022/05/21(土) 15:08:42.12ID:d40Kl4Hf
意訳:
ぼくちゃんがかいたさいきょうのコードをひはんしないでくだしゃい
ぼくのかんがえたやつがさいきょうなんでしゅから
2022/05/21(土) 15:15:12.95ID:terB7Bhw
なでしこ(プログラミング言語)も使ってあげて、、
2022/05/21(土) 15:15:33.24ID:lzMNCHOR
お前ら>>205みたいなのにも反応してやれよ
2022/05/21(土) 15:46:51.93ID:zcBlczkH
>>246
前スレがいしゅつ
248デフォルトの名無しさん
垢版 |
2022/05/21(土) 16:45:07.99ID:dBYh2+4n
>>218
そのかかれてるC++入門本のタイトルあげてみろ
249デフォルトの名無しさん
垢版 |
2022/05/21(土) 16:48:39.25ID:dBYh2+4n
>>225
お前、>>218 で *計算*の優先順位って書いてるじゃん。
>>225 でしれっと演算子の優先順位にしてんじゃねーよ。
250デフォルトの名無しさん
垢版 |
2022/05/21(土) 16:54:22.75ID:dBYh2+4n
お前ら新しい言語勉強する時に本読まないの?
たいていの本には想定する読者ってのが最初のほうに書いているだろ。
現在出版されてるRustの本で他の言語全く使った事ない読者を想定してる本はあるのか?
2022/05/21(土) 17:14:51.81ID:is6KmnjI
>>246
Tauriではなくweb-view crateがシンプルで良いと思う
2022/05/21(土) 17:17:44.98ID:is6KmnjI
>>250
新たなプログラミング言語を学ぶために本を読んだことがないのでRustについてもわからん
わざわざ本を買って学習する人は少数派ではないか?
2022/05/21(土) 17:21:24.15ID:7bviEaCH
おれは基本は本を読む派だけど、読まない派のほうが多そう
2022/05/21(土) 17:23:04.81ID:mDh+ij7H
昔は本買うか図書館行くかしかなかったもんね
二十年くらい前からこっちはもう本イランけど
ネットで見れるでしょ何もかも
2022/05/21(土) 17:26:29.76ID:ImS18vsK
最近はもっぱら言語公式のチュートリアル。Rustだと「the book」
2022/05/21(土) 17:33:54.80ID:JD6rd3hb
>>252
必ずしも本でなくてもいいが……。 体系的にまとめられた入門用の文書は読むべきだと思う。
Rust に関して言えば >>1-3 で挙げられているような文書があるからありがたく利用させてもらう。

基礎が身についてない段階で詰まるたびにググるみたいな学び方だと個々の情報の断片を
自分の理屈で勝手に (誤った形で) 結び付けてにっちもさっちもいかなくなってるのはよく見る。
2022/05/21(土) 17:59:31.75ID:WnQbOX9f
確かにこのスレではよく見る
>>112,113
2022/05/21(土) 18:16:32.63ID:5PeJx3n4
複オジは本を読まないのが原因とは違うと思うぞ
本を読んでも自分勝手な理屈を脳内補完してそれが正しいと思い込むタイプ
2022/05/21(土) 18:31:09.43ID:Uoz2jgaJ
>>251
実際使ってるの?
github HEADの最終更新11ヶ月前とかだけど
2022/05/21(土) 18:55:12.40ID:is6KmnjI
>>259
web-view crateは非常にシンプルで
最初のwebviewビルダーと
JavaScript側からのRustの呼び出しと
Rust側でJavaScriptの実行の三つだけをサポート
学習コストもほぼゼロ
だから更新するようなことがほとんど無い
それでも例えばHTMLのonclick等でRust側を呼び出せてRust側で処理してJSで反映ということが出来てうれしい
261デフォルトの名無しさん
垢版 |
2022/05/21(土) 19:02:17.99ID:qnjM1Lxc
>>252
じゃあ >>208 から始まる話題にはお前はおそらく不適切だからレスすんなよ。
2022/05/21(土) 19:12:43.38ID:is6KmnjI
>>261
唐突にポカーンだけど
そういった、人への批判は意味がなく荒れるだけで誰の役にも立たないので止めたほうがいいよ
2022/05/21(土) 19:21:14.01ID:v1GULhnc
たしかに
「そういった人」への批判は意味がなくて、荒れるだけで、誰の役にも立たない
2022/05/21(土) 19:27:36.73ID:tJscH9kk
「そういった」がかかるのは「人」ではなく「批判」じゃないのかな
2022/05/21(土) 19:30:02.17ID:gcU5DXZF
元のレスをもじっただけで
唐突に殴りかかってくる人には何を言っても無駄だよと諭してるだけでは
2022/05/21(土) 19:32:49.23ID:VA28KJC+
多くの人は良い人たちだが
残念ながらこのスレにも他人を叩いたり言いがかりを付けたりするのが好きなアレな人が紛れ込んでいる
2022/05/21(土) 19:43:36.19ID:7bviEaCH
そういうのは反応を見て楽しもうとしてるだけだろうから、無視するしかない
2022/05/21(土) 21:18:46.48ID:3ug0n3Zl
>>260
tauriも同じようなもんじゃないの?
2022/05/21(土) 23:40:28.85ID:GKlgLxBR
今流行のアプリをweb-viewのテストで作ってみたがこんな感じなのか

const HTML: &str = r#"
なぜかHTML部分はセキュリティうんぬん言われて貼れないので略
"#;

fn main() {
struct Fibonacci { index: usize, cur: usize, pre: usize }
let fibonacci = std::sync::Mutex::new(Fibonacci { index: 0, cur: 0, pre: 1 });
let webview = web_view::builder()
.content(web_view::Content::Html(HTML))
.invoke_handler(|webview, arg| {
match arg {
"next" => {
let mut f = fibonacci.lock().unwrap();
(f.index, f.cur, f.pre) = (f.index + 1, f.cur + f.pre, f.cur);
webview.eval(&format!("show({}, {})", f.index, f.cur))?;
},
"exit" => webview.exit(),
_ => unimplemented!(),
};
Ok(())
})
.user_data(()).build().unwrap().run().unwrap();
}
2022/05/22(日) 13:23:37.89ID:kzep88by
MozilaはFirefoxを丸ごとRustに書き換える予定はあるん?
今はまだ一部だけだよねRustになってるの
2022/05/22(日) 14:00:05.26ID:IGyJdnKj
>>270
そうなの?
2022/05/22(日) 14:06:50.95ID:1cbV2u9G
FirefoxはレンダリングエンジンをRustでゼロから作ってるんじゃないの?
2022/05/22(日) 14:11:38.83ID:s/f+VQic
自分で確かめて
https://github.com/mozilla/gecko-dev
2022/05/22(日) 14:14:17.72ID:pc68DccV
servoはまだ実験段階だったと思う
2022/05/22(日) 14:54:56.44ID:kzep88by
>>273
ありがとう~
2022/05/22(日) 15:29:45.38ID:srSb/t9O
>>270
特にそういう予定はないと思う
servo自体も別に次世代Firefoxを目指してるとかではなく、Rustでwebブラウザを書く実験プロジェクトという感じ
その実験でうまく行ったコンポーネントを徐々にFirefoxに移植していっている
2022/05/22(日) 15:57:34.13ID:pc68DccV
アプローチとしては正しい姿なんだろうな
2022/05/22(日) 17:29:35.11ID:1mUE50i3
暇を持て余した神々の遊び

servoと言うよりモンスターエンジンだね…
2022/05/22(日) 17:37:14.17ID:7nmc6Bff
>>270
C++で書かれてる部分は置き換えられるかも知れないけどJSで書かれてる部分までは置き換えしないんでないかな
2022/05/22(日) 19:19:39.37ID:9fWZc0TE
JSとか言ってるのは君だけだと思うよ
2022/05/22(日) 19:22:44.24ID:7nmc6Bff
>>280
FirefoxではC++と同じくらいJS使われてるよ
https://www.openhub.net/p/firefox/analyses/latest/languages_summary
2022/05/22(日) 19:25:56.61ID:nrxT1a+p
JSの部分を置き換えるなんてはなから誰も思ってないってことだと思うが
2022/05/22(日) 19:26:01.69ID:LKVhbTwj
意訳すると「JSで書かれてる部分まで置き換えるとか言ってるのは君だけだと思うよ」かな?
言ってないね
2022/05/22(日) 19:29:03.65ID:7TIjBb30
>>282
正解

>>283
アホ
JSで書かれてる部分まで置き換えるかどうかとか言ってるのは君だけだと思うよ
2022/05/22(日) 19:33:12.87ID:LKVhbTwj
>>284
じゃ>>280で「言ってる」とか書くな
ボケ
2022/05/22(日) 19:46:00.83ID:u+qheqhP
>>285
はあ?
JSって言ってるよね?
バカなの?

>>279 JSで書かれてる部分までは置き換えしないんでないかな
2022/05/22(日) 19:56:58.26ID:nleMAmaj
>>270 が「Firefox を "丸ごと" 書き換える」と言っていたので全部はRustにならないよと伝えたんだけどなんかお気に召さなかった?
288デフォルトの名無しさん
垢版 |
2022/05/22(日) 20:16:58.99ID:KMOjS2oh
>>270が言うのはservoのことでquantumの動機がcssパーサrustで書いたら
安全だったからC++で書かれたコンポーネント置換しよだからjs出る余地ないじゃん。
>>282で終わった話。
2022/05/22(日) 20:17:09.14ID:M3jNarf6
そうだね、そんなふうに言われたらシェルスクリプトやMakefileまでrustで置き換えるんじゃないかって思っちゃうよね。


馬鹿なん?
2022/05/22(日) 20:36:16.46ID:7nmc6Bff
FirefoxはXULのイメージがあってJSも主要な構成要素だと思ってたから変なレスつけちゃったね
皆さんの機嫌害しちゃって申し訳ない
2022/05/22(日) 20:54:23.92ID:KMOjS2oh
よく見たらID変えて暴れてるやつまだ居座ってるのか。

>>290
XULはだいぶ前に死んだよ。
XULRunnerが単体で利用困難な問題が解決できなくて存在意義を失った。
2022/05/22(日) 22:32:56.13ID:7nmc6Bff
>>291
XUL完全になくなったの?
XBLは完全に消えたって聞いたけどXULは細々と生き残ってるものだと思っていた
293デフォルトの名無しさん
垢版 |
2022/05/23(月) 01:12:40.07ID:436cwmll
>>290
ほんと反省しろよ
2022/05/23(月) 02:27:31.54ID:n+tkR/ue
反省してま~す
2022/05/23(月) 19:27:40.26ID:qJLEBqNZ
>>189
おまえら全員そうだがフィボナッチ数列でusize固定はおかしいだろ
コード自体は問題ないが <T: Zero + One + CheckedAdd> を付けろ
あとは0と1をT::zero()とT::one()へ置き換えればi8型からBigUintまで何でも動作するようになる
https://play.rust-lang.org/?edition=2021&gist=929f3df48db39182558dfad6fe8d1cda

さらに今回はfrom_fn()利用をそのままsuccessors()利用へ変換できるので見やすくなる
fn fibonacci_iter<T: Zero + One + CheckedAdd>() -> impl Iterator<Item = T> {
let mut oq = Some(T::one());
iter::successors(Some(T::zero()), move |p| {
let q = oq.take()?;
oq = q.checked_add(p);
Some(q)
})
}
ちなみにCloneを要求しないためBigIntなどでも無駄なコスト増とならない

>>202
そのコードは暗黙のコピーが発生している
from_fn()使用版のコードはcurrがキャプチャ変数なので「let n = curr?;」でコピー発生
successors()使用版のコードはクロージャ引数「|&curr: &usize|」の「&」でコピー発生
usizeならば問題はないがBigIntなどでそのコードは動かないので劣る
2022/05/23(月) 19:52:54.51ID:aUQlcplw
暗黙のコピー発生って気にするべき?
!Copyならコンパイルエラーになるしこれまで気にしたことなかった

あとcurrはmoveでキャプチャされるからcurr?で発生するのはmove(とそれに伴うmemcpy)だけど、moveのコストも気にすべき?
2022/05/23(月) 20:00:24.28ID:pMTVA02Y
>>296
それは逆
そのキャプチャされた変数はクロージャが呼ばれるたびに何度も使われる
つまりムーブされてはいけない、つまりムーブ禁止となる
したがって n = curr? で currの中身は nへムーブされずコピーとなる
2022/05/23(月) 20:11:34.97ID:aUQlcplw
>>297
2022/05/23(月) 20:12:20.25ID:PbQSFqOo
>>296
必ずCopy前提の型しか扱わないときは気にしなくていい
しかし今回は!Copyの数値型でも動かないと話にならないからコピーが起きるコードを避けないと
2022/05/23(月) 20:19:20.85ID:aUQlcplw
>>299
!Copyの場合はコンパイルエラーになるからわざわざ人間が注意を払う必要はないと思うが、気にすべき?
usizeしか使わなくてもTに置き換えた場合を想定してコードを書くべきということ?
2022/05/23(月) 20:27:05.01ID:PbQSFqOo
>>300
u128を使ってもf(200)がオーバフローするような今回の案件でCopy型が前提のコードはよくない
案件次第だけど今回はコピーの有無を気にすべき案件
2022/05/23(月) 20:43:27.72ID:4RywOifH
>>295
自分のレスに他人のふりしてレスするキチガイ汚コーダーこと複オジさんちぃーすっ
2022/05/23(月) 20:49:26.67ID:iRCkPDCQ
>>296
それはmoveの意味を間違えているぞ
>>202のcurr?はコピーが発生する
FnOnceじゃないんだからcurrの値がmoveされたら次に使えなくなる
move禁止となりCopy型ならコピーが発生し!Copy型ならエラーとなるコード
2022/05/23(月) 21:10:50.44ID:aUQlcplw
>>301
copyを気にするのではなくusize or BigIntのどちらを使うべきか意識すべきと解釈した
usizeで良い場合はcopyは気にせずして良い

>>303
FnOnceかFnMutかFnかは関係なくて
moveなclosureでキャプチャしたらmove発生するよ
moveでキャプチャされた値をクロージャの中でさらにmoveできるか、refしかとれないかがFnOnceとFnの違い
2022/05/23(月) 21:18:12.89ID:gtDJ5U8B
https://www.reddit.com/r/rust/comments/3wubj0/comment/cxzlvt4/

num_traitsによるジェネリクスは絶対の正解ではないから適当なところで諦めようね
■ このスレッドは過去ログ倉庫に格納されています