公式
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
■ このスレッドは過去ログ倉庫に格納されています
2021/08/24(火) 22:55:27.78ID:972JwtmU
388デフォルトの名無しさん
2021/09/12(日) 15:59:39.60ID:lBuMyCBZ >>387
それは後置デクリメントになっていない
それは後置デクリメントになっていない
389デフォルトの名無しさん
2021/09/12(日) 16:29:00.55ID:aiqNVBie 後置であるということをそもそも認識できていなかった、やっべえ
390デフォルトの名無しさん
2021/09/12(日) 16:37:25.63ID:458u6HPV まさにバグの温床となりうることが示されたな
391デフォルトの名無しさん
2021/09/12(日) 16:48:32.00ID:Q5FBinyU392デフォルトの名無しさん
2021/09/12(日) 22:21:50.69ID:s09Gb+ph >>387
見ろ!Rustがゴミのようだ!
見ろ!Rustがゴミのようだ!
393デフォルトの名無しさん
2021/09/13(月) 00:58:36.15ID:1X9d0oCW 型変数を明示しなきゃならないのは汎用プログラミング言語の欠点だよな
394デフォルトの名無しさん
2021/09/13(月) 01:54:16.68ID:+ZZ666OR 何言ってんだこのバカ
395デフォルトの名無しさん
2021/09/13(月) 11:03:41.66ID:HWJQ0k95 let mut counter = init + 1;
move || { counter -= 1; counter }
これが普通だと思うのは俺だけか?
move || { counter -= 1; counter }
これが普通だと思うのは俺だけか?
396デフォルトの名無しさん
2021/09/13(月) 16:07:27.15ID:1X9d0oCW >>395
Rubyだと普通にそういう書き方するから特に違和感はないな
Rubyだと普通にそういう書き方するから特に違和感はないな
397デフォルトの名無しさん
2021/09/14(火) 21:41:07.14ID:qEUG/jlq 配列がusizeだけなのを何とかして欲しい
i32 as usizeとかいちいち面倒
i32 as usizeとかいちいち面倒
398デフォルトの名無しさん
2021/09/14(火) 21:52:21.64ID:yDfeC3hP399デフォルトの名無しさん
2021/09/14(火) 23:13:54.76ID:/xeH/JpQ usizeだとうっかりマイナスにしちゃって死ぬことがある
デバッグビルドならぱにくって気づくけど、
テストすり抜けちゃうとやばい
デバッグビルドならぱにくって気づくけど、
テストすり抜けちゃうとやばい
400デフォルトの名無しさん
2021/09/14(火) 23:25:50.44ID:G8gCvJ5V i32は流石にどうかと思うけど
グリッドの4-隣接とか8-隣接をforで回すときに中心からの差分で表現したくて、
isizeとusizeでガチャガチャ変換したときはちょっとウザいなーとは思った
グリッドの4-隣接とか8-隣接をforで回すときに中心からの差分で表現したくて、
isizeとusizeでガチャガチャ変換したときはちょっとウザいなーとは思った
401デフォルトの名無しさん
2021/09/14(火) 23:35:48.81ID:9cp1Eg6y impl From<u16> for usize はあるのに u32 はないのが面倒
usize のサイズがプラットフォーム依存なのは分かるけど毎回 trt_from().unwap() したくない
usize のサイズがプラットフォーム依存なのは分かるけど毎回 trt_from().unwap() したくない
402デフォルトの名無しさん
2021/09/15(水) 06:35:42.54ID:21ZYJzvz Rustの難しさってある程度マスターしたあとは納得の難しさなんですか?
面倒だなー。でも(メモリ安全のためには)しょうがないか〜、みたいな
面倒だなー。でも(メモリ安全のためには)しょうがないか〜、みたいな
403デフォルトの名無しさん
2021/09/15(水) 07:06:01.76ID:WxLXvftP バカ矯正用補助輪付言語の難しさ
404デフォルトの名無しさん
2021/09/15(水) 07:55:49.68ID:nFHSO/L2 補助輪なし言語でバグなしプログラム作れたらどこに行っても採用されると思うよ
405デフォルトの名無しさん
2021/09/15(水) 08:36:21.78ID:P0HV9c3B >>401
asでいけないっけ
asでいけないっけ
406デフォルトの名無しさん
2021/09/15(水) 09:04:47.19ID:77IP/X5S407デフォルトの名無しさん
2021/09/15(水) 09:15:01.47ID:P0HV9c3B オーバーフローの懸念がある文脈ならtry_fromはしょうがないのでは
usizeがu32以上のプラットフォームだけ想定するならasでいいように思えちゃうんだけど
usizeがu32以上のプラットフォームだけ想定するならasでいいように思えちゃうんだけど
408デフォルトの名無しさん
2021/09/15(水) 09:44:19.90ID:77IP/X5S asを使うとu32から別の型に変更したときに修正漏れのリスクがあるのが気になってしまう
まあfrom相当のユーティリティ関数自分で用意すれば良いか
まあfrom相当のユーティリティ関数自分で用意すれば良いか
409デフォルトの名無しさん
2021/09/15(水) 15:12:38.68ID:6EsPXkcj >>398
じゃあunsafe時には許可して欲しい
じゃあunsafe時には許可して欲しい
410デフォルトの名無しさん
2021/09/15(水) 15:24:13.77ID:a6LjJ0wO 暗黙の型変換が増えるのはやだよ
411デフォルトの名無しさん
2021/09/15(水) 20:24:30.93ID:77IP/X5S 緩く簡単に書きたい人向けの言語じゃないよね全体的に
412デフォルトの名無しさん
2021/09/15(水) 21:01:30.58ID:AIQN4pXi それはそう
緩く簡単に書けるせいで起きていた全てのバグを撲滅したい、的な執念を感じる
緩く簡単に書けるせいで起きていた全てのバグを撲滅したい、的な執念を感じる
413デフォルトの名無しさん
2021/09/15(水) 21:30:37.23ID:rqQTOJGj IntelliJ Rust pluginの新バージョン、関数とかの補完を機械学習でやるんだってさ
すごいね
試してないけど
すごいね
試してないけど
414デフォルトの名無しさん
2021/09/16(木) 00:03:22.08ID:5v2yv6GZ 誰も見ていなければ海や川でも裸で泳ぐCちゃんと
温泉の女湯でも深夜一人で水着で入るRustちゃん
温泉の女湯でも深夜一人で水着で入るRustちゃん
415デフォルトの名無しさん
2021/09/16(木) 00:56:52.16ID:sz29YBQA エラーハンドリング可能な形ですっきりしたルールを定義できるならやればいいんだけど
現実にそういう上手い方法がないなら煩雑でも変換の手順を書くしかない。
現実にそういう上手い方法がないなら煩雑でも変換の手順を書くしかない。
416デフォルトの名無しさん
2021/09/16(木) 01:12:36.12ID:Efcezeu+ 低レイヤーいじる言語のエラー処理内容の粒度はそれこそプログラムごとに違うとしか言いようがない。
だから仕方ない。
だから仕方ない。
417デフォルトの名無しさん
2021/09/16(木) 05:10:39.16ID:7K5k42SQ418デフォルトの名無しさん
2021/09/16(木) 05:50:12.68ID:P9SoBPvJ おっきしてきた
419デフォルトの名無しさん
2021/09/16(木) 06:27:10.25ID:s4mLRLKS 椎ちゃんの方逝くわw
420デフォルトの名無しさん
2021/09/16(木) 18:55:26.69ID:cHl8Y0Er as usize祭り絶賛開催中
unsafe fn calc(a_index: isize, b_index: isize) -> isize {
if a_index == a.len() as isize { return 0; };
let mut res: isize = 0;
for i in b_index..b.len() as isize {
if a[a_index as usize] == b[b_index as usize] {
res = res.max(calc(a_index + 1, b_index + 1) + 1);
}
}
res
}
unsafe fn calc(a_index: isize, b_index: isize) -> isize {
if a_index == a.len() as isize { return 0; };
let mut res: isize = 0;
for i in b_index..b.len() as isize {
if a[a_index as usize] == b[b_index as usize] {
res = res.max(calc(a_index + 1, b_index + 1) + 1);
}
}
res
}
421デフォルトの名無しさん
2021/09/16(木) 19:34:21.47ID:vxj0ze2Y422デフォルトの名無しさん
2021/09/16(木) 19:36:15.88ID:cHl8Y0Er unsafeだしな
そして、その指摘にas usizeを擁護(容認)する意見は皆無だっていう
そして、その指摘にas usizeを擁護(容認)する意見は皆無だっていう
423デフォルトの名無しさん
2021/09/16(木) 19:38:22.07ID:cHl8Y0Er あと祭り発生中の実況だったので稼働するコードではなく、
if a[a_index as usize] == b[i as usize] {
}
と修正した
if a[a_index as usize] == b[i as usize] {
}
と修正した
424デフォルトの名無しさん
2021/09/16(木) 20:03:32.03ID:Y8GNLhYC なんでunsafeなのかもわからないしなんでusizeじゃなくてisizeを受け取るのかもわからん
425デフォルトの名無しさん
2021/09/16(木) 20:06:54.23ID:Y8GNLhYC ああ、aとbグローバル変数なんかこれ?
426デフォルトの名無しさん
2021/09/16(木) 20:47:15.02ID:cHl8Y0Er 引数がマイナスになることもあるので条件判断の必要からisizeなんだよね
もしusizeを引数にするとしても、引数に渡すところでisize as usizeになるので、やっぱりusize祭りが大発生
お祭りワッショイワッショイ
もしusizeを引数にするとしても、引数に渡すところでisize as usizeになるので、やっぱりusize祭りが大発生
お祭りワッショイワッショイ
427デフォルトの名無しさん
2021/09/16(木) 21:30:12.52ID:+FxVjnil 引数がマイナスになるならチェックしないと範囲外アクセスするだろ馬鹿か?
428デフォルトの名無しさん
2021/09/16(木) 22:25:53.04ID:XSar1IoX 今どきIndex使って回すとか化石脳かよ
429デフォルトの名無しさん
2021/09/16(木) 22:48:14.07ID:VRkuCUuZ ボロクソワロタ
430デフォルトの名無しさん
2021/09/16(木) 23:11:45.54ID:C/6oeybD431デフォルトの名無しさん
2021/09/17(金) 01:14:24.53ID:+px3FZ+H グローバル変数小文字にしたら警告出なかったっけ
432デフォルトの名無しさん
2021/09/17(金) 03:56:57.86ID:L8yNiQtv そもそもusizeで受け取って呼び出し側でケアすべきやろ
433デフォルトの名無しさん
2021/09/17(金) 13:27:45.55ID:5NPaLNkl >>412
経験的に、縛れば縛るほど最終的にはラクできるようなのを皆知ってると思う
ラクに書けるような言語は一見いいのだが
人間が生まれ持って自堕落であるのを伴って
最終的には苦しみをもたらすことになるコードを書いてしまう
経験的に、縛れば縛るほど最終的にはラクできるようなのを皆知ってると思う
ラクに書けるような言語は一見いいのだが
人間が生まれ持って自堕落であるのを伴って
最終的には苦しみをもたらすことになるコードを書いてしまう
434デフォルトの名無しさん
2021/09/17(金) 15:13:45.88ID:dr0oo8mV435デフォルトの名無しさん
2021/09/17(金) 15:20:07.79ID:0JdlCgnp 3歩あるけば忘れるからヘーキヘーキ
436デフォルトの名無しさん
2021/09/17(金) 16:32:00.60ID:5ZlSq2T+ いきなり unsafe fn とか書いてるあたり普段からrust書いるが競プロとかでついた変な癖を引きずってる人だと思う
余計悪いが
余計悪いが
437デフォルトの名無しさん
2021/09/17(金) 17:02:49.25ID:+63qaQLV >>420
これって何するコードなの?
これって何するコードなの?
438デフォルトの名無しさん
2021/09/17(金) 18:51:16.87ID:s3DmK0IG439デフォルトの名無しさん
2021/09/17(金) 20:36:20.90ID:B1Ewzio/ usize祭り絶賛発生中
while !next_pos.is_empty() {
let mut tmp_next_pos: Vec<(i32, i32)> = Vec::new();
for &(n_yr, n_xc) in &next_pos {
map[n_yr as usize][n_xc as usize] = 2;
for (a_yr, a_xc) in around(n_yr, n_xc) {
if a_yr >= 0 && a_yr < m_yr + 2 && a_xc >= 0 && a_xc < m_xc + 2 {
if map[a_yr as usize][a_xc as usize] == 0 {
map[a_yr as usize][a_xc as usize] = 2;
tmp_next_pos.push((a_yr, a_xc))
}
if map[a_yr as usize][a_xc as usize] == 1 {
total += 1;
}
}
}
}
next_pos = tmp_next_pos;
}
while !next_pos.is_empty() {
let mut tmp_next_pos: Vec<(i32, i32)> = Vec::new();
for &(n_yr, n_xc) in &next_pos {
map[n_yr as usize][n_xc as usize] = 2;
for (a_yr, a_xc) in around(n_yr, n_xc) {
if a_yr >= 0 && a_yr < m_yr + 2 && a_xc >= 0 && a_xc < m_xc + 2 {
if map[a_yr as usize][a_xc as usize] == 0 {
map[a_yr as usize][a_xc as usize] = 2;
tmp_next_pos.push((a_yr, a_xc))
}
if map[a_yr as usize][a_xc as usize] == 1 {
total += 1;
}
}
}
}
next_pos = tmp_next_pos;
}
440デフォルトの名無しさん
2021/09/17(金) 21:04:31.14ID:dr0oo8mV >>439
しつこいなw
しつこいなw
441デフォルトの名無しさん
2021/09/17(金) 21:09:35.15ID:j5AVpFMs isize ってどういう時に使います?
添字は基本的に usize しか使いませんし符号付き整数が欲しくなったらi32かi64で大体事足りるのでいまいち使い所が分かってません
添字は基本的に usize しか使いませんし符号付き整数が欲しくなったらi32かi64で大体事足りるのでいまいち使い所が分かってません
442デフォルトの名無しさん
2021/09/17(金) 21:43:47.45ID:hv2MZm4l 添え字に使う値を算出する途中計算で負数が必要になったら isize が妥当という場合もある。
443デフォルトの名無しさん
2021/09/17(金) 21:44:59.72ID:NEgFw8y9 can isize and usize be different in rust?
Can isize and usize be different? Both of them can be used for memory size, index, offset.
Since usize is used for arrays why don't we just have usize
I am new to Rust so this might be a basic question.
・usize cannot be negative and is generally used for memory addresses, positions, indices, lengths (or sizes!).
・isize can be negative, and is generally used for offsets to addresses, positions, indices, or lengths.
https://stackoverflow.com/questions/55506647/can-isize-and-usize-be-different-in-rust
意識高い系がウンコードを量産し罵倒するクソスレ
Can isize and usize be different? Both of them can be used for memory size, index, offset.
Since usize is used for arrays why don't we just have usize
I am new to Rust so this might be a basic question.
・usize cannot be negative and is generally used for memory addresses, positions, indices, lengths (or sizes!).
・isize can be negative, and is generally used for offsets to addresses, positions, indices, or lengths.
https://stackoverflow.com/questions/55506647/can-isize-and-usize-be-different-in-rust
意識高い系がウンコードを量産し罵倒するクソスレ
444デフォルトの名無しさん
2021/09/17(金) 21:45:51.61ID:B1Ewzio/ そして、その結果、as usize祭りにもなる場合もある
445デフォルトの名無しさん
2021/09/17(金) 21:51:17.48ID:2U7psvzf >>432
経験的に縛れば縛るほど脱法行為が横行する。
経験的に縛れば縛るほど脱法行為が横行する。
446デフォルトの名無しさん
2021/09/17(金) 22:20:51.81ID:so2YCyjR RustlingsをReplitで動かして学習したいのですが、これってrustlingsコマンドはどうやって動かすのですか?
https://github.com/rust-lang/rustlings
公式サイトが用意しているReplitの環境で学習をやりたいのです
よろしくお願いします
https://github.com/rust-lang/rustlings
公式サイトが用意しているReplitの環境で学習をやりたいのです
よろしくお願いします
447デフォルトの名無しさん
2021/09/17(金) 23:24:24.54ID:L8yNiQtv >>446
ReplitのRustのバージョンが古くて(1.44)ビルド失敗するっぽい
見た感じローカルでやるのとそんな変わらん気がするから、
こだわりないならローカルでやるのが吉
この環境ビルドむっちゃくちゃ遅いし
ReplitのRustのバージョンが古くて(1.44)ビルド失敗するっぽい
見た感じローカルでやるのとそんな変わらん気がするから、
こだわりないならローカルでやるのが吉
この環境ビルドむっちゃくちゃ遅いし
448デフォルトの名無しさん
2021/09/17(金) 23:26:48.18ID:qc9SKwMT449デフォルトの名無しさん
2021/09/17(金) 23:34:57.92ID:L8yNiQtv450デフォルトの名無しさん
2021/09/17(金) 23:57:58.10ID:L8yNiQtv とはいえasナントカが一部のシチュエーションでめんどくさくなることはある(主に競プロ)
let (h, w) = (100usize, 100usize); // 多くの箇所ではusizeとして扱っている
let grid = vec![vec![0; w]; h]; // 横幅w 縦幅h 左上のマスの座標(0,0)のgrid
// 省略(なんかいろいろやる)
let (x, y) = some_func(); // 着目対象となるgridのマスの位置を(usize, usize)で取得
// (x, y)の上下左右のマスを対象になにかやる
for &(dx, dy) = &[(1i32, 0i32), (-1, 0), (0, 1), (0, -1)] {
let (x2, y2) = (x as i32 + dx, y as i32 + dy);
if x2 < 0 || x2 >= w as i32 || y2 < 0 || y2 >= h as i32 {
continue; // x2,y2がgridからはみ出してたら処理飛ばす
}
let (x2, y2) = (x2 as usize, y2 as usize); // できるだけusizeで処理したいので
// 省略(x2, y2を使っていろいろやる)
}
上下左右調べたいときに負の値が出てくるのがめんどくさい
一応workaroundはあって、for以下をこうする手がある
!0が2の補数的には-1として扱えるのでオーバーフローOKな足し算をする
for &(dx, dy) = &[(1usize, 0usize), (!0, 0), (0, 1), (0, !0)] {
let (x2, y2) = (x.wrapping_add(dx), y.wrapping_add(dy));
if x2 >= w || y2 >= h {
continue; // x2,y2がgridからはみ出してたら処理飛ばす
}
// 省略(x2, y2を使っていろいろやる)
}
let (h, w) = (100usize, 100usize); // 多くの箇所ではusizeとして扱っている
let grid = vec![vec![0; w]; h]; // 横幅w 縦幅h 左上のマスの座標(0,0)のgrid
// 省略(なんかいろいろやる)
let (x, y) = some_func(); // 着目対象となるgridのマスの位置を(usize, usize)で取得
// (x, y)の上下左右のマスを対象になにかやる
for &(dx, dy) = &[(1i32, 0i32), (-1, 0), (0, 1), (0, -1)] {
let (x2, y2) = (x as i32 + dx, y as i32 + dy);
if x2 < 0 || x2 >= w as i32 || y2 < 0 || y2 >= h as i32 {
continue; // x2,y2がgridからはみ出してたら処理飛ばす
}
let (x2, y2) = (x2 as usize, y2 as usize); // できるだけusizeで処理したいので
// 省略(x2, y2を使っていろいろやる)
}
上下左右調べたいときに負の値が出てくるのがめんどくさい
一応workaroundはあって、for以下をこうする手がある
!0が2の補数的には-1として扱えるのでオーバーフローOKな足し算をする
for &(dx, dy) = &[(1usize, 0usize), (!0, 0), (0, 1), (0, !0)] {
let (x2, y2) = (x.wrapping_add(dx), y.wrapping_add(dy));
if x2 >= w || y2 >= h {
continue; // x2,y2がgridからはみ出してたら処理飛ばす
}
// 省略(x2, y2を使っていろいろやる)
}
451デフォルトの名無しさん
2021/09/18(土) 00:02:40.07ID:WtcFUHdh 競技プログラミングは
正しいプログラミングスタイルから離れていく悪です
競技プログラミングスタイルな人と一緒に開発したい人は存在しないでしょう
正しいプログラミングスタイルから離れていく悪です
競技プログラミングスタイルな人と一緒に開発したい人は存在しないでしょう
452デフォルトの名無しさん
2021/09/18(土) 00:04:38.74ID:JD4YYnZP 正当なスタイルが分かった上で競技としての割り切り方も分かっているなら問題ないんだけど、
競技から学ぶと変な癖が付きやすいというのは私も感じるなぁ。
競技から学ぶと変な癖が付きやすいというのは私も感じるなぁ。
453デフォルトの名無しさん
2021/09/18(土) 00:15:51.96ID:NeCiGTRe454デフォルトの名無しさん
2021/09/18(土) 00:21:57.18ID:NeCiGTRe455デフォルトの名無しさん
2021/09/18(土) 01:57:08.86ID:T/YDtroe type off_t = i64;(64bitOS)だからisizeを使うという発想は分かる。
でも厳密にはRustにNonZeroなどがある以上は、"本来は"実装されたfnが正常に動作する数値範囲があり
プリミティブ型で数値範囲を再定義し型定義出来ると便利だけど…、Type Aliasがあるのに無いのが辛い。
別言語の例
type Natural = range[0 .. high(int)]
type RegisteredPort = range[1024..49151, int]
type SomeSignedInt = int | int8 | int16 | int32 | int64
反対だ、コンパイルが遅くなるだけだという意見も絶対に認めない!もあるが、上記のNonZeroなどを見ると
将来的には実装されるのではなかろうか、いやヌルポインタ最適化のためのNonZeroだから入らないのでは?
という意見も分かるが…
またas演算子でキャストは安全だという話だが、符号付きから符号無しへの変換は、当然、どういう結果に
なるかを知っているべきだが、基本的な事をすっ飛ばす人も多いし、負を許容するoffsetが明確かどうかは
コードをすべて追わないと分からない場合が多い。なおこれが出来ると、コード中のキャスト変換が減るので
動作も早くなると思われるし、fnにした時の引数チェックも行わなくても良い状況が期待できる。
現実的に今のバージョンならindexもoffsetもisizeで作り、負を許容できない所にチェックを入れるだけで
as usizeは使わなくて良い箇所なら使わない。
でも厳密にはRustにNonZeroなどがある以上は、"本来は"実装されたfnが正常に動作する数値範囲があり
プリミティブ型で数値範囲を再定義し型定義出来ると便利だけど…、Type Aliasがあるのに無いのが辛い。
別言語の例
type Natural = range[0 .. high(int)]
type RegisteredPort = range[1024..49151, int]
type SomeSignedInt = int | int8 | int16 | int32 | int64
反対だ、コンパイルが遅くなるだけだという意見も絶対に認めない!もあるが、上記のNonZeroなどを見ると
将来的には実装されるのではなかろうか、いやヌルポインタ最適化のためのNonZeroだから入らないのでは?
という意見も分かるが…
またas演算子でキャストは安全だという話だが、符号付きから符号無しへの変換は、当然、どういう結果に
なるかを知っているべきだが、基本的な事をすっ飛ばす人も多いし、負を許容するoffsetが明確かどうかは
コードをすべて追わないと分からない場合が多い。なおこれが出来ると、コード中のキャスト変換が減るので
動作も早くなると思われるし、fnにした時の引数チェックも行わなくても良い状況が期待できる。
現実的に今のバージョンならindexもoffsetもisizeで作り、負を許容できない所にチェックを入れるだけで
as usizeは使わなくて良い箇所なら使わない。
456デフォルトの名無しさん
2021/09/18(土) 09:35:47.96ID:z3n3Kv/4457デフォルトの名無しさん
2021/09/18(土) 11:21:13.85ID:I+biH5jK winitのmasterでstdwebのサポートが切られてweb_sysに一本化されていた
stdwebってオワコンになりつつあるのかな?
stdwebってオワコンになりつつあるのかな?
458デフォルトの名無しさん
2021/09/18(土) 17:05:43.72ID:NeCiGTRe >>455
NonZeroはOptionとかのサイズ最適化やポインタの値がnullでないことを示すのが主目的なので
汎用的な範囲を組み込み型で示すのはちょっと違うかと
必要ならnewtypeパターンで自分で作ればよい
NonZeroはOptionとかのサイズ最適化やポインタの値がnullでないことを示すのが主目的なので
汎用的な範囲を組み込み型で示すのはちょっと違うかと
必要ならnewtypeパターンで自分で作ればよい
459デフォルトの名無しさん
2021/09/18(土) 17:29:18.29ID:1LwUu6qJ 配列がusizeなのはpythonなんかのa[-1]の最後尾アクセスを見てると、なぜそんな言語仕様にしたのかと
off_tなんかを見ると不思議に思う。いずれも Index bounds checkが掛るのに。符号無し64bitの巨大な
配列が欲しかったから?でもi128とかあるし
off_tなんかを見ると不思議に思う。いずれも Index bounds checkが掛るのに。符号無し64bitの巨大な
配列が欲しかったから?でもi128とかあるし
460デフォルトの名無しさん
2021/09/18(土) 17:47:44.01ID:2OOJm5Lf インデックスiが実行時に決まるとき
配列のアクセスを内部的には *(p + i) にしたかったからじゃないかな
マイナスのとき〜っていう分岐をそこに入れずに最速でアクセスしたかったと
配列のアクセスを内部的には *(p + i) にしたかったからじゃないかな
マイナスのとき〜っていう分岐をそこに入れずに最速でアクセスしたかったと
461デフォルトの名無しさん
2021/09/18(土) 18:02:33.71ID:z3n3Kv/4 >>459
>符号無し64bitの巨大な配列が欲しかったから?
配列にマイナスの値は使わないんだから、そのぶんMAXの数を増やしたほうが
オーバーフローしにくいから安全だろってことらしい
でもどうせi32 as usizeとかi64 as usizeするから意味ないんですけどね!
>符号無し64bitの巨大な配列が欲しかったから?
配列にマイナスの値は使わないんだから、そのぶんMAXの数を増やしたほうが
オーバーフローしにくいから安全だろってことらしい
でもどうせi32 as usizeとかi64 as usizeするから意味ないんですけどね!
462デフォルトの名無しさん
2021/09/19(日) 12:46:43.77ID:/yxUr6Cy463デフォルトの名無しさん
2021/09/19(日) 12:55:45.99ID:HwX1dH8g464デフォルトの名無しさん
2021/09/19(日) 15:08:42.28ID:i7fTqS33 競プロの書き方を仕事でするわけないだろ
何言ってるんだ
何言ってるんだ
465デフォルトの名無しさん
2021/09/19(日) 22:06:10.71ID:0p9m0gya してるバカがいるから言ってんだよバカ。
466デフォルトの名無しさん
2021/09/19(日) 22:13:07.84ID:xwERW7V5 矯正してやれ
467デフォルトの名無しさん
2021/09/19(日) 22:58:17.41ID:i7fTqS33 アホか
競プロと仕事、書いてる時間がどっちが長いと思ってる
競プロは趣味 仕事で書いてるほうが圧倒的に長い
競プロでの書き方が仕事に引きずられることがあっても逆はない
そういうヤツがいるとか嘘をついてまで、
競プロに難癖つける理由がまったく理解できんわ
競プロと仕事、書いてる時間がどっちが長いと思ってる
競プロは趣味 仕事で書いてるほうが圧倒的に長い
競プロでの書き方が仕事に引きずられることがあっても逆はない
そういうヤツがいるとか嘘をついてまで、
競プロに難癖つける理由がまったく理解できんわ
468デフォルトの名無しさん
2021/09/19(日) 23:07:40.22ID:k8GedCcQ お前が競プロスタイルで仕事するかどうかの話じゃないし、競プロに難癖つけてもいない
469デフォルトの名無しさん
2021/09/19(日) 23:52:05.14ID:2t5v/hEZ 競プロRustスレを専用に立てて分離するのがベストな解決かな。
大多数を占める普通のRustプログラミングをする人たちにとっては役に立たない、特殊な競プロのコーティング方法が書かれても、批判議論に陥りがちでお互いにメリットないと思うのです。
大多数を占める普通のRustプログラミングをする人たちにとっては役に立たない、特殊な競プロのコーティング方法が書かれても、批判議論に陥りがちでお互いにメリットないと思うのです。
470デフォルトの名無しさん
2021/09/19(日) 23:53:50.32ID:i7fTqS33 難癖つけてるだろ
> 競技プログラミングは
> 正しいプログラミングスタイルから離れていく悪です
からの流れだからな
> 競技プログラミングは
> 正しいプログラミングスタイルから離れていく悪です
からの流れだからな
471デフォルトの名無しさん
2021/09/19(日) 23:59:33.71ID:2t5v/hEZ >>470
それ自体は合ってますよ。
もちろん各々を使い分けられる人もいるでしょう。
でもそれはその人個人の内部の話。
競プロなプログラミングスタイル自体は、正しいプログラミングスタイルから乖離しています。
それ自体は合ってますよ。
もちろん各々を使い分けられる人もいるでしょう。
でもそれはその人個人の内部の話。
競プロなプログラミングスタイル自体は、正しいプログラミングスタイルから乖離しています。
472デフォルトの名無しさん
2021/09/20(月) 00:04:36.59ID:9haXUQHR なんで競プロの話になってるんですか?
usizeをasしまくるのが競プロってこと?
usizeをasしまくるのが競プロってこと?
473デフォルトの名無しさん
2021/09/20(月) 00:14:27.54ID:LELesARs >>472
グローバル変数を用いたりunsafeを闇雲に利用している点
グローバル変数を用いたりunsafeを闇雲に利用している点
474デフォルトの名無しさん
2021/09/20(月) 00:28:27.43ID:sE5U575H475デフォルトの名無しさん
2021/09/20(月) 00:32:13.16ID:zcJdfkjB 仕事でRust書けるなんていい職場だな
476デフォルトの名無しさん
2021/09/20(月) 01:04:41.94ID:eNefvRk4 闇雲にunsafeを使うどころか脳死で全部の関数unsafeにする勢いだからな
477デフォルトの名無しさん
2021/09/20(月) 01:34:24.92ID:9haXUQHR asはみるけどunsafeは競プロじゃめったにお目にかかれないような
478デフォルトの名無しさん
2021/09/20(月) 11:13:37.01ID:rFqIM+Ck これ初めて知ったんだけど
Webブラウザサイド(フロントエンド)もRustで書けるのね
html!マクロでRustソースの中にHTMLもそのまま書けて更にその中にRustコードが書けてReact.jsのJSXみたいな感じね
https://yew.rs/ja/
Yew は WebAssembly によってマルチスレッドなWebアプリのフロントエンドを作ることができる、モダンな Rust のフレームワークです。
Webブラウザサイド(フロントエンド)もRustで書けるのね
html!マクロでRustソースの中にHTMLもそのまま書けて更にその中にRustコードが書けてReact.jsのJSXみたいな感じね
https://yew.rs/ja/
Yew は WebAssembly によってマルチスレッドなWebアプリのフロントエンドを作ることができる、モダンな Rust のフレームワークです。
479デフォルトの名無しさん
2021/09/20(月) 13:47:36.24ID:DPax/7qN そこまでする?
480デフォルトの名無しさん
2021/09/20(月) 15:13:17.24ID:xK2QDi8C alert使うだけでunwrap使うwebsysは使いたくない
481デフォルトの名無しさん
2021/09/20(月) 21:41:35.24ID:EyFwfCvn unwrapはそこらじゅうのサンプルで見かけるが、Rustクックブックでは、unwrapを許可していません。
こういう事も敷居が高い理由です
こういう事も敷居が高い理由です
482デフォルトの名無しさん
2021/09/20(月) 22:06:55.37ID:LO5PkHvF crates.ioのライブラリを読んでて見つけたんですが、
traitを実装するのに、まず構造体に直接同名のメソッドをimplして、
traitの実装ではそれを呼び出すだけ、みたいな方式でやられていました
Sがstruct、Tがtraitだとしてこんな感じです
impl S {
pub fn f(&self) {...}
}
impl T for S {
pub fn f(&self) { self.f(); }
}
これってimpl T for Sのほうに直接実装するのに比べて何かメリットがあるんでしょうか?
traitを実装するのに、まず構造体に直接同名のメソッドをimplして、
traitの実装ではそれを呼び出すだけ、みたいな方式でやられていました
Sがstruct、Tがtraitだとしてこんな感じです
impl S {
pub fn f(&self) {...}
}
impl T for S {
pub fn f(&self) { self.f(); }
}
これってimpl T for Sのほうに直接実装するのに比べて何かメリットがあるんでしょうか?
483デフォルトの名無しさん
2021/09/20(月) 23:56:14.72ID:5wFYkRVK >>480
alert()って簡易テストくらいでしか使わないような
>>481
意味が不明です
>>482
例えば今適当に作った例だけど
struct S { x: i32, y: i32, }
impl S {
fn fmt(&self) -> String {
format!("({}, {})", self.x, self.y)
}
}
impl std::fmt::Display for S {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "S{}", self.fmt())
}
}
fn main() {
let s = S { x: 123, y: 456 };
println!("{}", s.fmt()); // (123, 456)
println!("{}", s); // S(123, 456)
}
alert()って簡易テストくらいでしか使わないような
>>481
意味が不明です
>>482
例えば今適当に作った例だけど
struct S { x: i32, y: i32, }
impl S {
fn fmt(&self) -> String {
format!("({}, {})", self.x, self.y)
}
}
impl std::fmt::Display for S {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "S{}", self.fmt())
}
}
fn main() {
let s = S { x: 123, y: 456 };
println!("{}", s.fmt()); // (123, 456)
println!("{}", s); // S(123, 456)
}
484デフォルトの名無しさん
2021/09/21(火) 03:25:03.00ID:kmDESzsF485デフォルトの名無しさん
2021/09/21(火) 09:21:03.28ID:asWFySWg >>483
これ見て思ったんだけど、
メソッド名と引数全く同じだった場合で、
構造体のメソッドがpubで、
トレイトのほう優先的に呼び出したい場合ってどうするの?
そもそもメソッド名被らせるなって話ではあるんだけど
これ見て思ったんだけど、
メソッド名と引数全く同じだった場合で、
構造体のメソッドがpubで、
トレイトのほう優先的に呼び出したい場合ってどうするの?
そもそもメソッド名被らせるなって話ではあるんだけど
486482
2021/09/21(火) 10:01:30.32ID:aEoN/PBD すみません、impl Sもimpl T for Sもpubは付いていませんでした……
Tがpubなので、外部にはTの実装としてのfだけが見える状態ですね
>>483
振る舞いを変えたいなら分ける意味も分かるんですけど、完全に同じなんですよね
>>484
すっきりするというのは確かに読んでて思いました
実際非公開の関数が他にもありました
結局これが最大の理由なんですかね?
>>485
こんな感じでいけますね
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=10cdbd17798b14faa5fb6619ceb0739d
Tがpubなので、外部にはTの実装としてのfだけが見える状態ですね
>>483
振る舞いを変えたいなら分ける意味も分かるんですけど、完全に同じなんですよね
>>484
すっきりするというのは確かに読んでて思いました
実際非公開の関数が他にもありました
結局これが最大の理由なんですかね?
>>485
こんな感じでいけますね
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=10cdbd17798b14faa5fb6619ceb0739d
487デフォルトの名無しさん
2021/09/21(火) 14:10:55.34ID:QKlGGi7s 気持ち悪い
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 台湾有事での集団的自衛権行使に「賛成」が48.8%、「反対」が44.2% ★5 [♪♪♪★]
- 台湾有事での集団的自衛権行使に「賛成」が48.8%、「反対」が44.2% ★4 [♪♪♪★]
- 高市早苗首相、独自貫いた1カ月 会食ゼロ、議員宿舎で勉強漬け「飲んでる暇があれば、政策を練り、資料を読みたい」 [Hitzeschleier★]
- 【MLB】大谷翔平、山本由伸、佐々木朗希WBC出場辞退が確実に! トランプ大統領「ロス五輪最優先」指令 どうなる侍ジャパン [牛丼★]
- 【英FT】国土の大部分を日本の残忍な占領下におかれたという苦しみの記憶を今なお抱え続けている中国 [1ゲットロボ★]
- 岐阜発激安スーパー「バロー」横浜にオープン! [おっさん友の会★]
- 高市早苗「G20サミット、なめられない服を選びました。外交交渉でマウント取れる服買わないとなぁ」大炎上★3 [165981677]
- 【悲報】日本人、突然全員高市早苗の反転アンチになる。外交勝負服発言がどうしても許せない模様 [517791167]
- 【んな専🏡】ルーナイトとたこ焼きパーティするのらぁ(・o・🍬)【ホロライブ▶】
- 有識者「中国からのレアアースは止められても問題ない。高市さんがアメリカから買えばいい」 [834922174]
- 【誰でも】雑談広場★0
- 中国、高市早苗を国連に提訴。「国際社会に問う」 [271912485]
