公式
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
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 気持ち悪い
488デフォルトの名無しさん
2021/09/21(火) 20:13:53.65ID:jzXJ8gRI >>473
match お前の職場にはコーディング規約がないの? {
規約でunsafeが許されている => { ならunsafe使うの自由だろ。問題があるなら規約を改正しろ }
規約でunsafeは禁止されているが使ってるヤツがいる => { ならなんでunsafeを利用してコーディングしてるヤツがいるんだよ。そいつをなんとかしろ }
}
結論 別に許可されてるなら自由だろ
それが問題だと思うなら上司にいって禁止させるのが先
match お前の職場にはコーディング規約がないの? {
規約でunsafeが許されている => { ならunsafe使うの自由だろ。問題があるなら規約を改正しろ }
規約でunsafeは禁止されているが使ってるヤツがいる => { ならなんでunsafeを利用してコーディングしてるヤツがいるんだよ。そいつをなんとかしろ }
}
結論 別に許可されてるなら自由だろ
それが問題だと思うなら上司にいって禁止させるのが先
489デフォルトの名無しさん
2021/09/21(火) 20:16:09.40ID:jzXJ8gRI おっと最後にこれが必要か
_ => { コーディング規約ぐらい決めとけ。決められてないぐらいの組織にいるなら文句いうな。諦めるか転職しろ }
_ => { コーディング規約ぐらい決めとけ。決められてないぐらいの組織にいるなら文句いうな。諦めるか転職しろ }
490デフォルトの名無しさん
2021/09/21(火) 20:37:04.07ID:KTLm+LXj キモ
491デフォルトの名無しさん
2021/09/21(火) 20:43:04.95ID:aEoN/PBD 規約で禁止されていてみんな守ってる場合にコーディング規約決めろと怒られるバグ
492デフォルトの名無しさん
2021/09/21(火) 20:53:30.60ID:jzXJ8gRI493デフォルトの名無しさん
2021/09/21(火) 20:54:04.75ID:YS0x7nOl 動かないコーディング規約を作られても困るわ
どのタイミングでもいいから自動で弾く仕組みまで作らないと
…誰かgit hookの練習で作ってみない?
どのタイミングでもいいから自動で弾く仕組みまで作らないと
…誰かgit hookの練習で作ってみない?
494デフォルトの名無しさん
2021/09/21(火) 21:04:02.40ID:j1Ojj5Hg こういうキチガイがいて邪魔だから
競プロは専用スレを立ててそこへ隔離すること
競プロは専用スレを立ててそこへ隔離すること
495デフォルトの名無しさん
2021/09/21(火) 21:09:08.77ID:asWFySWg なんで競プロの話に規約が出てくるんすか
496デフォルトの名無しさん
2021/09/21(火) 21:32:11.36ID:4JalLCnu rust書いたことない障がい者が騒いでるな
ゴミコード晒して叩かれたのが相当悔しかったのか
なら自分の腕を磨けよ
やってることが数人しかいない過疎スレを荒らすって
どうやったらそう言う思考になるわけ
ゴミコード晒して叩かれたのが相当悔しかったのか
なら自分の腕を磨けよ
やってることが数人しかいない過疎スレを荒らすって
どうやったらそう言う思考になるわけ
497デフォルトの名無しさん
2021/09/21(火) 23:20:56.90ID:qogxB4xv そら競プロの解答コードが規約破りまくりなの見れば関係はあるわな
498デフォルトの名無しさん
2021/09/22(水) 02:11:22.59ID:U1/YCban そもそもunsafeの利用の明確な基準って決められるのか?
利用を完全に禁止することはできるかもしないが、使ってOKな条件を担当者の最良が入り込む余地がないレベルで厳密に決めるのは難しそう
利用を完全に禁止することはできるかもしないが、使ってOKな条件を担当者の最良が入り込む余地がないレベルで厳密に決めるのは難しそう
499デフォルトの名無しさん
2021/09/22(水) 03:25:11.12ID:+50nKS9n >>498
例えばVecの実装にも一部unsafeが使われておりunsafeは忌避すべきものではなく有用なものであるがその使用には厳しい条件がある
@unsafeが極狭い範囲に閉じ込められており抽象化されたインターフェースによりその存在を意識せずに使えること
Aunsafeを使用することで明白にその操作の効率が良くなるもしくは低レベル操作によりその使用が避けられないこと
Bunsafeの使用部分がその関係する範囲全体の一貫性において完全に安全な操作であると確認できること
以上3点が関係者により合意確認できている場合のみunsafeの使用が認められそして上位ではその存在を気にせず安全に使うことができる
例えばVecの実装にも一部unsafeが使われておりunsafeは忌避すべきものではなく有用なものであるがその使用には厳しい条件がある
@unsafeが極狭い範囲に閉じ込められており抽象化されたインターフェースによりその存在を意識せずに使えること
Aunsafeを使用することで明白にその操作の効率が良くなるもしくは低レベル操作によりその使用が避けられないこと
Bunsafeの使用部分がその関係する範囲全体の一貫性において完全に安全な操作であると確認できること
以上3点が関係者により合意確認できている場合のみunsafeの使用が認められそして上位ではその存在を気にせず安全に使うことができる
500デフォルトの名無しさん
2021/09/22(水) 04:21:37.31ID:HMywcfFm501デフォルトの名無しさん
2021/09/22(水) 07:58:09.34ID:5QejlQFf 使わざるを得ないパターンを提示(この時点で滅多に無い事が分かる)、当てはまらない物は原則禁止
本来要らない箇所で使おうとする輩が湧いて出ないようにするのが目的
本来要らない箇所で使おうとする輩が湧いて出ないようにするのが目的
502デフォルトの名無しさん
2021/09/22(水) 10:40:17.54ID:88WbS542 ノーコメントunsafeは問答無用で禁止くらいのことはしてもいいと思う
そのくらいunsafeはやばい
そのくらいunsafeはやばい
503デフォルトの名無しさん
2021/09/22(水) 11:36:51.20ID:Gy06LVHu stdのunsafe APIに関してはそうだと思うけど
crates.ioのライブラリ群にまでそういうの持ち出されると面倒だなあ
crates.ioのライブラリ群にまでそういうの持ち出されると面倒だなあ
504デフォルトの名無しさん
2021/09/22(水) 12:19:04.62ID:U1/YCban clippyもpubなunsafe fnにはドキュメントコメントに # Safety のセクションがないとデフォルトで警告出すので
コメントつけるのは最低限やっておくべきラインだと思う
https://rust-lang.github.io/rust-clippy/master/#missing_safety_doc
コメントつけるのは最低限やっておくべきラインだと思う
https://rust-lang.github.io/rust-clippy/master/#missing_safety_doc
505デフォルトの名無しさん
2021/09/22(水) 12:31:35.55ID:aOvfflz7 競プロの人ってレギュレーション守れば何してもいいって考え方の人が多いよね。
規約次第ってのが正にそれ。
unsafe みたいに取り扱いが繊細な機能は基本使わない、使う時には議論した上で限定的に使うみたいな感じに取り扱うのがほとんどだろ。
規約で機械的には決められないと思うよ。
規約次第ってのが正にそれ。
unsafe みたいに取り扱いが繊細な機能は基本使わない、使う時には議論した上で限定的に使うみたいな感じに取り扱うのがほとんどだろ。
規約で機械的には決められないと思うよ。
506デフォルトの名無しさん
2021/09/22(水) 13:23:06.09ID:88WbS542 競プロでunsafeなんて使わないよ
グローバル変数おじさんなら知らんけど
グローバル変数おじさんなら知らんけど
507デフォルトの名無しさん
2021/09/22(水) 13:53:44.01ID:HlHaH6ql 久々にusize祭りキタ━━━━(゚∀゚)━━━━!!
unsafe fn calc(bit: i32) -> i32 {
if bit == 0 { return 0; };
if DP[bit as usize] != -1 { return DP[bit as usize]; };
let mut start_id: i32 = 0;
for i in 1..=K_NUM { if bit & 1 << i == 0 { start_id += C_NUM[i]; }; }
let mut res: i32 = i32::MAX;
for i in 1..=K_NUM as i32 {
if bit & 1 << i > 0 {
let mut end_id: i32 = start_id + C_NUM[i as usize];
let mut num: i32 = end_id - start_id - (SUM[end_id as usize][i as usize] - SUM[start_id as usize][i as usize]);
res = res.min(calc(bit ^ 1 << i) + num);
}
}
DP[bit as usize] = res;
res
}
unsafe fn calc(bit: i32) -> i32 {
if bit == 0 { return 0; };
if DP[bit as usize] != -1 { return DP[bit as usize]; };
let mut start_id: i32 = 0;
for i in 1..=K_NUM { if bit & 1 << i == 0 { start_id += C_NUM[i]; }; }
let mut res: i32 = i32::MAX;
for i in 1..=K_NUM as i32 {
if bit & 1 << i > 0 {
let mut end_id: i32 = start_id + C_NUM[i as usize];
let mut num: i32 = end_id - start_id - (SUM[end_id as usize][i as usize] - SUM[start_id as usize][i as usize]);
res = res.min(calc(bit ^ 1 << i) + num);
}
}
DP[bit as usize] = res;
res
}
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【🐼】パンダ、日本で会えなくなる? 中国との関係悪化で不安の声 [ぐれ★]
- 台湾有事での集団的自衛権行使に「賛成」が48.8%、「反対」が44.2% ★6 [♪♪♪★]
- 高市早苗首相、独自貫いた1カ月 会食ゼロ、議員宿舎で勉強漬け「飲んでる暇があれば、政策を練り、資料を読みたい」 [Hitzeschleier★]
- 竹中平蔵氏、万博は大成功だったと持論 批判していた人々にチクリ「反省の弁の一つも聞きたい」 [muffin★]
- 【MLB】大谷翔平、山本由伸、佐々木朗希WBC出場辞退が確実に! トランプ大統領「ロス五輪最優先」指令 どうなる侍ジャパン [牛丼★]
- 【立憲民主党】「質問レベルの低さが立憲の存立危機事態」台湾有事発言を引き出した立憲“執拗追及”が波紋… ★2 [尺アジ★]
- 【実況】博衣こよりのえちえちKoZMy5D晩酌🧪❄🫘
- 【実況】博衣こよりのえちえちKoZMy4D晩酌🧪❄🫘
- 【んな専🏡】もっと守護ってルーナイト(・o・🍬)【ホロライブ▶】
- 【ござ専🏡】風間隊🥷集合でござる🏯【風間いろは🍃】
- 【速報】高市早苗、G20マウントファッションショー開催 [115996789]
- 【速報】高市首相「国際社会は危機に直面している」 [256556981]
