公式
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のasyncについて知りたければ「async-book」は必読
https://rust-lang.github.io/async-book/
※C++との比較は専用スレへ
C++ vs Rust
https://mevius.5ch.net/test/read.cgi/tech/1619219089/
前スレ
Rust part11
https://mevius.5ch.net/test/read.cgi/tech/1623857052/
探検
Rust part12
レス数が950を超えています。1000を超えると書き込みができなくなります。
2021/08/24(火) 22:55:27.78ID:972JwtmU
888デフォルトの名無しさん
2021/10/27(水) 08:48:37.83ID:NxiqMK2Z Boehmってカタカナ的には何て読むの?
889デフォルトの名無しさん
2021/10/27(水) 09:08:54.86ID:CWN4UblG ボエヒムじゃないの?
890デフォルトの名無しさん
2021/10/27(水) 10:46:43.20ID:OgmKOgHT ベームかボームだろ、ボエヒムとかワロタw
891デフォルトの名無しさん
2021/10/27(水) 11:14:08.33ID:7BguKBbd ドラクエの呪文みたいだな
892デフォルトの名無しさん
2021/10/27(水) 11:35:17.90ID:Ru0zcXw7 ドイツ語のoeは日本語ではエって転写される
893デフォルトの名無しさん
2021/10/27(水) 12:01:22.63ID:dNMmh9m9 Phoenix
894デフォルトの名無しさん
2021/10/27(水) 12:11:52.89ID:AHUxp5wd 412 名前: 以下、名無しにかわりましてVIPがお送りします 投稿日: 2013/01/19(土) 21:03:25.42 ID:a2pD/tlo0
FランのFはフェニックスのFや!
例えこんなところで落ちぶれても不死鳥のごとく上流階級に返り咲くんや!!
414 名前: 以下、名無しにかわりましてVIPがお送りします 投稿日: 2013/01/19(土) 21:04:02.87 ID:dT9mn0sK0
>>412
フェニックスは「phoenix」
FランのFはフェニックスのFや!
例えこんなところで落ちぶれても不死鳥のごとく上流階級に返り咲くんや!!
414 名前: 以下、名無しにかわりましてVIPがお送りします 投稿日: 2013/01/19(土) 21:04:02.87 ID:dT9mn0sK0
>>412
フェニックスは「phoenix」
895デフォルトの名無しさん
2021/10/27(水) 14:01:22.92ID:t2iD5tO8 cafe la boheme
896デフォルトの名無しさん
2021/10/28(木) 12:12:05.45ID:hM84Yf/1 >>887
スレチだが、Boehmなので本来はSTWだけなのでUnityにGCラグが発生していたことは有名ですが、2018/12頃に
インクリメンタルGCが出来て改善された。
https://blog.unity.com/technology/feature-preview-incremental-garbage-collection
またUnityでゲームなどを作るときに良くやるのがGCを動かさないこと(=オブジェクトを破棄しない)で
オブジェクトプールを使用して1度作ったオブジェクトをプールして置き破棄させない方法など、Unityにある
文字列比較などを使用しないなど細かい事をやる。本末転倒といえばその通り
スレチだが、Boehmなので本来はSTWだけなのでUnityにGCラグが発生していたことは有名ですが、2018/12頃に
インクリメンタルGCが出来て改善された。
https://blog.unity.com/technology/feature-preview-incremental-garbage-collection
またUnityでゲームなどを作るときに良くやるのがGCを動かさないこと(=オブジェクトを破棄しない)で
オブジェクトプールを使用して1度作ったオブジェクトをプールして置き破棄させない方法など、Unityにある
文字列比較などを使用しないなど細かい事をやる。本末転倒といえばその通り
897デフォルトの名無しさん
2021/10/29(金) 02:30:41.55ID:dwfT6x3M 典型的なバッドノウハウだな
とはいえ日本でUnityが一番つかわれているであろう現場のモバイルゲーム開発は
昔はケータイJavaのゲーム開発やってた場合が多いのでその辺のGCバッドノウハウに慣れちゃってるという
Boehmはボエーンて読んでるわ
とはいえ日本でUnityが一番つかわれているであろう現場のモバイルゲーム開発は
昔はケータイJavaのゲーム開発やってた場合が多いのでその辺のGCバッドノウハウに慣れちゃってるという
Boehmはボエーンて読んでるわ
898デフォルトの名無しさん
2021/10/29(金) 02:58:27.64ID:j8WlttkF oe はドイツ語の o の代替綴りとしてあてられることが多い。
つまり boehm の本来の綴りは bohm ってことね。
o はオの口の音でエという感じなので音としては中途半端で、カタカナに当てはめにくい。
ドイツ語の発音通りをあえてカタカナにするならボェーンに聞こえるんだけど、
bohm という人名は通例ではベームと表記してるね。
つまり boehm の本来の綴りは bohm ってことね。
o はオの口の音でエという感じなので音としては中途半端で、カタカナに当てはめにくい。
ドイツ語の発音通りをあえてカタカナにするならボェーンに聞こえるんだけど、
bohm という人名は通例ではベームと表記してるね。
899デフォルトの名無しさん
2021/10/29(金) 02:58:48.47ID:j8WlttkF あれ? 2ch に投稿したらウムラウトが消えてる……。
900デフォルトの名無しさん
2021/10/29(金) 03:36:42.46ID:Ws4Kkx5X appleをアップルと記載するような文化やからね。カタカナにしてしまったら本来の発音との差異なんて気にしたらキリがない
901デフォルトの名無しさん
2021/10/29(金) 04:15:21.99ID:feAEAXNj 名女優のオードリー・ヘップバーンと
ローマ字表記のヘボン式で有名なヘボン氏が実は同じ綴り同じ発音の同じ姓みたいなもんか
ローマ字表記のヘボン式で有名なヘボン氏が実は同じ綴り同じ発音の同じ姓みたいなもんか
902デフォルトの名無しさん
2021/10/29(金) 05:16:40.74ID:eAaOJvH1 ドイチュ語と描いてない >>898 は失格
903デフォルトの名無しさん
2021/10/29(金) 21:33:27.38ID://DLIqvB まじかあ、これが可能だったのかあ
let v = vec![1, 2, 3];
println!("{}", v[if true { 1 } else { 2 }]);
let v = vec![1, 2, 3];
println!("{}", v[if true { 1 } else { 2 }]);
904デフォルトの名無しさん
2021/10/29(金) 23:53:13.86ID:3N24c0Lq905デフォルトの名無しさん
2021/10/30(土) 00:22:25.21ID:9U1YWI6I 音韻と音声は異なる。 ある言語で同じ音だと認められる音が音韻で、
たとえば日本語だとシンブンシという言葉に表れる二個のンは実際には違う音
なのに同じ音として処理している。
(だからヘボン式ローマ字では書き分けるルールになっている。)
音韻として同じでも音声として幅はあり、そして音韻は言語に依存するもんだから、
外国語の音を転写してくるとどう頑張ったって辻褄の合わない部分は出てくる。
たとえば日本語だとシンブンシという言葉に表れる二個のンは実際には違う音
なのに同じ音として処理している。
(だからヘボン式ローマ字では書き分けるルールになっている。)
音韻として同じでも音声として幅はあり、そして音韻は言語に依存するもんだから、
外国語の音を転写してくるとどう頑張ったって辻褄の合わない部分は出てくる。
906デフォルトの名無しさん
2021/10/30(土) 01:29:07.34ID:fDTZDMBU >>901
唐鳳は上手いよな
唐鳳は上手いよな
907デフォルトの名無しさん
2021/10/30(土) 02:41:12.91ID:z8LGC696 いつの間にか[T; N]にIntoIteratorがimplされてるな
しかも興味深いことにVec等と異なり消費されないようだ
借用ルール的にはどういう扱い?
しかも興味深いことにVec等と異なり消費されないようだ
借用ルール的にはどういう扱い?
908デフォルトの名無しさん
2021/10/30(土) 08:30:57.45ID:zPV0av3I イテレータが理解できないやつ定期的に湧くな
909デフォルトの名無しさん
2021/10/30(土) 09:56:39.69ID:gRDEN/XN 常駐
910デフォルトの名無しさん
2021/10/30(土) 11:34:48.67ID:cxTfS1zf >>902
ドイちェン
ドイちェン
911デフォルトの名無しさん
2021/10/30(土) 20:52:05.52ID:/cDwb9ic >>907
Rust 1.53.0で配列にIntoIteratorが実装された
あと識別子に日本語も使えるようになった
配列は要素がCopyを実装しているかどうかで所有権の扱いが変わる
#[derive(Debug,Clone,Copy)]
struct 構造体 {
値: isize,
}
fn main() {
let 配列 = [構造体{値:1}, 構造体{値:2}, 構造体{値:3}];
for 変数 in 配列 {
println!("{:?}", 変数);
}
println!("{:?}", 配列[0]);
}
例えばこれはコンパイルが通って動くけど
構造体のderiveのCopyを外すと
配列の所有権はfor in内部のinto_iter()で移動してしまいコンパイルが通らなくなる
Rust 1.53.0で配列にIntoIteratorが実装された
あと識別子に日本語も使えるようになった
配列は要素がCopyを実装しているかどうかで所有権の扱いが変わる
#[derive(Debug,Clone,Copy)]
struct 構造体 {
値: isize,
}
fn main() {
let 配列 = [構造体{値:1}, 構造体{値:2}, 構造体{値:3}];
for 変数 in 配列 {
println!("{:?}", 変数);
}
println!("{:?}", 配列[0]);
}
例えばこれはコンパイルが通って動くけど
構造体のderiveのCopyを外すと
配列の所有権はfor in内部のinto_iter()で移動してしまいコンパイルが通らなくなる
912デフォルトの名無しさん
2021/10/30(土) 21:00:13.45ID:zJlZfWf6 >>911
ぶっちゃけ日本語の識別子わかりやすいって思ってしまった
ぶっちゃけ日本語の識別子わかりやすいって思ってしまった
913デフォルトの名無しさん
2021/10/30(土) 22:32:29.50ID:EbhCJ5wH 日本語識別子わかりやすいんだけど入力に手間がかかるのがつらい
914デフォルトの名無しさん
2021/10/30(土) 23:29:17.10ID:s2ubgEFJ let v0 = vec![1, 2, 3];
let mut v1 = v0;
v1.push(120);
let mut v0 = vec![1, 2, 3];
let v1 = &mut v0;
v1.push(120);
所有権関連で試してみてるんだけど、この二つの違いってなんなん?
いまいちよくわからん
上のはmutでないvecをlet mutの変数に入れるとpushできてまうし
下のはlet mutでない変数なのに&mutでいれるとpushできてまう
let mut v1 = v0;
v1.push(120);
let mut v0 = vec![1, 2, 3];
let v1 = &mut v0;
v1.push(120);
所有権関連で試してみてるんだけど、この二つの違いってなんなん?
いまいちよくわからん
上のはmutでないvecをlet mutの変数に入れるとpushできてまうし
下のはlet mutでない変数なのに&mutでいれるとpushできてまう
915デフォルトの名無しさん
2021/10/30(土) 23:56:55.99ID:cJtJXOgj916デフォルトの名無しさん
2021/10/31(日) 00:40:09.42ID:ndmOeSWD >>914
それぞれpushした後にv0とv1がどうなってるか確認してみるとわかる
それぞれpushした後にv0とv1がどうなってるか確認してみるとわかる
917デフォルトの名無しさん
2021/10/31(日) 01:41:05.72ID:e5ZzvOAs うんこ荒らすな!
918デフォルトの名無しさん
2021/10/31(日) 02:16:55.91ID:HeT/GYnp すまんがVSCode + Rust-Analyzerで勉強中なんだけどさ
数ヶ月前は変数の型が表示されていたのに、今じゃ全然表示されなくなっちゃったんだけど・・・・どうすればいいんだぜ?
数ヶ月前は変数の型が表示されていたのに、今じゃ全然表示されなくなっちゃったんだけど・・・・どうすればいいんだぜ?
919デフォルトの名無しさん
2021/10/31(日) 03:00:17.77ID:9uKpC+QX int * constみたいなもん
参照先のアドレスは変更不可だけどそのアドレスが指してるvectorは&mutだから変更可能
参照先のアドレスは変更不可だけどそのアドレスが指してるvectorは&mutだから変更可能
920デフォルトの名無しさん
2021/10/31(日) 03:02:55.52ID:nF8ypkXG >>914
他の言語での余計な知識を捨て去ってゼロから考えるとわかりやすかったよ
今回の件で関係するルールは単純でこれだけかな?
【所有権】
・所有権を持てるのは一人だけ
・使う(=代入や関数引数も含まれる)と所有権は移動する
・ただしCopyトレイト実装型は使う時にCopyされるので所有権は移動しない
【所有権を持つ可変と非可変】
・その変数の中身を書き換える予定があるなら変数を可変(mut)に宣言しておく
・他の変数に代入しなおせば可変か非可変か変更可能(つまりその変数を使う時の制限ヒント)
【参照(=貸出=借用)】
・所有権が移動されたくなければ参照で貸し出す
・可変参照(&mut)の貸し出しは1人のみに参照独占で元も可変変数であること
・非可変参照(&)の貸し出しは同時に何人でも可能
・まとめるとsingle writer or multi readers
所有権を明確にするのはメモリ自動解放のため
可変を明確にするのは並行(concurrent)/並列(parallel)での競合回避のため
他の言語での余計な知識を捨て去ってゼロから考えるとわかりやすかったよ
今回の件で関係するルールは単純でこれだけかな?
【所有権】
・所有権を持てるのは一人だけ
・使う(=代入や関数引数も含まれる)と所有権は移動する
・ただしCopyトレイト実装型は使う時にCopyされるので所有権は移動しない
【所有権を持つ可変と非可変】
・その変数の中身を書き換える予定があるなら変数を可変(mut)に宣言しておく
・他の変数に代入しなおせば可変か非可変か変更可能(つまりその変数を使う時の制限ヒント)
【参照(=貸出=借用)】
・所有権が移動されたくなければ参照で貸し出す
・可変参照(&mut)の貸し出しは1人のみに参照独占で元も可変変数であること
・非可変参照(&)の貸し出しは同時に何人でも可能
・まとめるとsingle writer or multi readers
所有権を明確にするのはメモリ自動解放のため
可変を明確にするのは並行(concurrent)/並列(parallel)での競合回避のため
921デフォルトの名無しさん
2021/10/31(日) 07:46:34.10ID:dD8mFzoB922デフォルトの名無しさん
2021/10/31(日) 09:44:05.10ID:726CqcoT 所有権を伸ばして発音すると昇龍拳みたいに聞こえる
出掛かりが無敵なところも似てる
出掛かりが無敵なところも似てる
923デフォルトの名無しさん
2021/10/31(日) 09:51:39.37ID:5rE8GYET ヒカヘンサンショウ
924デフォルトの名無しさん
2021/10/31(日) 13:37:02.02ID:r7nTmIjE 丁寧で優しい920を弄りたくないけど、これを読める人は914のような質問はしないね
925デフォルトの名無しさん
2021/10/31(日) 13:58:11.88ID:yTUS2Zye 以下の関数をジェネリックにする方法ありますか?
fn is_one_two_three<A: AsRef<[isize]>>(a: A) {
assert_eq!(&[1, 2, 3], a.as_ref());
}
fn main() {
let a = [1, 2, 3];
is_one_two_three(a);
let a = vec![1, 2, 3];
is_one_two_three(a);
}
配列もVecも受け取る関数でこれはコンパイルも通り動いているのですが
isizeと型が決め打ちのところをジェネリックにTとしたいです
どうするとよいでしょうか?
fn is_one_two_three<A: AsRef<[isize]>>(a: A) {
assert_eq!(&[1, 2, 3], a.as_ref());
}
fn main() {
let a = [1, 2, 3];
is_one_two_three(a);
let a = vec![1, 2, 3];
is_one_two_three(a);
}
配列もVecも受け取る関数でこれはコンパイルも通り動いているのですが
isizeと型が決め打ちのところをジェネリックにTとしたいです
どうするとよいでしょうか?
926デフォルトの名無しさん
2021/10/31(日) 14:34:45.61ID:ZiqPaZpd >>925
数値型を一般化する trait を使うのが普通かな。
自分で定義しても良いが num_traits::FromPrimitive を使うならこんな感じ
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=1fbd536dd6c9ea76beb20a666b085190
数値型を一般化する trait を使うのが普通かな。
自分で定義しても良いが num_traits::FromPrimitive を使うならこんな感じ
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=1fbd536dd6c9ea76beb20a666b085190
927デフォルトの名無しさん
2021/10/31(日) 16:04:00.70ID:2p54m3kz >>914
気持ちの上では他の言語と対応付けるのではなく Rust のルールで理解すべきという点で >>920 に
同意ではあるんだが、そうは言っても知っていると引っ張られるのも仕方のない話で、
入門初期では多少はしょうがないとも思う。
あえて C++ で同等のものに置き換えるとするとこんな感じかな。
#include <vector>
int main(void) {
{
const std::vector<int> v0 = {1, 2, 3};
std::vector<int> v1 = v0;
v1.push_back(120);
}
{
std::vector<int> v0 = {1, 2, 3};
std::vector<int>* const v1 = &v0;
v1->push_back(120);
}
}
この場合は所有権の概念はあまり関係なくて
メソッド呼出しの演算子が参照を自動で調整してしまうのも混乱の原因になってる気がする。
mut が何にかかっているのか見えにくい。
気持ちの上では他の言語と対応付けるのではなく Rust のルールで理解すべきという点で >>920 に
同意ではあるんだが、そうは言っても知っていると引っ張られるのも仕方のない話で、
入門初期では多少はしょうがないとも思う。
あえて C++ で同等のものに置き換えるとするとこんな感じかな。
#include <vector>
int main(void) {
{
const std::vector<int> v0 = {1, 2, 3};
std::vector<int> v1 = v0;
v1.push_back(120);
}
{
std::vector<int> v0 = {1, 2, 3};
std::vector<int>* const v1 = &v0;
v1->push_back(120);
}
}
この場合は所有権の概念はあまり関係なくて
メソッド呼出しの演算子が参照を自動で調整してしまうのも混乱の原因になってる気がする。
mut が何にかかっているのか見えにくい。
928デフォルトの名無しさん
2021/10/31(日) 16:25:11.82ID:KIvWC7vb929デフォルトの名無しさん
2021/10/31(日) 16:52:46.17ID:2p54m3kz930デフォルトの名無しさん
2021/10/31(日) 17:14:21.91ID:WrAvX4Kw C++で考えるのは弊害しかないじゃん
何がしょうがないだよ
何がしょうがないだよ
931デフォルトの名無しさん
2021/10/31(日) 17:47:23.34ID:dE1SXutD 弊害しかないは言いすぎ
この場合mutをどこに付けると何が可変になるかの話だから
C++でconstをどこに付けると何が不変になるのかを例に出すのは自然なたとえだと思いますよ
この場合mutをどこに付けると何が可変になるかの話だから
C++でconstをどこに付けると何が不変になるのかを例に出すのは自然なたとえだと思いますよ
932デフォルトの名無しさん
2021/10/31(日) 21:58:15.04ID:4rIS02S1 let mut vec0 = vec![vec![0, 2, 3]; 3];
for mut i in vec0.iter_mut() {
i.push(9);
}
for mut i in &mut vec0 {
i.push(9);
}
この二つのループの意味は同じ?
こういう二つの書き方があるのでちょっとわかりにくい気がする
for mut i in vec0.iter_mut() {
i.push(9);
}
for mut i in &mut vec0 {
i.push(9);
}
この二つのループの意味は同じ?
こういう二つの書き方があるのでちょっとわかりにくい気がする
933デフォルトの名無しさん
2021/10/31(日) 22:14:30.87ID:4rIS02S1 へー、これが通るんだ
ちょっと笑った
let vec0 = vec![0, 2, 3];
let mut vec0 = vec0;
vec0.push(99);
ちょっと笑った
let vec0 = vec![0, 2, 3];
let mut vec0 = vec0;
vec0.push(99);
934デフォルトの名無しさん
2021/10/31(日) 22:21:16.21ID:xmsO/hLH >>933
シャドーイングだから当たり前でしょ
シャドーイングだから当たり前でしょ
935デフォルトの名無しさん
2021/10/31(日) 22:22:32.67ID:fTPwCWVK シャドーイングOKな言語でもlintが禁止してきてイラっとする
936デフォルトの名無しさん
2021/10/31(日) 22:31:01.48ID:4rIS02S1937デフォルトの名無しさん
2021/10/31(日) 22:44:51.38ID:2W4wB6er クソみたいな名前が増えないようにだよ
938デフォルトの名無しさん
2021/10/31(日) 22:57:25.82ID:Ou5/KoYl >>924
「関係するルールは単純でこれだけ」と言って関係ないものも含めて8個もルールを羅列するやつが丁寧で優しいわけがないよ
「関係するルールは単純でこれだけ」と言って関係ないものも含めて8個もルールを羅列するやつが丁寧で優しいわけがないよ
939デフォルトの名無しさん
2021/10/31(日) 23:04:28.74ID:4rIS02S1 >>937
変数名の再利用と状態変更はちがくね?
そもそも変更しないと宣言して変数をシャドーイングして変更可能にするのも疑問だけど、
まあそれは仕様だとして、それが変数名の再利用とは無関係じゃんね 再利用しない前提なんだから
変数名の再利用と状態変更はちがくね?
そもそも変更しないと宣言して変数をシャドーイングして変更可能にするのも疑問だけど、
まあそれは仕様だとして、それが変数名の再利用とは無関係じゃんね 再利用しない前提なんだから
940デフォルトの名無しさん
2021/10/31(日) 23:09:50.30ID:59hJVDPo もはや何言ってるかわからないレベル
941デフォルトの名無しさん
2021/11/01(月) 00:28:06.90ID:lB3Z2euD942デフォルトの名無しさん
2021/11/01(月) 00:30:02.23ID:cNNz1tH7 >>932
mut i ってmut必要だっけ
mut i ってmut必要だっけ
943デフォルトの名無しさん
2021/11/01(月) 01:16:30.92ID:FrHt6Y1+ >>932
> for mut i in vec0.iter_mut() {
> for mut i in &mut vec0 {
どちらもiは&mutになるので同じfor文になる
そしてlet mut i = &mut ... と書いている時と同じく左側のmutは不要(warning)
> for mut i in vec0.iter_mut() {
> for mut i in &mut vec0 {
どちらもiは&mutになるので同じfor文になる
そしてlet mut i = &mut ... と書いている時と同じく左側のmutは不要(warning)
944デフォルトの名無しさん
2021/11/01(月) 01:31:09.18ID:FrHt6Y1+ >>925
配列もVecも受け取る関数ならば
as_ref()でスライスに揃える方法だけでなく
配列もVecもそのままの型で使う方法もあり
どちらもa[i]の形はIndexトレイトで使えるので例えば
fn get_second_item<A: std::ops::Index<usize, Output=T>, T: Copy>(a: A) -> T {
a[1]
}
fn main() {
let a = [1.1, 2.2, 3.3];
assert_eq!(2.2, get_second_item(a));
let a = vec!["a", "b", "c"];
assert_eq!("b", get_second_item(a));
}
と配列/Vec側も中身のf64/&str側もジェネリックに書ける
配列もVecも受け取る関数ならば
as_ref()でスライスに揃える方法だけでなく
配列もVecもそのままの型で使う方法もあり
どちらもa[i]の形はIndexトレイトで使えるので例えば
fn get_second_item<A: std::ops::Index<usize, Output=T>, T: Copy>(a: A) -> T {
a[1]
}
fn main() {
let a = [1.1, 2.2, 3.3];
assert_eq!(2.2, get_second_item(a));
let a = vec!["a", "b", "c"];
assert_eq!("b", get_second_item(a));
}
と配列/Vec側も中身のf64/&str側もジェネリックに書ける
945デフォルトの名無しさん
2021/11/01(月) 08:15:24.70ID:Qg2QcgLf 背後にある考え方を説明せずにルールだけ教えても理解できないよ。
まあ、ルールに一貫したコンセプトがないんだったら「こういうものだ」と押し付けるしかないけど。
まあ、ルールに一貫したコンセプトがないんだったら「こういうものだ」と押し付けるしかないけど。
946デフォルトの名無しさん
2021/11/01(月) 23:13:41.76ID:PKaNA1In 可変の場合は面倒でもmutが必要ってしたほうがわかりやすいような気がするなあ
947デフォルトの名無しさん
2021/11/01(月) 23:57:09.03ID:HKf+kmzN let mut p = &mut q; の左辺mutを書くとwarningが出る理由は、pはmutではなく、あくまでも&mutであるためだろう。
つまり、そこに左辺mutを書いてしまう人はきちんと理解していないという意味ではなかろうか。
つまり、そこに左辺mutを書いてしまう人はきちんと理解していないという意味ではなかろうか。
948デフォルトの名無しさん
2021/11/02(火) 07:53:30.47ID:eth2zNwx let mut ~~はそこで定義される変数が可変(再代入可能)になるもので、
&mut ~~はそこで作成される参照が可変になる、という理解なんだけど、
どうもしっくり来てない。引数の宣言で&mutとつけるとどうなるの、とかすぐ出てこない。
&mut ~~はそこで作成される参照が可変になる、という理解なんだけど、
どうもしっくり来てない。引数の宣言で&mutとつけるとどうなるの、とかすぐ出てこない。
949デフォルトの名無しさん
2021/11/02(火) 08:18:58.33ID:gnq/E+lb let mutのmutはコード生成には不要だけど&mutのmutは必要だと言う話を聞いた
950デフォルトの名無しさん
2021/11/02(火) 09:44:55.98ID:px0qcy1y 950
951デフォルトの名無しさん
2021/11/02(火) 11:55:17.95ID:22+2FiF4 let mutのmutはbindingがmutableかどうか
&mutは型が&mut Tなのかどうか
Cのconst pointerとpointer to constと同じ
Rustはデフォルトimmutableなのでmutableにしたい場合にのみmutで修飾
普通使わないけどパターンマッチと組み合わせると
let &mut mut x = &mut y;
みたいな書き方もありうる
&mutは型が&mut Tなのかどうか
Cのconst pointerとpointer to constと同じ
Rustはデフォルトimmutableなのでmutableにしたい場合にのみmutで修飾
普通使わないけどパターンマッチと組み合わせると
let &mut mut x = &mut y;
みたいな書き方もありうる
952デフォルトの名無しさん
2021/11/03(水) 12:07:17.82ID:gDAMFAnt mutが必要ってより、for mutにfor let mutにならないことが不思議
953デフォルトの名無しさん
2021/11/03(水) 17:34:54.99ID:eoGGfQG1 それは単にforの文法がlet不要なように設計されたってだけでは
954デフォルトの名無しさん
2021/11/03(水) 18:34:42.48ID:+koatzK+ let パターン = ...
for パターン in iter
match パターン ...
fn hoge(パターン: TypeName, ...)
ってことやぞ
for パターン in iter
match パターン ...
fn hoge(パターン: TypeName, ...)
ってことやぞ
955デフォルトの名無しさん
2021/11/03(水) 19:26:40.94ID:6uw3PT+q Rustにはif let Some(3) = v {}とか、 while let Some(i) = a {}とかあり。letは不変のキーワードじゃなく
右辺に対するパターンマッチ展開で、for letがないのは、forはfor..inしかなく、Cのようなfor ;条件;の文が
存在しないためという考えらしいです。。。
右辺に対するパターンマッチ展開で、for letがないのは、forはfor..inしかなく、Cのようなfor ;条件;の文が
存在しないためという考えらしいです。。。
956デフォルトの名無しさん
2021/11/04(木) 06:57:56.88ID:9Ddr56R/ forで変数の初期化が要るみたいな発想になる時点でC由来の処理系に洗脳されているんじゃぁ・・・
957デフォルトの名無しさん
2021/11/04(木) 13:00:03.95ID:UnTZr4yd for p in v { … } は
v.into_iter().for_each(|p| …) と同じ機能たけど
長いメソッドチェーンな時など敢えてforでなくfor_each使ったりも
v.into_iter().for_each(|p| …) と同じ機能たけど
長いメソッドチェーンな時など敢えてforでなくfor_each使ったりも
958デフォルトの名無しさん
2021/11/04(木) 20:16:49.18ID:UnTZr4yd ただしfor文は値を返せないのが弱点かな
イテレータならfor_eachの代わりにfoldしたりfindしたりあるいはmapやfilterなど色々処理して最後にcollectしたりと値を返せる
イテレータならfor_eachの代わりにfoldしたりfindしたりあるいはmapやfilterなど色々処理して最後にcollectしたりと値を返せる
959デフォルトの名無しさん
2021/11/04(木) 20:24:42.58ID:faLe9vBn960デフォルトの名無しさん
2021/11/04(木) 21:17:21.49ID:MjRPJM3Z >>959
for式やwhile式がOptionを返してループ0回ならNoneで済む話ではないのでしょうか?
for式やwhile式がOptionを返してループ0回ならNoneで済む話ではないのでしょうか?
961デフォルトの名無しさん
2021/11/04(木) 21:26:55.06ID:sNasn9tC forで値を返したいとか言ってるやつまだいたのかw
962デフォルトの名無しさん
2021/11/04(木) 23:50:24.53ID:faLe9vBn >>960
ループ内は実行されないからNoneも返せないってことよ
loopは明示的に自分でbreakするから許容
let test: = if true { 1 };
たとえば、これでtestにNoneが入るとかおかしいことになるってわかるっしょ?
それと同じこと。
ループ内は実行されないからNoneも返せないってことよ
loopは明示的に自分でbreakするから許容
let test: = if true { 1 };
たとえば、これでtestにNoneが入るとかおかしいことになるってわかるっしょ?
それと同じこと。
963デフォルトの名無しさん
2021/11/04(木) 23:51:56.14ID:Cqbrs2k1 実際問題としてHITUYOU
964デフォルトの名無しさん
2021/11/04(木) 23:52:15.61ID:Cqbrs2k1 ごめん誤爆した。
実際問題として必要な場面がないだろ。
実際問題として必要な場面がないだろ。
965デフォルトの名無しさん
2021/11/05(金) 08:00:41.30ID:Q0weZe1J forの話なら、これって今はどっちで書くのが一般的?ルールとして基本はHOFで書くのを
やっぱり強制したいのだけど
https://doc.rust-lang.org/stable/rust-by-example/fn/hof.html
やっぱり強制したいのだけど
https://doc.rust-lang.org/stable/rust-by-example/fn/hof.html
966デフォルトの名無しさん
2021/11/05(金) 13:18:20.54ID:/SSooQm2 rust現場で使ってる人は何系のシステム作ってるん?
967デフォルトの名無しさん
2021/11/05(金) 14:22:06.73ID:pAK9gvBl 現場で使ってる人なんていません
968デフォルトの名無しさん
2021/11/05(金) 14:42:52.35ID:Z0sGs5cT 求人検索をしてみても、Rust使ってるとこなんて指で数えられるぐらいしかなさそうかな
969デフォルトの名無しさん
2021/11/05(金) 15:22:01.85ID:4VZvWnUi とりあえずいつもの貼っておく
https://www.rust-lang.org/production
https://www.rust-lang.org/production
970デフォルトの名無しさん
2021/11/05(金) 15:29:07.01ID:ShfctMVX 試験的にGoからRustに切り替え中だよ。両方ともバックエンドとフロントエンドまでやってるのでそのまま移植出来て簡単…じゃなかった
インフラはサクッと終わったけど、フロントは素のWasmで実装するもGoより遥かに複雑で難解なRustでやる意味は?的な事になって
vDOM系フレームワークで実装するも、Non-vDOM系のが殆どの場面で速い事が分かったのでやり直し中
で、本番環境で運用できるのか?となると最初の印象に反して「出来る」と思うね。
動かし始めて不具合が出た時に、何処がヤバいのか分からない怖さがない。
過去の資産と経験則は捨ててRustのお作法に従うようにするのが大切、下手にアレを使いたいので使い回すとかやると余計苦労する。
インフラはサクッと終わったけど、フロントは素のWasmで実装するもGoより遥かに複雑で難解なRustでやる意味は?的な事になって
vDOM系フレームワークで実装するも、Non-vDOM系のが殆どの場面で速い事が分かったのでやり直し中
で、本番環境で運用できるのか?となると最初の印象に反して「出来る」と思うね。
動かし始めて不具合が出た時に、何処がヤバいのか分からない怖さがない。
過去の資産と経験則は捨ててRustのお作法に従うようにするのが大切、下手にアレを使いたいので使い回すとかやると余計苦労する。
971デフォルトの名無しさん
2021/11/05(金) 19:10:07.53ID:0gW7V402 >>970
もしよろしければオススメのRustフレームワークを教えてください
もしよろしければオススメのRustフレームワークを教えてください
972デフォルトの名無しさん
2021/11/05(金) 20:26:36.98ID:RvCa6Qvn ちんちんぶらぶらRustすぱーと
973デフォルトの名無しさん
2021/11/05(金) 20:33:04.86ID:JniLXeAQ うちではバイトの女子大生も使ってるが
Rustを使うような企業はネット求人になんか頼らんだろうね、今のところ
Rustを使うような企業はネット求人になんか頼らんだろうね、今のところ
974デフォルトの名無しさん
2021/11/05(金) 21:52:24.97ID:ShfctMVX >>971
Dominator
Dominator
975デフォルトの名無しさん
2021/11/05(金) 23:26:41.71ID:DvmJ6O3T Dominatorってこれか
https://github.com/Pauan/rust-dominator
virtual DOM使わずゼロコストでリアクティブか
ベンチマーク見るとVue/React/Angularなどは非常に遅いんだな
https://rawgit.com/krausest/js-framework-benchmark/master/webdriver-ts-results/table.html
Vanilla JSで頑張るのでなければRustでDominatorを使った方が良さそうってことか
ウェブフロントエンドまでRustの時代が来るとは驚き
https://github.com/Pauan/rust-dominator
virtual DOM使わずゼロコストでリアクティブか
ベンチマーク見るとVue/React/Angularなどは非常に遅いんだな
https://rawgit.com/krausest/js-framework-benchmark/master/webdriver-ts-results/table.html
Vanilla JSで頑張るのでなければRustでDominatorを使った方が良さそうってことか
ウェブフロントエンドまでRustの時代が来るとは驚き
976デフォルトの名無しさん
2021/11/05(金) 23:41:27.00ID:7Nx3lyuG おもしろそうだけど、メンテが辛くなりそう。仕事でそんなん大丈夫かしら?
977デフォルトの名無しさん
2021/11/06(土) 01:14:13.09ID:8rFQ20lW ダメに決まってんじゃん。。無理やり使おうとしてるのが丸わかりだわ。
978デフォルトの名無しさん
2021/11/06(土) 01:50:27.76ID:BsA8c5Gl >>975
少くともその表に載ってるsolidってのは非vDOM系のJSフレームワークだけど…
その表ではDominatorとどっちが速いですか?
そしてそれはなぜですか?
それを勘案しても、
Vanilla JSで頑張るのでなければRustでDominatorを使った方が良さそうってなりますか?
少くともその表に載ってるsolidってのは非vDOM系のJSフレームワークだけど…
その表ではDominatorとどっちが速いですか?
そしてそれはなぜですか?
それを勘案しても、
Vanilla JSで頑張るのでなければRustでDominatorを使った方が良さそうってなりますか?
979デフォルトの名無しさん
2021/11/06(土) 01:55:12.94ID:eYFGObaB フロントエンドのwasmでrustを使う意味が分からん、assemblyscriptなんかでts変換したほうがよっぽど
人材確保も容易で速度も出そうだけど、まあ全部1つの言語に統一したいという欲望は分かるが
人材確保も容易で速度も出そうだけど、まあ全部1つの言語に統一したいという欲望は分かるが
980デフォルトの名無しさん
2021/11/06(土) 08:58:19.69ID:8rFQ20lW その種の願望はいつだって失敗してるのに何回でもこだわるバカが出てくる。
ビジュアルプログラミングとかノーコード並みに愚かだわ。
ビジュアルプログラミングとかノーコード並みに愚かだわ。
981デフォルトの名無しさん
2021/11/06(土) 09:42:55.78ID:DjcFpt23 夢は終わらねえ!
982デフォルトの名無しさん
2021/11/06(土) 10:40:16.97ID:YOvBnwY8 htmlマクロが微妙だよな。yewもしかり
マクロの仕様理解して書かないといけないからwebpackみたいなコンパイラー挟んでreact,vueみたいなhtmlベースでかけたら普及進むと思う
マクロの仕様理解して書かないといけないからwebpackみたいなコンパイラー挟んでreact,vueみたいなhtmlベースでかけたら普及進むと思う
983デフォルトの名無しさん
2021/11/06(土) 10:43:29.52ID:gG2xt4rU フロントエンドはElmで書いた方がいいと思う
Elmの設計をパクったRust用フレームワークよりElmそのもので書いた方がいい
Elmの設計をパクったRust用フレームワークよりElmそのもので書いた方がいい
984デフォルトの名無しさん
2021/11/06(土) 11:32:19.13ID:dvoeGWeX985デフォルトの名無しさん
2021/11/06(土) 12:19:33.04ID:v/Totsm8 >>979
AssemblyScriptはメモリ管理GC問題があるし文法が単にTSの限定サブセットに過ぎないため色々と辛すぎる
そのためWebAssemblyでの使用言語調査結果もこんな状況でRustが圧勝
https://blog.scottlogic.com/ceberhardt/assets/state-of-wasm/desired-language.png
>>978
Wasm⇔JSのオーバーヘッドがあるので処理が少なくほとんどDOM操作になる時だけはJSのみで書いたほうが速い (当たり前)
そのためほぼDOM操作のそのベンチマークではRustフレームワークがわずか数%遅くなっているが現実には処理内容次第ですぐに逆転する
>>983
Elmは型クラス(Rustではtrait)がなく例えば抽象的なイテレータも持てず色々と辛い
このスレはRustにアンチな人がRustを貶めようと常駐して頑張ってるようだけど
Rustを用いるのがベストな方法な場合が非常に多いよ
AssemblyScriptはメモリ管理GC問題があるし文法が単にTSの限定サブセットに過ぎないため色々と辛すぎる
そのためWebAssemblyでの使用言語調査結果もこんな状況でRustが圧勝
https://blog.scottlogic.com/ceberhardt/assets/state-of-wasm/desired-language.png
>>978
Wasm⇔JSのオーバーヘッドがあるので処理が少なくほとんどDOM操作になる時だけはJSのみで書いたほうが速い (当たり前)
そのためほぼDOM操作のそのベンチマークではRustフレームワークがわずか数%遅くなっているが現実には処理内容次第ですぐに逆転する
>>983
Elmは型クラス(Rustではtrait)がなく例えば抽象的なイテレータも持てず色々と辛い
このスレはRustにアンチな人がRustを貶めようと常駐して頑張ってるようだけど
Rustを用いるのがベストな方法な場合が非常に多いよ
986デフォルトの名無しさん
2021/11/06(土) 16:27:09.97ID:Y613N0Im もはや人類の発展はRustにかかっていると言ってもいい
987デフォルトの名無しさん
2021/11/06(土) 16:30:35.71ID:3ClRyBcI Rustのお陰でハゲが治りました!
レス数が950を超えています。1000を超えると書き込みができなくなります。
ニュース
- 【🐼】パンダ、日本で会えなくなる? 中国との関係悪化で不安の声 [ぐれ★]
- 台湾有事での集団的自衛権行使に「賛成」が48.8%、「反対」が44.2% ★6 [♪♪♪★]
- 高市早苗首相、独自貫いた1カ月 会食ゼロ、議員宿舎で勉強漬け「飲んでる暇があれば、政策を練り、資料を読みたい」 [Hitzeschleier★]
- 【立憲民主党】「質問レベルの低さが立憲の存立危機事態」台湾有事発言を引き出した立憲“執拗追及”が波紋… ★2 [尺アジ★]
- 【MLB】大谷翔平、山本由伸、佐々木朗希WBC出場辞退が確実に! トランプ大統領「ロス五輪最優先」指令 どうなる侍ジャパン [牛丼★]
- 中国「国連安保理の許可なしに日本攻撃可能」 Xで旧敵国条項に言及… ★15 [BFU★]
- 【実況】博衣こよりのえちえちKoZMy4D晩酌🧪❄🫘
- 【ござ専🏡】風間隊🥷集合でござる🏯【風間いろは🍃】
- 【速報】高市首相「国際社会は危機に直面している」 [256556981]
- 【悲報】日本人、突然全員高市早苗の反転アンチになる。外交勝負服発言がどうしても許せない模様 [517791167]
- バルミューダ「助けて・・・助けて・・・」 [256556981]
- 竹中平蔵「万博は大成功でしたね。反対していた・批判していた人々たちの反省の弁を聞きたいですね」 [256556981]
