公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust
公式ドキュメント
https://www.rust-lang.org/learn
Web上の実行環境
https://play.rust-lang.org
※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/
※次スレは原則>>980が立てること
前スレ
Rust part28
https://mevius.5ch.net/test/read.cgi/tech/1742805420/
ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.5ch.net/test/read.cgi/tech/1514107621/
Rust part29
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2025/05/03(土) 00:47:30.13ID:phVJ5tWC351デフォルトの名無しさん
2025/05/10(土) 18:06:29.45ID:GFzLbQz1 我はガイジガガガイジ天地入れざる障害児
352デフォルトの名無しさん
2025/05/10(土) 18:11:29.44ID:K3qP9/A2 不勉強で天地入れざると言う言葉を知らなかったが
明治とかの言葉なのかな?
学があるね
明治とかの言葉なのかな?
学があるね
353デフォルトの名無しさん
2025/05/10(土) 18:22:28.75ID:GFzLbQz1354デフォルトの名無しさん
2025/05/10(土) 18:23:33.01ID:K3qP9/A2 どうせ俺以外誰も見ていないから好きなだけ荒らせばいいと思うよ
355デフォルトの名無しさん
2025/05/10(土) 18:23:55.63ID:GFzLbQz1 おちつきました。すみませんでした…
356デフォルトの名無しさん
2025/05/10(土) 18:29:52.94ID:Mv0kFcWv357デフォルトの名無しさん
2025/05/10(土) 18:58:55.45ID:Pq21kD+5 夏休みはまだ早いぞ
358デフォルトの名無しさん
2025/05/10(土) 19:15:47.47ID:K3qP9/A2 業界には何らかの形でメンタルを病んでる人間が50万人以上いると思う
359デフォルトの名無しさん
2025/05/10(土) 19:53:17.55ID:39sc/8ak このスレは特殊だから騙されないように
360デフォルトの名無しさん
2025/05/10(土) 20:19:31.95ID:K3qP9/A2 自分は悪質でなければ荒らしを許容するスレにいた
そこでは荒らしとも楽しく話してそのうち荒らしが真面目なコテになったりしていた
みんなもうどこかに行ってしまったのが残念だけどそれも運命だなと
そこでは荒らしとも楽しく話してそのうち荒らしが真面目なコテになったりしていた
みんなもうどこかに行ってしまったのが残念だけどそれも運命だなと
361デフォルトの名無しさん
2025/05/10(土) 20:45:49.44ID:+8W9QSNf 病院行けよ
俺は今日行ったぞ
俺は今日行ったぞ
362デフォルトの名無しさん
2025/05/10(土) 21:12:29.85ID:RAkiMuTX unsafeなライブラリのラッパーでsafeに設計するのってどうやるの
363デフォルトの名無しさん
2025/05/10(土) 21:22:13.51ID:JK+pyj3t F-22 ada
F-35 C++
F-35 C++
364デフォルトの名無しさん
2025/05/10(土) 21:48:52.45ID:Mv0kFcWv365デフォルトの名無しさん
2025/05/10(土) 21:52:02.98ID:arKsDnK7 >>362
未定義動作の可能性を排除するために必要な条件を全部チェックする
panicとデッドロックはOKらしい(停止すれば許される)
No matter what, Safe Rust can't cause Undefined Behavior.
https://doc.rust-lang.org/nomicon/safe-unsafe-meaning.html
未定義動作の可能性を排除するために必要な条件を全部チェックする
panicとデッドロックはOKらしい(停止すれば許される)
No matter what, Safe Rust can't cause Undefined Behavior.
https://doc.rust-lang.org/nomicon/safe-unsafe-meaning.html
366デフォルトの名無しさん
2025/05/10(土) 22:22:13.21ID:M/F23qJj >>342
そういう低レベルな現場は無視してもいいんだよ
現在もJSのフレームワークは乱立しながら変化進化し続けているように多様性がある
今回の件と関係なくwasmを既に併用しているところも多いからその点もだいじょうぶ
そういう低レベルな現場は無視してもいいんだよ
現在もJSのフレームワークは乱立しながら変化進化し続けているように多様性がある
今回の件と関係なくwasmを既に併用しているところも多いからその点もだいじょうぶ
367デフォルトの名無しさん
2025/05/10(土) 22:48:31.18ID:K3qP9/A2 誰がその多様性とかについていくのか?
お前が低レベルな現場と呼ぶ環境だろう?
お前が低レベルな現場と呼ぶ環境だろう?
368デフォルトの名無しさん
2025/05/10(土) 23:29:16.41ID:tNjV2wjQ フロントにRustを使ってる「高レベル」なプロダクトって何があるの?
バックエンドなら分かるけど
その基準なら世の中のビジネス的に成功してるサービスの殆どが低レベルでしょ
バックエンドなら分かるけど
その基準なら世の中のビジネス的に成功してるサービスの殆どが低レベルでしょ
369デフォルトの名無しさん
2025/05/11(日) 00:02:17.99ID:1LIDIycD370デフォルトの名無しさん
2025/05/11(日) 00:43:43.27ID:qcGHvz/x 子供が使うバリアの高度版
371デフォルトの名無しさん
2025/05/11(日) 00:48:37.35ID:kSJwinQr 内部で使う関数がunsafeである理由を理解して未定義動作の可能性を排除できてないなら
外側の関数にもunsafeをつける約束
外側の関数にもunsafeをつける約束
372デフォルトの名無しさん
2025/05/11(日) 00:49:47.08ID:/xxB2yrb unsafeは「危険」というよりも「コンパイラが安全性をチェックできない」ブロックだと思う
内部的に unsafe を使ってても、ラップした型や関数を外から使う分には安全とみなせるなら問題ない
理想的には
・内部的にunsafeを使っているけど、外から見れば安全 -> unsafe を外して良い
・内部的に unsafe を使っており、かつその関数は利用者が適切にコードを書かないと危険 -> その関数も unsafe とマークするべき
標準ライブラリやきちんとしたライブラリは基本的にこの法則に従ってる
問題はユーザーのコードで、書こうと思えば「問題はあるけど unsafe とマークされてない関数」は作れてしまう
そこは自己責任の問題
けど、セグフォみたいなバグが実際に起きた場合に、直接の原因となるコードは unsafe ブロックの中に絞れる (ことが多い) から、それでもかなりマシだと思う
C++だとコード全体が unsafe ブロックの中にあるようなものなので…
内部的に unsafe を使ってても、ラップした型や関数を外から使う分には安全とみなせるなら問題ない
理想的には
・内部的にunsafeを使っているけど、外から見れば安全 -> unsafe を外して良い
・内部的に unsafe を使っており、かつその関数は利用者が適切にコードを書かないと危険 -> その関数も unsafe とマークするべき
標準ライブラリやきちんとしたライブラリは基本的にこの法則に従ってる
問題はユーザーのコードで、書こうと思えば「問題はあるけど unsafe とマークされてない関数」は作れてしまう
そこは自己責任の問題
けど、セグフォみたいなバグが実際に起きた場合に、直接の原因となるコードは unsafe ブロックの中に絞れる (ことが多い) から、それでもかなりマシだと思う
C++だとコード全体が unsafe ブロックの中にあるようなものなので…
373デフォルトの名無しさん
2025/05/11(日) 00:50:52.82ID:10YJ6Wg3 >>365
Undefinedの有無もなにも標準化されてないからなぁ
Undefinedの有無もなにも標準化されてないからなぁ
374デフォルトの名無しさん
2025/05/11(日) 00:52:29.93ID:qcGHvz/x バリア!バリアしたから大丈夫!
375デフォルトの名無しさん
2025/05/11(日) 01:02:20.84ID:kSJwinQr376デフォルトの名無しさん
2025/05/11(日) 01:18:27.03ID:OAc7wOSx unsafe = Rustコンパイラが安全性を保証してくれない = プログラマが自分の責任で安全性を保証しなければならない = C/C++と同じ状態
逆に言えば、safeつまりunsafeではない、とは、Rustコンパイラが安全性を保証できる状況にしないといけない
未定義動作がないことが根幹にある
だから未定義動作とは何か、どういう時に起きるのか、どうすれば無くせるのか、が最重要
それを完全に理解するまでは、関数内部でunsafeを使って外をsafeな関数、にする判断をしてはいけない
逆に言えば、safeつまりunsafeではない、とは、Rustコンパイラが安全性を保証できる状況にしないといけない
未定義動作がないことが根幹にある
だから未定義動作とは何か、どういう時に起きるのか、どうすれば無くせるのか、が最重要
それを完全に理解するまでは、関数内部でunsafeを使って外をsafeな関数、にする判断をしてはいけない
377デフォルトの名無しさん
2025/05/11(日) 01:20:41.47ID:Vd6Ddgx+ unsafe functionは使いどころが微妙だね
unsafe指定の理由が不明だし基準も開発者次第でまちまち
C#みたいにunsafeにはコンテキストとしての役割しか持たせない方が一貫性がある
呼び出し元に注意させたいんならunsafe_hogeみたいなネーミングルールで十分だった
unsafe指定の理由が不明だし基準も開発者次第でまちまち
C#みたいにunsafeにはコンテキストとしての役割しか持たせない方が一貫性がある
呼び出し元に注意させたいんならunsafe_hogeみたいなネーミングルールで十分だった
378デフォルトの名無しさん
2025/05/11(日) 01:31:46.55ID:kSJwinQr バリアより感染症対策で流行ったゾーニングのイメージだな
感染リスクのあるunsafeゾーンと安全なsafeゾーンがあって
unsafeからsafeに持ち込むときは消毒(検査)が必須みたいな感じ
運用が雑になって事故るのも同じ
感染リスクのあるunsafeゾーンと安全なsafeゾーンがあって
unsafeからsafeに持ち込むときは消毒(検査)が必須みたいな感じ
運用が雑になって事故るのも同じ
379デフォルトの名無しさん
2025/05/11(日) 01:36:40.21ID:/xxB2yrb >>376
> それを完全に理解するまでは、関数内部でunsafeを使って外をsafeな関数、にする判断をしてはいけない
それをやると、一つの関数を unsafe にした時点でそれが呼び出し元に波及して、プログラム全体に unsafe が広がらない?
深刻なバグがコード内のどこで起こってるかを特定したい場面だと、 unsafeは本当に unsafe な操作をしてる箇所に限定されてた方が探しやすいと思う
> それを完全に理解するまでは、関数内部でunsafeを使って外をsafeな関数、にする判断をしてはいけない
それをやると、一つの関数を unsafe にした時点でそれが呼び出し元に波及して、プログラム全体に unsafe が広がらない?
深刻なバグがコード内のどこで起こってるかを特定したい場面だと、 unsafeは本当に unsafe な操作をしてる箇所に限定されてた方が探しやすいと思う
380デフォルトの名無しさん
2025/05/11(日) 01:47:17.60ID:OAc7wOSx381デフォルトの名無しさん
2025/05/11(日) 02:07:37.23ID:OAc7wOSx 「unsafe利用箇所をunsafeブロックで囲えば終わり」は、よくある勘違い
まず一次的には「それを含む関数もunsafe fnにしなければならない」が正解
その上で「内部でunsafeを使ったことで生じる問題が、その関数単独でまたはモジュール全体で閉じ込めることができているかを判断できてから、ようやくunsafe fnをfnにできる」が正解
まず一次的には「それを含む関数もunsafe fnにしなければならない」が正解
その上で「内部でunsafeを使ったことで生じる問題が、その関数単独でまたはモジュール全体で閉じ込めることができているかを判断できてから、ようやくunsafe fnをfnにできる」が正解
382デフォルトの名無しさん
2025/05/11(日) 06:19:57.03ID:Skl5F9WB unsafeな理由をブロック外部で処理すりゃsafeに出来るじゃん
たとえばなraw pointer参照が危険だとして渡す前にスタックまたはヒープ内の正しいアドレスであることを確認して引数を渡すとかの、外部でのチェック(unsafeに至る条件の排除)すれば無毒化できるわけで
そんなんC言語だって変わらんやん。Cで汎用的な関数書いたらほぼほぼポインターだらけになるし、ポインターのチェックせずに使うなんてことは危険すぎてありえんのと一緒やん
C言語にrustコンパイラーのunsafeの枠組みだけ組み込んでsafeじゃなきゃエラーにしますにしたら、コードの5割ぐらいはunsafeになってそうやけどな。標準ライブラリーからしていくらでも危険なアクセスできるし
たとえばなraw pointer参照が危険だとして渡す前にスタックまたはヒープ内の正しいアドレスであることを確認して引数を渡すとかの、外部でのチェック(unsafeに至る条件の排除)すれば無毒化できるわけで
そんなんC言語だって変わらんやん。Cで汎用的な関数書いたらほぼほぼポインターだらけになるし、ポインターのチェックせずに使うなんてことは危険すぎてありえんのと一緒やん
C言語にrustコンパイラーのunsafeの枠組みだけ組み込んでsafeじゃなきゃエラーにしますにしたら、コードの5割ぐらいはunsafeになってそうやけどな。標準ライブラリーからしていくらでも危険なアクセスできるし
383デフォルトの名無しさん
2025/05/11(日) 07:03:44.41ID:Ix0M85KV >>382
Rustでプログラミングしたことない人には理解できないのは仕方ないが的外れ
そのCで手動でチェックをして使うようなことは
Rustではunsafeを使わずとも普通に書くことができて自動的にチェックしてくれて安全かつ楽
むしろRustでunsafeを使う頻出パターンの一つは真逆
その自動チェックを無くすためにunsafeが使われる
例えばあるアルゴリズムで既に自動チェックされて既に安全なものがアルゴリズムの都合で二重に自動チェックされてしまいコンパイルでの最適化でも消えないとする
その2回目の自動チェックを無くすためにunsafeを使う
もしそのアルゴリズムが1つの関数で完了するならばその関数外に影響はないため
関数内部でunsafeを使っていても関数自体は外向けにsafeにすることができる
そのアルゴリズムで2回目の自動チェック省略が常に正しく安全なことはプログラマが安全性を保証することになる
これがunsafeを用いて極限まで速くしつつ安全な関数を生み出すRustの典型的なパターン
Rustでプログラミングしたことない人には理解できないのは仕方ないが的外れ
そのCで手動でチェックをして使うようなことは
Rustではunsafeを使わずとも普通に書くことができて自動的にチェックしてくれて安全かつ楽
むしろRustでunsafeを使う頻出パターンの一つは真逆
その自動チェックを無くすためにunsafeが使われる
例えばあるアルゴリズムで既に自動チェックされて既に安全なものがアルゴリズムの都合で二重に自動チェックされてしまいコンパイルでの最適化でも消えないとする
その2回目の自動チェックを無くすためにunsafeを使う
もしそのアルゴリズムが1つの関数で完了するならばその関数外に影響はないため
関数内部でunsafeを使っていても関数自体は外向けにsafeにすることができる
そのアルゴリズムで2回目の自動チェック省略が常に正しく安全なことはプログラマが安全性を保証することになる
これがunsafeを用いて極限まで速くしつつ安全な関数を生み出すRustの典型的なパターン
384デフォルトの名無しさん
2025/05/11(日) 08:49:42.45ID:tAEYEseM https://doc.rust-lang.org/book/ch20-01-unsafe-rust.html
これが全て
unsafe function に関しては、長文複おじが主張するほどunsafeを含む関数に対して積極的に指定すべきものではなく、
むしろ極力safeとしてラップすることを推奨するトーンで書かれているように感じる
「unsafe functionは呼び出し元に注意させるためのマーク」という解釈は適切であり、常識的に考えて中でunsafe使ってようと呼び方によって未定義動作が生じるような関数はそもそも作るべきではない
これが全て
unsafe function に関しては、長文複おじが主張するほどunsafeを含む関数に対して積極的に指定すべきものではなく、
むしろ極力safeとしてラップすることを推奨するトーンで書かれているように感じる
「unsafe functionは呼び出し元に注意させるためのマーク」という解釈は適切であり、常識的に考えて中でunsafe使ってようと呼び方によって未定義動作が生じるような関数はそもそも作るべきではない
385デフォルトの名無しさん
2025/05/11(日) 09:06:54.66ID:qcGHvz/x unsafe指定の理由が不明って斬新な視点だと思うけどね
他の言語でunsafe使ってるから意味は理解出来る
他の言語でunsafe使ってるから意味は理解出来る
386デフォルトの名無しさん
2025/05/11(日) 09:11:42.89ID:1l4O+k/P387デフォルトの名無しさん
2025/05/11(日) 09:15:33.06ID:qcGHvz/x 変わった人が集まって3行で済んでいた話を広げていく
388デフォルトの名無しさん
2025/05/11(日) 10:06:07.52ID:WmmDZjaJ >>368
無いから自演してまでしてRustを盛り上げようしてる
無いから自演してまでしてRustを盛り上げようしてる
389デフォルトの名無しさん
2025/05/11(日) 10:11:53.93ID:kgU6ATNU ここスレが立って1週間で300レスかよ
さすが究極のプログラミング言語だけあるな
関心持つ人多すぎ
さすが究極のプログラミング言語だけあるな
関心持つ人多すぎ
390デフォルトの名無しさん
2025/05/11(日) 11:15:42.58ID:UTf8BgbA >>369
その理屈だとRustで描かれたコードはすべてunsafeだ
その理屈だとRustで描かれたコードはすべてunsafeだ
391デフォルトの名無しさん
2025/05/11(日) 11:22:17.69ID:u8yQJoO0 >>389
何なんだよこの気持ち悪い複オジのレスはw
何なんだよこの気持ち悪い複オジのレスはw
392デフォルトの名無しさん
2025/05/11(日) 11:30:45.60ID:UTf8BgbA >>383
borrow mut な部分を unsafe {} で囲むとコンパイル通せるんだっけ?
borrow mut な部分を unsafe {} で囲むとコンパイル通せるんだっけ?
393デフォルトの名無しさん
2025/05/11(日) 11:38:18.14ID:B7Jyctor394デフォルトの名無しさん
2025/05/11(日) 11:38:36.95ID:qcGHvz/x unsafeで囲むとその中で危険な必殺技が使える
強力だけどその間はリミッター解除され保護されていない状況にも近い諸刃の剣
それを呼び出す部位もunsafe扱いしたらmainまでunsafeになり危険極まりないw
強力だけどその間はリミッター解除され保護されていない状況にも近い諸刃の剣
それを呼び出す部位もunsafe扱いしたらmainまでunsafeになり危険極まりないw
395デフォルトの名無しさん
2025/05/11(日) 11:48:02.09ID:2w2LR5Qj やってることはC言語でコメントにunsafeって書くのと変わらねえじゃん
396デフォルトの名無しさん
2025/05/11(日) 11:53:03.94ID:qcGHvz/x 違いが判らないなら理解力が不足しているだろう
unsafeだと通常は許されないことが可能になる
unsafeだと通常は許されないことが可能になる
397デフォルトの名無しさん
2025/05/11(日) 12:00:44.68ID:B7Jyctor398デフォルトの名無しさん
2025/05/11(日) 12:19:58.74ID:2w2LR5Qj >>396
俺が言ってる意味がわからない方が理解力が不足してるかもよw
俺が言ってる意味がわからない方が理解力が不足してるかもよw
399デフォルトの名無しさん
2025/05/11(日) 12:37:43.07ID:qcGHvz/x400デフォルトの名無しさん
2025/05/11(日) 12:41:23.78ID:qcGHvz/x 他の言語でもunsafe以外では保護されている部分もunsafeで制約が解除されている
401デフォルトの名無しさん
2025/05/11(日) 13:01:06.68ID:bksu5Opa >>369
unsafeな関数には関数を呼び出す側が守るべきsafetyルールがそれぞれ定義されている
ラッパー関数がそのルールを関数内のみで不変的に守ることが保証できるのならsafe
できないなら上位で保証してもらう必要があるからunsafe
いずれにしてもunsafe関数を呼び出す側が守るべきsafetyルールは
アプリケーションのどこかの段階ではすべて守られることを保証しないといけない
unsafeな関数には関数を呼び出す側が守るべきsafetyルールがそれぞれ定義されている
ラッパー関数がそのルールを関数内のみで不変的に守ることが保証できるのならsafe
できないなら上位で保証してもらう必要があるからunsafe
いずれにしてもunsafe関数を呼び出す側が守るべきsafetyルールは
アプリケーションのどこかの段階ではすべて守られることを保証しないといけない
402デフォルトの名無しさん
2025/05/11(日) 13:53:51.61ID:UTf8BgbA >>396
その理屈だと二重の borrow mut も unsafe{} で許可してもらえるととってもありがたいんだが
その理屈だと二重の borrow mut も unsafe{} で許可してもらえるととってもありがたいんだが
403デフォルトの名無しさん
2025/05/11(日) 14:09:26.63ID:ARIO0JMx404デフォルトの名無しさん
2025/05/11(日) 14:48:00.02ID:0bg/IfOK >>396
unsafeブロック内でも外でもRustのルールは基本的に同じ
何でも出来るようになるわけではない
unsafeブロック内でのみ出来ること
・unsafeな関数やメソッドの呼び出し
・unsafeなトレイトの実装
・生ポインタの逆参照
・共有体フィールドの読み取り
・可変静的変数の読み書き
このたった5つのみが許可される
unsafeブロック内でも外でもRustのルールは基本的に同じ
何でも出来るようになるわけではない
unsafeブロック内でのみ出来ること
・unsafeな関数やメソッドの呼び出し
・unsafeなトレイトの実装
・生ポインタの逆参照
・共有体フィールドの読み取り
・可変静的変数の読み書き
このたった5つのみが許可される
405デフォルトの名無しさん
2025/05/11(日) 16:26:32.64ID:qcGHvz/x 文意を取れない病気なのだろうか?
406デフォルトの名無しさん
2025/05/11(日) 17:38:39.22ID:9sJVUicm まあ病気だろうね
407デルフォトの名無し
2025/05/11(日) 20:01:04.55ID:8gkdAC4l unsafeってそんなに不味いんですね...
408デフォルトの名無しさん
2025/05/11(日) 20:20:01.31ID:LzpU3Ybb 特殊な環境を抜きにすると普通の開発でunsafeが使われることはほとんどない
むしろコンセンサス無くunsafeを使う人がいたら問題児認定されても仕方ない
ボトルネックがあってunsafeを使うことで安全かつ劇的に改善されるなどの共通認識が出来たら注意深くみんなの監視の下で使われる
むしろコンセンサス無くunsafeを使う人がいたら問題児認定されても仕方ない
ボトルネックがあってunsafeを使うことで安全かつ劇的に改善されるなどの共通認識が出来たら注意深くみんなの監視の下で使われる
409デルフォトの名無し
2025/05/11(日) 20:23:01.43ID:8gkdAC4l 特殊な環境って...具体的にどういうのがあるんですかね...
410デフォルトの名無しさん
2025/05/11(日) 21:10:41.96ID:kSJwinQr 安全に使うための条件が分からないunsafeは不味い
標準ライブラリのunsafe関数は大体Safetyで明示してる
標準ライブラリのunsafe関数は大体Safetyで明示してる
411デフォルトの名無しさん
2025/05/11(日) 23:58:19.36ID:UbETPlY9412デフォルトの名無しさん
2025/05/12(月) 11:03:30.61ID:zCv6/zTu OS提供のヘッダーファイルと連携しないといけないからね
rustだってOSのAPIとして使われるようになったら今の形のままでは済まされないはず
rustだってOSのAPIとして使われるようになったら今の形のままでは済まされないはず
413デフォルトの名無しさん
2025/05/12(月) 11:09:27.48ID:pU5GgKWj その頃にはもう人間がAPIを管理することはないだろうから我々が気にする必要はない
414デフォルトの名無しさん
2025/05/12(月) 11:22:05.12ID:0DBz50aj atomicを使える局面なら最速を狙えるが
素人は無難にMutexにしとけ
素人は無難にMutexにしとけ
415デフォルトの名無しさん
2025/05/12(月) 11:51:31.03ID:pU5GgKWj 処理が性能上クリティカルじゃないことが分かってる上で手を抜くのはいいけど、必要に応じてロックフリーを実装できないレベルならさすがに言語の選択から考え直すべき
場合によっちゃゲロ遅スクリプト言語でロックフリーに書かれたコードより遅くなるぞ
場合によっちゃゲロ遅スクリプト言語でロックフリーに書かれたコードより遅くなるぞ
416デフォルトの名無しさん
2025/05/12(月) 11:55:41.87ID:iYjqcrbw 誰もメモリバリアの話なんかしてないだろストローオジ
417デフォルトの名無しさん
2025/05/12(月) 11:57:36.67ID:zCv6/zTu >>415
その通り
その通り
418デフォルトの名無しさん
2025/05/12(月) 12:21:58.09ID:0DBz50aj >>415
ロックフリーにできるならatomicを使う方が当然よい
しかし素人がABA問題からRISCのアクセス順序崩壊まで様々な問題を理解しつつ
compare_exchange系などを正しく使いながら各々のRelaxed/Release/Acquired/SeqCstを最善に選べると思えない
複数のatomicが複雑に絡むとロックフリーはプロでも間違える歴史を繰り返してきた分野だ
さらに言えばatomicよりMutexが有利になるケースの存在も理解して適切に選ぶ必要がある
プロでも単純明快な状況でない場合はまずMutexで実装して後から見極めた上でatomicにするかどうか決める
これらの知識を身に付けるまで素人は無難にMutexにしとけ
ロックフリーにできるならatomicを使う方が当然よい
しかし素人がABA問題からRISCのアクセス順序崩壊まで様々な問題を理解しつつ
compare_exchange系などを正しく使いながら各々のRelaxed/Release/Acquired/SeqCstを最善に選べると思えない
複数のatomicが複雑に絡むとロックフリーはプロでも間違える歴史を繰り返してきた分野だ
さらに言えばatomicよりMutexが有利になるケースの存在も理解して適切に選ぶ必要がある
プロでも単純明快な状況でない場合はまずMutexで実装して後から見極めた上でatomicにするかどうか決める
これらの知識を身に付けるまで素人は無難にMutexにしとけ
419デフォルトの名無しさん
2025/05/12(月) 15:44:13.42ID:zCv6/zTu unsafeについて
https://www.youtube.com/watch?v=lx86iUb2xiI
https://www.youtube.com/watch?v=lx86iUb2xiI
420デフォルトの名無しさん
2025/05/12(月) 22:25:38.81ID:/cK4qYsj https://play.rust-lang.org/?version=stable&mode=debug&edition=2024&gist=18df19416bd6d705356724788636ab13
これをResultのmapとかand_thenとかを使ってスッキリ書く方法ってないでしょうか?
これをResultのmapとかand_thenとかを使ってスッキリ書く方法ってないでしょうか?
421デフォルトの名無しさん
2025/05/13(火) 00:03:38.80ID:tnscGN8Z422デフォルトの名無しさん
2025/05/13(火) 00:12:19.92ID:8MDWNT4X >>421
x=Some(false), y=Some(true)のときz=Some(false)になるからダメじゃね?
x=Some(false), y=Some(true)のときz=Some(false)になるからダメじゃね?
423デフォルトの名無しさん
2025/05/13(火) 00:18:54.30ID:8MDWNT4X すまんOptionとResult勘違いしてた
424デフォルトの名無しさん
2025/05/13(火) 00:29:45.70ID:tnscGN8Z >>422
たし🦀
let z = x.and_then(|b1| y.map(|b2| b1 || b2).or(Ok(b1))).or_else(|_| y.or(Err("ko")));
直したらこんなんなったんだが
matchが一番わかりやすい気がする
たし🦀
let z = x.and_then(|b1| y.map(|b2| b1 || b2).or(Ok(b1))).or_else(|_| y.or(Err("ko")));
直したらこんなんなったんだが
matchが一番わかりやすい気がする
425デフォルトの名無しさん
2025/05/13(火) 00:30:51.37ID:hUpkj0hB x.map(|x| y.map_or(x, |y| x || y)).or(y).or(Err("ko"))とかになるからmatch以上にスッキリ書く方法はないんじゃないかな
426デフォルトの名無しさん
2025/05/13(火) 00:46:34.37ID:8MDWNT4X 一応x,yが増えた時のためにイテレータ使うパターン
let z = [x, y].into_iter().filter_map(Result::ok).reduce(|b1, b2| b1 || b2).ok_or("ko");
2つならmatchでいい気がする
let z = [x, y].into_iter().filter_map(Result::ok).reduce(|b1, b2| b1 || b2).ok_or("ko");
2つならmatchでいい気がする
427デフォルトの名無しさん
2025/05/13(火) 07:26:56.06ID:Ubv8VExT たくさんある時はOk(true)でショートカットしたいケースが多そう
例えば素直に
let mut is_ok = false;
while let Some(x) = iter.next() {
match x {
Ok(true) => return x,
Ok(_) => is_ok = true,
_ => (),
}
}
is_ok.then_some(false).ok_or("ko")
例えば素直に
let mut is_ok = false;
while let Some(x) = iter.next() {
match x {
Ok(true) => return x,
Ok(_) => is_ok = true,
_ => (),
}
}
is_ok.then_some(false).ok_or("ko")
428デフォルトの名無しさん
2025/05/13(火) 07:31:54.57ID:RE8LmKUD 幻聴で半分人間半分AIと話していたので
1 私に成りすまして話しているようにいさせている
2 成りすましの声でも身体攻撃の部分は私本人も同じ状態に陥っている
3 犯人が使用していたとしても清廉潔白の人物のように見せれる
【2025年最新】自然な声の音声読み上げソフト5選!AI技術で ...
https://ondoku3.com/ja/post/natural-voice-software/
※インストール不要で無料で5000文字まで複数声質の音声合成エンジンで読み上げ可能
ローカルで各種AIモデルを実行できる無料ソフト「llama.cpp」がマルチモーダル入力をサポートし画像の説明などが可能に
2025年05月12日 20時00分
https://gigazine.net/news/20250512-llama-cpp--multimodal-vision-support/
>>llama.cppの詳細情報は以下のリンク先で公開されており、ソースコードやインストール手順などを確認できます。
※画像を認識させてテキスト入力が可能
ローカルでAIを動かして「コード生成」「ウェブ上の情報収集」「ファイル検索」などの操作を実行できるAIエージェント「AgenticSeek」、無料で使えてプライバシーも守れるのが強み
2025年05月05日 16時02分
https://gigazine.net/news/20250505-agenticseek-local-ai-agent
>>AgenticSeekのインストール手順は以下のページにまとまっています。
※複数サイトからレポート作成可能
1 私に成りすまして話しているようにいさせている
2 成りすましの声でも身体攻撃の部分は私本人も同じ状態に陥っている
3 犯人が使用していたとしても清廉潔白の人物のように見せれる
【2025年最新】自然な声の音声読み上げソフト5選!AI技術で ...
https://ondoku3.com/ja/post/natural-voice-software/
※インストール不要で無料で5000文字まで複数声質の音声合成エンジンで読み上げ可能
ローカルで各種AIモデルを実行できる無料ソフト「llama.cpp」がマルチモーダル入力をサポートし画像の説明などが可能に
2025年05月12日 20時00分
https://gigazine.net/news/20250512-llama-cpp--multimodal-vision-support/
>>llama.cppの詳細情報は以下のリンク先で公開されており、ソースコードやインストール手順などを確認できます。
※画像を認識させてテキスト入力が可能
ローカルでAIを動かして「コード生成」「ウェブ上の情報収集」「ファイル検索」などの操作を実行できるAIエージェント「AgenticSeek」、無料で使えてプライバシーも守れるのが強み
2025年05月05日 16時02分
https://gigazine.net/news/20250505-agenticseek-local-ai-agent
>>AgenticSeekのインストール手順は以下のページにまとまっています。
※複数サイトからレポート作成可能
429デフォルトの名無しさん
2025/05/13(火) 10:17:11.92ID:C/NhftFY >>422-423
このようにRustは面倒
このようにRustは面倒
430デフォルトの名無しさん
2025/05/13(火) 10:29:55.43ID:Oaa+uu3G >>429
その点ではRustが最も優れています
その点ではRustが最も優れています
431デフォルトの名無しさん
2025/05/13(火) 11:06:20.16ID:C/NhftFY 優れてるなら間違わないように設計汁
432デフォルトの名無しさん
2025/05/13(火) 11:13:08.18ID:Oaa+uu3G >>431
Rustは強い静的型付け言語なので間違えることはありません
Rustは強い静的型付け言語なので間違えることはありません
433デフォルトの名無しさん
2025/05/13(火) 12:48:35.47ID:HDWw9il3434デフォルトの名無しさん
2025/05/13(火) 14:00:36.56ID:EnWQFSGx >>433
継ぎはぎはない
根本の理解を間違えているからそんな変な発想になる
基本はmatchで書くのが当然
例えば
match foo {
Some(x) => Some(f(x)),
None => None,
}
こう書いた時に意味するところはSome時にfによる写像
だからこれをfoo.map(f)と略記できるというのが根本
短く記述でき可読性も上がる
asyncでの使い勝手というのも同様
このfの形とクロージャでのキャプチャなどの制限を満たせば使えて満たさなければ使えないだけの話
matchを推奨しているのではなくmatchが基本
そのうえで可読性がよくなるメソッドが適用できるならそれを使う
メソッドチェーンもそれで短く可読性が上がるなら使う
>>420はmatchのままが可読性がいい
それだけの話
継ぎはぎはない
根本の理解を間違えているからそんな変な発想になる
基本はmatchで書くのが当然
例えば
match foo {
Some(x) => Some(f(x)),
None => None,
}
こう書いた時に意味するところはSome時にfによる写像
だからこれをfoo.map(f)と略記できるというのが根本
短く記述でき可読性も上がる
asyncでの使い勝手というのも同様
このfの形とクロージャでのキャプチャなどの制限を満たせば使えて満たさなければ使えないだけの話
matchを推奨しているのではなくmatchが基本
そのうえで可読性がよくなるメソッドが適用できるならそれを使う
メソッドチェーンもそれで短く可読性が上がるなら使う
>>420はmatchのままが可読性がいい
それだけの話
435デフォルトの名無しさん
2025/05/13(火) 14:18:16.15ID:C/NhftFY だからRustは清書用(キリっ)って言われるんだろうね
436デフォルトの名無しさん
2025/05/13(火) 14:28:55.14ID:EnWQFSGx437デフォルトの名無しさん
2025/05/13(火) 16:46:51.79ID:JaffXz8x438デフォルトの名無しさん
2025/05/13(火) 18:59:19.16ID:XAG2WzZA439デフォルトの名無しさん
2025/05/13(火) 19:20:56.54ID:GUUfpWjP 早期脱出はループで書くほうがわかりやすいものやループでしか実現できないことも多い
特にラベル指定など
特にラベル指定など
440デフォルトの名無しさん
2025/05/13(火) 19:50:54.91ID:r+Qycp2R 実際どうなるかなんてその時次第だから
今回は結果をまとめて出してるんだろうけど
それぞれの実行結果で制御が加われば別に結果をまとめる必要はない場合もでて来るので綺麗に書ける必要はゼロ
今回は結果をまとめて出してるんだろうけど
それぞれの実行結果で制御が加われば別に結果をまとめる必要はない場合もでて来るので綺麗に書ける必要はゼロ
441デフォルトの名無しさん
2025/05/13(火) 19:51:24.47ID:QxvoeLWz >>420
ちょっと主旨から外れるけど、matchは
match (x, y) {
(Ok(b1), Ok(b2)) => Ok(b1 || b2),
(Ok(_), _ ) => x,
_ => y,
};
まで整理できますね。
2回評価するのが嫌なら二段matchがいいかと。
ちょっと主旨から外れるけど、matchは
match (x, y) {
(Ok(b1), Ok(b2)) => Ok(b1 || b2),
(Ok(_), _ ) => x,
_ => y,
};
まで整理できますね。
2回評価するのが嫌なら二段matchがいいかと。
442デフォルトの名無しさん
2025/05/13(火) 19:57:18.96ID:r+Qycp2R 綺麗だねw
443デフォルトの名無しさん
2025/05/13(火) 20:06:13.63ID:QaPl6AoM444デフォルトの名無しさん
2025/05/13(火) 20:08:00.80ID:r+Qycp2R 関数の実行結果x,yがあります
それぞれのx,yが成功していればそれを出力してください
ただしx,y共に成功であれば結果を論理和して出力してください
x,y共にエラーである場合はエラーを出力してください
それぞれのx,yが成功していればそれを出力してください
ただしx,y共に成功であれば結果を論理和して出力してください
x,y共にエラーである場合はエラーを出力してください
445デフォルトの名無しさん
2025/05/13(火) 20:15:06.96ID:hmzDHhd1 結果が揃っていたら悩むところないよな
現実には結果が一部しか出ていない段階で欲しい結果が得られたから以降は打ち切り、または、エラーが出たから打ち切り
現実には結果が一部しか出ていない段階で欲しい結果が得られたから以降は打ち切り、または、エラーが出たから打ち切り
446デフォルトの名無しさん
2025/05/13(火) 20:46:34.57ID:QxvoeLWz 二段matchも書いてみた。
let z = match x {
Err(_) => y,
Ok(false) => match y {
Err(_) => x,
_=>y,
},
_ => x,
};
普通はこんな書き方しないだろうけど。
let z = match x {
Err(_) => y,
Ok(false) => match y {
Err(_) => x,
_=>y,
},
_ => x,
};
普通はこんな書き方しないだろうけど。
447デフォルトの名無しさん
2025/05/13(火) 21:23:14.88ID:tnscGN8Z まあしかし
元の
let z = match (x, y) {
(Ok(b1), Ok(b2)) => Ok(b1 || b2),
(Ok(b1), Err(_)) => Ok(b1),
(Err(_), Ok(b2)) => Ok(b2),
(Err(_), Err(_)) => Err("ko"),
};
これが一番可読性高くて網羅性も一目でわかっていいと思うわ
元の
let z = match (x, y) {
(Ok(b1), Ok(b2)) => Ok(b1 || b2),
(Ok(b1), Err(_)) => Ok(b1),
(Err(_), Ok(b2)) => Ok(b2),
(Err(_), Err(_)) => Err("ko"),
};
これが一番可読性高くて網羅性も一目でわかっていいと思うわ
448デフォルトの名無しさん
2025/05/13(火) 21:30:58.39ID:upONs1LW 結局のところは意図が表れていて読み取りやすいことが重要で、スマートに書けてても見た他人がなんのこっちゃとなるようではあかんからな。
449デフォルトの名無しさん
2025/05/13(火) 22:06:17.20ID:QxvoeLWz >>446
蛇足だけど、こっちの方がいいか。
let z = match x {
Err(_) => y,
Ok(true) => x,
_ => match y {
Err(_) => x,
_=>y,
},
};
蛇足だけど、こっちの方がいいか。
let z = match x {
Err(_) => y,
Ok(true) => x,
_ => match y {
Err(_) => x,
_=>y,
},
};
450デフォルトの名無しさん
2025/05/13(火) 22:11:12.56ID:r+Qycp2R 他の言語でもあるんだけど元々シンプルに書けていたものを
その言語特有の機能で書き換えたい勢がいる
パズルとしては別に構わないけどそれでどれだけ時間を費やすのか考えてなさそう
その言語特有の機能で書き換えたい勢がいる
パズルとしては別に構わないけどそれでどれだけ時間を費やすのか考えてなさそう
■ このスレッドは過去ログ倉庫に格納されています
