公式
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 part33
https://mevius.5ch.net/test/read.cgi/tech/1755247770/
ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.5ch.net/test/read.cgi/tech/1514107621/
Rust part34
1デフォルトの名無しさん
2025/11/27(木) 12:25:23.76ID:4JaxkBD42025/12/06(土) 16:19:08.82ID:LjhUSqqq
自作のソフトウェアのコードRustで書いてんだけどやっぱビルド周りが遅いな
cargo testも実行まで時間かかるし
もっと速くならんかな
cargo testも実行まで時間かかるし
もっと速くならんかな
68デフォルトの名無しさん
2025/12/06(土) 17:30:19.35ID:EhyTMf4b なんでcと速度は変わらんのにビルドこんな遅いん?
69デフォルトの名無しさん
2025/12/06(土) 17:43:56.21ID:z6f5ohL1 Rustはメモリリーク含めたリスクポイントをコンパイル時点で教えてくれるだけ。
panicで止めるかどうかは、異常系分類による。
停止させると逆に危険な場合もあるので、自前のexceptアナライザーは必須。
とにかく、関心事の放散が防止できれば、メモリアロケーションもリリースもミスは少なくなる。
SOLID原則に従えば、エレベーターも止まらない。 Rustの出発点が変な気もする。
アーキテクチャー不在がエレベーターを止める。
panicで止めるかどうかは、異常系分類による。
停止させると逆に危険な場合もあるので、自前のexceptアナライザーは必須。
とにかく、関心事の放散が防止できれば、メモリアロケーションもリリースもミスは少なくなる。
SOLID原則に従えば、エレベーターも止まらない。 Rustの出発点が変な気もする。
アーキテクチャー不在がエレベーターを止める。
2025/12/06(土) 23:34:40.22ID:DacREqLg
異常系という言葉を気軽に使う人間は絶対に信用してはいけない
重大障害のもと
重大障害のもと
2025/12/07(日) 01:56:01.10ID:h2UU4mQ3
どういう理屈で?
当該用途にはなんて言葉を使えばいいの?
当該用途にはなんて言葉を使えばいいの?
2025/12/07(日) 02:51:57.24ID:BRimgs0p
半永久的に動き続けることが求められるサーバーでは異常系終了を用いない
それだけの話だろう
それだけの話だろう
73デフォルトの名無しさん
2025/12/07(日) 03:31:02.57ID:Wacr4v8K イージーモード追加してくれんかな
trycatchとかgoみたいなエラー処理やりたい
trycatchとかgoみたいなエラー処理やりたい
2025/12/07(日) 04:14:18.61ID:YtRaGYdh
Goには例外try/throw/catchもなければResultのような代数的データ型もない
Goは多値でエラーを返してif文でそれがnilかどうかを判別するしかなくイージーモードとはかけ離れている
Goは多値でエラーを返してif文でそれがnilかどうかを判別するしかなくイージーモードとはかけ離れている
2025/12/07(日) 04:23:57.95ID:mtIDmBMJ
2025/12/07(日) 05:47:16.97ID:JhJJ9T6O
unwrap()の是非について焼き寿司氏のblog
https://burntsushi.net/unwrap/
仮にリンターでunwrap()の有無をチェックしても
slice[i] や RefCell、場合によっては算術演算のラップアラウンドでもパニックするよ
という指摘にはなるほどと思った
https://burntsushi.net/unwrap/
仮にリンターでunwrap()の有無をチェックしても
slice[i] や RefCell、場合によっては算術演算のラップアラウンドでもパニックするよ
という指摘にはなるほどと思った
77デフォルトの名無しさん
2025/12/07(日) 08:25:06.65ID:sR0SS/1I >>76
Linusの指摘そのままじゃない?
「ランタイムエラーでパニックを発生させるのは根本的に問題があると思っている」
OSみたいなクリティカルな用途だから要求も高いというのはあるけど、Rustはc用途を目指しているんだから、他人のコードであってもpanicを制御できるようにならなきゃ話にならんかと。
Linusの指摘そのままじゃない?
「ランタイムエラーでパニックを発生させるのは根本的に問題があると思っている」
OSみたいなクリティカルな用途だから要求も高いというのはあるけど、Rustはc用途を目指しているんだから、他人のコードであってもpanicを制御できるようにならなきゃ話にならんかと。
2025/12/07(日) 09:49:00.07ID:RKvo/7WP
>>77
std::panic::catch_unwind でキャッチする仕組みはある。
ただ C++ の例外と同じでランタイムサポートの支援で実現するものだから、それより下のレイヤ (OS など) を作ってるときには使いにくいんだよ。
結局のところ OS のレイヤでは C でやってるのと同じやり方でなんとかするしかない。
std::panic::catch_unwind でキャッチする仕組みはある。
ただ C++ の例外と同じでランタイムサポートの支援で実現するものだから、それより下のレイヤ (OS など) を作ってるときには使いにくいんだよ。
結局のところ OS のレイヤでは C でやってるのと同じやり方でなんとかするしかない。
2025/12/07(日) 11:31:53.26ID:DIZ3oEXF
2025/12/07(日) 13:14:55.38ID:4YzXVeaK
>>77
slice[i]やRefCellや算術演算で発生するpanicと
OOMをResultでハンドリングする機能がなく避けようがなかったpanicとは種類が違う
前者はプログラムコードのバグ
後者はプログラムコードにバグがなくても環境次第で発生してた
Linusが正確に何と言ったかは知らんけど
環境次第で実行時に発生するエラーを
panicとしてしか扱えなかったことを問題視したんじゃないか?
slice[i]やRefCellや算術演算で発生するpanicと
OOMをResultでハンドリングする機能がなく避けようがなかったpanicとは種類が違う
前者はプログラムコードのバグ
後者はプログラムコードにバグがなくても環境次第で発生してた
Linusが正確に何と言ったかは知らんけど
環境次第で実行時に発生するエラーを
panicとしてしか扱えなかったことを問題視したんじゃないか?
2025/12/07(日) 13:17:17.08ID:4YzXVeaK
2025/12/08(月) 06:14:53.89ID:78+iHLWM
iced 0.14.0がリリースされて、ついに日本語入力に対応したらしいよ
> Input method support. #2777
> Input method support. #2777
2025/12/08(月) 10:36:18.01ID:JY6W1FTm
驚き!
2025/12/08(月) 17:44:28.10ID:WGXF6l1Y
なにicedって
2025/12/08(月) 19:41:58.70ID:IqmmsKhE
UIライブラリや
86デフォルトの名無しさん
2025/12/09(火) 13:17:43.50ID:deXLWuOQ rustでUIやる意味何?計算量の多いゲームエンジンならわかるけどただのアプリならコンパイルの遅いrustでなんか作りたくねえ
87デフォルトの名無しさん
2025/12/09(火) 13:24:51.74ID:Lsl4QAiK make world と打ち込んで1週間待ってた頃に比べれば全然余裕
88デフォルトの名無しさん
2025/12/09(火) 13:28:09.51ID:H/C7AGZK Borlandがturbo rustを出すまで我慢だね
89デフォルトの名無しさん
2025/12/09(火) 13:31:43.36ID:H/C7AGZK turbo visionのcrateはあるんだw
90デフォルトの名無しさん
2025/12/09(火) 13:34:26.68ID:b/v/GR+5 でもgpuiつかったやつめちゃ速くない?
あとrust analyzerのメモリ爆食いどうにかしてクレメンス
あとrust analyzerのメモリ爆食いどうにかしてクレメンス
2025/12/09(火) 18:55:52.01ID:r9m3tzex
実際C++BuilderのGUI生産性と、Rustの言語としての速さと頑強さが組み合わされば無敵じゃね?
2025/12/09(火) 20:27:29.76ID:nH0p4cXR
まあエンバカデロはもう革新的な製品作りそうにないし
ヘジルスバーグはRustにあまり興味なさそうだけどね
ヘジルスバーグはRustにあまり興味なさそうだけどね
2025/12/10(水) 05:02:49.84ID:hPMgr9J3
Gemini君に聞いたら、RustはC++のNRVOに相当する最適化をC++よりも広い適用範囲で強力に行います
Destination Passing Style (DPS)
って事らしいけど本当かな?
Destination Passing Style (DPS)
って事らしいけど本当かな?
2025/12/10(水) 09:50:22.74ID:MSOh6BWq
C++ はオブジェクトへのアクセスが自由過ぎてエイリアス解析が大変 (最適化がしんどい) というのは昔から言われてた。
逆に言えば参照 (オブジェクトの依存関係) を完璧に追える Rust ではもっと上手くやれてもおかしくはないと思う。
逆に言えば参照 (オブジェクトの依存関係) を完璧に追える Rust ではもっと上手くやれてもおかしくはないと思う。
2025/12/10(水) 10:28:50.81ID:4/EtyeCo
面倒くさい奴だけど付き合うと意外と良い奴
2025/12/10(水) 11:00:48.64ID:WdeXXEzW
>>93
Rustの方針はシンプルかつ効率
関数がレジスタ返しできない大きなサイズのデータを返す時
呼び出し側の関数のスタックフレームに領域を確保
呼び出された関数は最初からその領域にデータを書き込む
もちろんこれらは裏で自動的に行われる
Rustの方針はシンプルかつ効率
関数がレジスタ返しできない大きなサイズのデータを返す時
呼び出し側の関数のスタックフレームに領域を確保
呼び出された関数は最初からその領域にデータを書き込む
もちろんこれらは裏で自動的に行われる
2025/12/10(水) 11:29:15.14ID:+wlu09xM
日本語不自由なやつしかおらんのかいな
2025/12/10(水) 11:31:30.40ID:hPMgr9J3
"Destination Passing Style" で検索するとHaskellの話しか出てこないからハルシネーションか?
99デフォルトの名無しさん
2025/12/10(水) 11:32:51.92ID:v/mPNkvx RustはUIでも覇権取れる?
100デフォルトの名無しさん
2025/12/10(水) 11:48:09.95ID:7/+OAEHE はい
101デフォルトの名無しさん
2025/12/10(水) 12:06:24.08ID:L7XTEUYD C++でもまじめにstd::move()通してればRust並に最適化できるんじゃね?
move後のアクセスをコンパイラが止めないからミスった時に何が起こるか分からんけど
move後のアクセスをコンパイラが止めないからミスった時に何が起こるか分からんけど
102デフォルトの名無しさん
2025/12/10(水) 12:18:26.32ID:d+nvH+x7 equi
103デフォルトの名無しさん
2025/12/10(水) 12:28:49.76ID:MSOh6BWq >>101
C++ では返却値は std::move しないのが望ましい場合が多い。
コピー省略できるはずのところでムーブになってしまうことがあるし、ムーブが妥当なときはなにも書いていなくても暗黙にムーブするので書く意味がない。
C++ では返却値は std::move しないのが望ましい場合が多い。
コピー省略できるはずのところでムーブになってしまうことがあるし、ムーブが妥当なときはなにも書いていなくても暗黙にムーブするので書く意味がない。
104デフォルトの名無しさん
2025/12/10(水) 12:31:05.43ID:09K8JBzk Rustは概念的には常に自動的にmoveされる
そして生成コードはレジスタ返しか足りなければRVOに自動的になる
だからC++のような複雑さも面倒臭さもない
そして生成コードはレジスタ返しか足りなければRVOに自動的になる
だからC++のような複雑さも面倒臭さもない
105デフォルトの名無しさん
2025/12/10(水) 12:44:35.63ID:USY1WYCN moveが暗黙で実際どうなんかがわからんのはC++の辛いところ
std::moveって明記してるのにコピーした時は、コンパイルエラーにしてくれてればよかったのに
std::moveって明記してるのにコピーした時は、コンパイルエラーにしてくれてればよかったのに
106デフォルトの名無しさん
2025/12/10(水) 12:47:17.53ID:hPMgr9J3107デフォルトの名無しさん
2025/12/10(水) 12:58:04.34ID:HmdX4Hif108デフォルトの名無しさん
2025/12/10(水) 13:16:30.40ID:L7XTEUYD Rustはできるだけインライン展開してreturn自体を減らしてそう
C++とはコンパイルの単位とプロセスが違うからRVOは重視してないかもしれない
C++とはコンパイルの単位とプロセスが違うからRVOは重視してないかもしれない
109デフォルトの名無しさん
2025/12/10(水) 13:57:35.08ID:eneesrJf >>107
んな大袈裟な話じゃないし、ボトルネックになってない限り実際にRVOされてるかどうかまで気にする人は少ない
コピーのコストが大きな問題になるようなクソでかい構造体なんて実際問題として滅多にないからね
コンテナは基本的に中でヒープ使ってるってのはさすがに知ってるよな?
んな大袈裟な話じゃないし、ボトルネックになってない限り実際にRVOされてるかどうかまで気にする人は少ない
コピーのコストが大きな問題になるようなクソでかい構造体なんて実際問題として滅多にないからね
コンテナは基本的に中でヒープ使ってるってのはさすがに知ってるよな?
110デフォルトの名無しさん
2025/12/10(水) 16:52:00.70ID:jR2AbXeD non-goalの余白に無限の願望を託す人
111デフォルトの名無しさん
2025/12/10(水) 17:49:43.54ID:HmdX4Hif112デフォルトの名無しさん
2025/12/10(水) 19:32:55.35ID:SgLOgf3g なんでRustはReactに勝てないのか分からんのやが誰か教えてくれ
113デフォルトの名無しさん
2025/12/10(水) 19:56:08.60ID:KLOOllO5 web apiてなんであんなうんこスクリプト言語で書くってことになったんだろう
js自体の機能てほぼないしweb apiいじってるだけだからcでもいいやん
js自体の機能てほぼないしweb apiいじってるだけだからcでもいいやん
114デフォルトの名無しさん
2025/12/10(水) 19:59:11.30ID:IFiV5w4p rustでは値渡しはクローンしなければムーブになるだろうな
115デフォルトの名無しさん
2025/12/10(水) 20:34:20.54ID:9lNpGh2X >>114
C++のmoveはコピーコンストラクタの呼び出しを回避するのが目的である一方、
Rustの値渡しは(最適化を無視すれば)常に単なるビット毎のシャローコピーであり、RustにC++のmoveに相当するものは存在しない
Rustのmoveは所有権の移動という文脈上の仮想的な操作でしかなく、代入の実行時挙動は一切変化しない点でC++のmoveとは全く異なる概念
C++のmoveはコピーコンストラクタの呼び出しを回避するのが目的である一方、
Rustの値渡しは(最適化を無視すれば)常に単なるビット毎のシャローコピーであり、RustにC++のmoveに相当するものは存在しない
Rustのmoveは所有権の移動という文脈上の仮想的な操作でしかなく、代入の実行時挙動は一切変化しない点でC++のmoveとは全く異なる概念
116デフォルトの名無しさん
2025/12/10(水) 20:37:02.84ID:0wVpILab JavaScriptへトランスパイルできる言語はいくつかある
TypeScriptは言わずもがなDartとKotlinも公式で保守されてる
JavaScriptを書くために必ずしもJavaScriptを使う必要は無い
TypeScriptは言わずもがなDartとKotlinも公式で保守されてる
JavaScriptを書くために必ずしもJavaScriptを使う必要は無い
117デフォルトの名無しさん
2025/12/10(水) 20:41:05.28ID:0wVpILab118デフォルトの名無しさん
2025/12/10(水) 23:42:16.04ID:kHSO1Qs/119デフォルトの名無しさん
2025/12/11(木) 00:22:02.01ID:cU6/FCF6 >シングルスレッドだから排他制御は要らない
お前がそう思うんならそうなんだろうお前ん中ではな
お前がそう思うんならそうなんだろうお前ん中ではな
120デフォルトの名無しさん
2025/12/11(木) 00:23:17.13ID:cU6/FCF6 同時実行制御のことを雑に排他制御と呼ぶやつにプログラミングをさせてはいけない
排他制御も同時実行制御もどちらも絶対理解してないから
排他制御も同時実行制御もどちらも絶対理解してないから
121デフォルトの名無しさん
2025/12/11(木) 08:30:48.24ID:CybeALG1 >>120
誤解してないか?
こういう関係だぞ
https://en.wikipedia.org/wiki/Mutual_exclusion
In computer science, "mutual exclusion" (排他制御) is a property of "concurrency control" (同時実行制御), which is instituted for the purpose of preventing race conditions.
誤解してないか?
こういう関係だぞ
https://en.wikipedia.org/wiki/Mutual_exclusion
In computer science, "mutual exclusion" (排他制御) is a property of "concurrency control" (同時実行制御), which is instituted for the purpose of preventing race conditions.
122デフォルトの名無しさん
2025/12/11(木) 10:34:14.13ID:FEj7H+LS RustのmoveもC++のmoveも、
「(仮に最適化されずとも)構造体のシャローコピーのコストは一般に軽く、多くの場合問題にならない」
というのが大前提なのだけど、>>107>>111は根本的なところを理解してなそう
RustやC++に限らず、GoやC#など構造体の値渡しができる言語に基本的に共通する大前提だね
「(仮に最適化されずとも)構造体のシャローコピーのコストは一般に軽く、多くの場合問題にならない」
というのが大前提なのだけど、>>107>>111は根本的なところを理解してなそう
RustやC++に限らず、GoやC#など構造体の値渡しができる言語に基本的に共通する大前提だね
123デフォルトの名無しさん
2025/12/11(木) 11:24:54.77ID:KdoTRU3f そういう問題ではない
呼び出し元関数のスタックフレームに直接書き込むのがRVO
配列もヒープを利用しない
呼び出し元関数のスタックフレームに直接書き込むのがRVO
配列もヒープを利用しない
124デフォルトの名無しさん
2025/12/11(木) 12:43:57.33ID:UITvxyr5 レジスタ渡しよりも高速
余分なコードが介在しないCよりも
余分なコードだらけのRustが速くなるとしたらその辺が原因かもな
余分なコードが介在しないCよりも
余分なコードだらけのRustが速くなるとしたらその辺が原因かもな
125デフォルトの名無しさん
2025/12/11(木) 12:54:01.07ID:sTofDfRv 複オジだらけ
126デフォルトの名無しさん
2025/12/11(木) 12:58:56.52ID:sgwHswzM 自作自演
127デフォルトの名無しさん
2025/12/11(木) 18:48:54.72ID:KdoTRU3f128デフォルトの名無しさん
2025/12/11(木) 22:15:21.89ID:MZEzdKoQ RVOとは違う話だけどC++は戻り値を std::move した方が良いケースは結構あるぞ
戻り値というか、戻り値の型に渡すコンストラクタに対して渡す時の話だけど
戻り値が std::string や std:: vector をフィールドに持つ構造体やタプルで、最後の return で初期化してるような場合
return { std::move(str); };
こういう場合は str は自動ではちゃんとムーブしてくれなかった気がする
(最近のC++は知らんから、間違ってたら指摘がほしい)
戻り値というか、戻り値の型に渡すコンストラクタに対して渡す時の話だけど
戻り値が std::string や std:: vector をフィールドに持つ構造体やタプルで、最後の return で初期化してるような場合
return { std::move(str); };
こういう場合は str は自動ではちゃんとムーブしてくれなかった気がする
(最近のC++は知らんから、間違ってたら指摘がほしい)
129デフォルトの名無しさん
2025/12/11(木) 22:42:19.12ID:9uKNSHMX みんな当たり前にC++を引き合いに出しているけど、Rust書いてる人でC++エアプ勢っていないんだろうか
130デフォルトの名無しさん
2025/12/11(木) 23:34:58.81ID:ueLwSjw6 Cのみはいるかもしれないが、少なくともC系統の言語を触れてないと
Rustがこんなに苦労して解決しようとしてる問題への実感が持てなくて
GC言語やスクリプトよりちょっと速いだけの、冗長構文クソ言語以外に感想持てなそう
Rustがこんなに苦労して解決しようとしてる問題への実感が持てなくて
GC言語やスクリプトよりちょっと速いだけの、冗長構文クソ言語以外に感想持てなそう
131デフォルトの名無しさん
2025/12/11(木) 23:46:18.77ID:lRBvFeeP >>121
何を誤解してると思ったの?
それとその定義だとconcurrency controlは常にmutual exclusionというpropertyを持ってるという関係になるけどCSの一般的定義ではそういう関係ではなくてconcurrency controlを実現する手段の一つとか実現手段の一部という関係
何を誤解してると思ったの?
それとその定義だとconcurrency controlは常にmutual exclusionというpropertyを持ってるという関係になるけどCSの一般的定義ではそういう関係ではなくてconcurrency controlを実現する手段の一つとか実現手段の一部という関係
132デフォルトの名無しさん
2025/12/12(金) 00:36:09.89ID:R4MfitDw 横からだけど、引用文においてもミューテックスは並行プログラミングにおける安全性アプローチのひとつと定義してると思うが
両者共に「並行制御 ⊃ 排他制御」という認識ではないの?
何が論点になってんだ?
両者共に「並行制御 ⊃ 排他制御」という認識ではないの?
何が論点になってんだ?
133デフォルトの名無しさん
2025/12/12(金) 01:29:09.26ID:lYmP2IfW134デフォルトの名無しさん
2025/12/12(金) 02:06:45.48ID:hV57hqyS135デフォルトの名無しさん
2025/12/12(金) 02:22:06.56ID:05W/5u4b >>133
>JavaScriptは「並行」プログラミングかつシングルスレッドなのでミューテックスが不要
そこは JavaScript は並行プログラミング"でありながら"じゃね?
「ミューテックスの要否」は「シングルスレッドであること」で定まり、したがって「並行プログラミングであること」を接続詞"かつ"で「並行させる」のは説明として不適かと
そしてなんについて議論してんの?
おふたりが論点としているものがはたから見ていて判然とせん
>JavaScriptは「並行」プログラミングかつシングルスレッドなのでミューテックスが不要
そこは JavaScript は並行プログラミング"でありながら"じゃね?
「ミューテックスの要否」は「シングルスレッドであること」で定まり、したがって「並行プログラミングであること」を接続詞"かつ"で「並行させる」のは説明として不適かと
そしてなんについて議論してんの?
おふたりが論点としているものがはたから見ていて判然とせん
136デフォルトの名無しさん
2025/12/12(金) 02:41:47.22ID:H4zR5jbz >>132が並列と並行の区別ができてないからでしょう
137デフォルトの名無しさん
2025/12/12(金) 03:11:39.93ID:s9XOKHrp >>136
それは具体的にどの部分からそう読み取ったの?
「シングルスレッドであること」によって、「ミューテックスの要否」は定まる
したがって並列か並行かとは別議論では?
そもそも本件において前者は考慮不要かと
それは具体的にどの部分からそう読み取ったの?
「シングルスレッドであること」によって、「ミューテックスの要否」は定まる
したがって並列か並行かとは別議論では?
そもそも本件において前者は考慮不要かと
138デフォルトの名無しさん
2025/12/12(金) 03:30:00.02ID:H4zR5jbz139デフォルトの名無しさん
2025/12/12(金) 06:22:33.05ID:ZfrS6xvk >>138
>mutexは同じCPU内の話だから並列=マルチスレッド
ミューテックスの要否は端的に言えば「共有リソースに対するアクセスの有無」
マルチスレッドは並列を実現するためのいち技術であり、限定するのはミスリード
マルチコア、マルチソケット(NUMAなど)もまたしかり
「同じCPU内」という単位は不正確
>でも>>132は区別できてなくて並行プログラミングと書いてます
「並行制御 ⊃ 排他制御」と同じこと
「並行 ⊃ 並列」で並行は抽象レベルの概念であり、並列は物理レベルの実現方法
前者が後者を含意するのでこれらの記述は極めて自然
>並行プログラミングでは値を同時に更新することがないためmutexは要らないです
したがってこれは明確に誤り
>>136 を熨斗付けてお返しいたします
>並行並列プログラミングまたは並列プログラミングの時のみmutexが要ります
同上
レイヤの違う概念、用語を並行させて書いてしまってる
重ねるけれど、ミューテックスの要否基準は「共有状態の同時アクセス可能性」のみ
とりあえず >>121 の引用部分がそもそも間違ってるという主張?
そうであるなら以下に対して反論どうぞ
>In computer science, mutual exclusion is a property of concurrency control, which is instituted for the purpose of preventing race conditions.
>mutexは同じCPU内の話だから並列=マルチスレッド
ミューテックスの要否は端的に言えば「共有リソースに対するアクセスの有無」
マルチスレッドは並列を実現するためのいち技術であり、限定するのはミスリード
マルチコア、マルチソケット(NUMAなど)もまたしかり
「同じCPU内」という単位は不正確
>でも>>132は区別できてなくて並行プログラミングと書いてます
「並行制御 ⊃ 排他制御」と同じこと
「並行 ⊃ 並列」で並行は抽象レベルの概念であり、並列は物理レベルの実現方法
前者が後者を含意するのでこれらの記述は極めて自然
>並行プログラミングでは値を同時に更新することがないためmutexは要らないです
したがってこれは明確に誤り
>>136 を熨斗付けてお返しいたします
>並行並列プログラミングまたは並列プログラミングの時のみmutexが要ります
同上
レイヤの違う概念、用語を並行させて書いてしまってる
重ねるけれど、ミューテックスの要否基準は「共有状態の同時アクセス可能性」のみ
とりあえず >>121 の引用部分がそもそも間違ってるという主張?
そうであるなら以下に対して反論どうぞ
>In computer science, mutual exclusion is a property of concurrency control, which is instituted for the purpose of preventing race conditions.
140デフォルトの名無しさん
2025/12/12(金) 06:46:29.30ID:H4zR5jbz >>139
あなたのような知識が足りなく偏った人を相手にするのは大変だけど
単に並列プログラミングといえば複数のPCを用いる分散型の並列プログラミングを含むのよ
話題の領域を明確にするために今回はmutexの話だから分散型の話題ではないと限定しているわけ
そういう常識を持たないかあえて無視して無意味に突くだけのダメ人間みたいだからこれ以上はくだらないやりとりしません
あなたのような知識が足りなく偏った人を相手にするのは大変だけど
単に並列プログラミングといえば複数のPCを用いる分散型の並列プログラミングを含むのよ
話題の領域を明確にするために今回はmutexの話だから分散型の話題ではないと限定しているわけ
そういう常識を持たないかあえて無視して無意味に突くだけのダメ人間みたいだからこれ以上はくだらないやりとりしません
141デフォルトの名無しさん
2025/12/12(金) 08:00:06.77ID:s73KDvVl >>140
>単に並列プログラミングといえば複数のPCを用いる分散型の並列プログラミングを含むのよ
いやあ、そんなことはないと思うが
少なくともこちらは本件において分散コンピューティングには触れていない
>今回はmutexの話だから分散型の話題ではないと限定しているわけ
心得てるけど
その上で「ミューテックスの要否」は「共有リソースに対する同時アクセスの有無」と言明しているわけであり
あなたが以下のようにミューテックスの用途を誤解、もしくはミスリードをしていたもので、反例をいくつか挙げてわざわざ説明したのであって(マルチコア、マルチCPU = マルチソケット⦅同一マシン内のNUMAノード間⦆)
マルチスレッドは並列の一形態でイコールではない
共有リソースへの同時アクセスが起こりうるなら、スレッド、コア、ソケットの別なく排他制御はごくごく自然な選択肢
ちなみにNUMAはわかる?複数PCの使用や分散技術の話じゃないよ
>mutexは同じCPU内の話だから並列=マルチスレッドでしょ
そしてそもそも並列と並行の区別だが、これについてもレイヤが違うと説明したはず
「並行 ⊃ 並列」
並行はより上位の抽象概念だから、並行プログラミングに言及する際、ミューテックス(排他制御)を取り上げるのは当たり前
したがって以下は明確に誤ってるかと
>並行プログラミングでは値を同時に更新することがないためmutexは要らないです
並列だろうが並行だろうが、リソースへの競合状態が起こりえるなら、ミューテックスは要検討
>単に並列プログラミングといえば複数のPCを用いる分散型の並列プログラミングを含むのよ
いやあ、そんなことはないと思うが
少なくともこちらは本件において分散コンピューティングには触れていない
>今回はmutexの話だから分散型の話題ではないと限定しているわけ
心得てるけど
その上で「ミューテックスの要否」は「共有リソースに対する同時アクセスの有無」と言明しているわけであり
あなたが以下のようにミューテックスの用途を誤解、もしくはミスリードをしていたもので、反例をいくつか挙げてわざわざ説明したのであって(マルチコア、マルチCPU = マルチソケット⦅同一マシン内のNUMAノード間⦆)
マルチスレッドは並列の一形態でイコールではない
共有リソースへの同時アクセスが起こりうるなら、スレッド、コア、ソケットの別なく排他制御はごくごく自然な選択肢
ちなみにNUMAはわかる?複数PCの使用や分散技術の話じゃないよ
>mutexは同じCPU内の話だから並列=マルチスレッドでしょ
そしてそもそも並列と並行の区別だが、これについてもレイヤが違うと説明したはず
「並行 ⊃ 並列」
並行はより上位の抽象概念だから、並行プログラミングに言及する際、ミューテックス(排他制御)を取り上げるのは当たり前
したがって以下は明確に誤ってるかと
>並行プログラミングでは値を同時に更新することがないためmutexは要らないです
並列だろうが並行だろうが、リソースへの競合状態が起こりえるなら、ミューテックスは要検討
142デフォルトの名無しさん
2025/12/12(金) 09:10:06.26ID:9WR4PduZ JavascriptのPromise chaining(シリアル実行)は排他制御に含まれると思う
前の処理がPendingの間は次の処理を実行しないから前の処理で更新中のデータが次の処理で参照されない
前の処理がPendingの間は次の処理を実行しないから前の処理で更新中のデータが次の処理で参照されない
143デフォルトの名無しさん
2025/12/12(金) 10:18:13.52ID:9YTxXu+/144デフォルトの名無しさん
2025/12/12(金) 19:40:37.53ID:UEulKxih T型を[T;1]型にするのはゼロコストだよね
145デフォルトの名無しさん
2025/12/12(金) 21:31:17.66ID:XV88DTfm >>143
>並行処理=同時進行するが同時に実行されることはない
>並列処理=同時に実行されるためメモリ競合などの対策が必要
教科書レベルのあるある理解(誤解)
既述したよう、並列処理は並行処理のいち手段
「並行」という概念の中に含まれる
それを物理レベルで「並列に処理」(同時実行)するか否かは別議論であり、レイヤが違う
並列でないなら競合しないの?
並列でないならマルチスレッド処理できない?
整理したいけど >>121 の引用部分に異議ある立場?
>In computer science, mutual exclusion is a property of concurrency control, which is instituted for the purpose of preventing race conditions.
「concurrent」をどう訳します?
>並行処理=同時進行するが同時に実行されることはない
>並列処理=同時に実行されるためメモリ競合などの対策が必要
教科書レベルのあるある理解(誤解)
既述したよう、並列処理は並行処理のいち手段
「並行」という概念の中に含まれる
それを物理レベルで「並列に処理」(同時実行)するか否かは別議論であり、レイヤが違う
並列でないなら競合しないの?
並列でないならマルチスレッド処理できない?
整理したいけど >>121 の引用部分に異議ある立場?
>In computer science, mutual exclusion is a property of concurrency control, which is instituted for the purpose of preventing race conditions.
「concurrent」をどう訳します?
146デフォルトの名無しさん
2025/12/12(金) 22:57:57.08ID:QoWL0Mdr147デフォルトの名無しさん
2025/12/12(金) 23:21:06.40ID:h4KMYPn3 wikipediaを見る限り>>143の区別みたいよ
>並行計算は、並列計算(parallel computing)としばしば混同される。
>
>並列計算はマルチプロセッサ前提であり、独立した各プロセッサが割り振られた計算を同時実行することを指す。
>故にシングルプロセッサでは不可になる[2]。
>分散システム内の各コンピュータが割り振られた計算を同時実行するのもそうである。
>
>並行計算は一つのプロセッサに複数のタスクを存在させて、各タスクに計算を割り振ることを指す[4]。
>そこではタイムシェアリング技術などが使われる。
>並行計算は、並列計算(parallel computing)としばしば混同される。
>
>並列計算はマルチプロセッサ前提であり、独立した各プロセッサが割り振られた計算を同時実行することを指す。
>故にシングルプロセッサでは不可になる[2]。
>分散システム内の各コンピュータが割り振られた計算を同時実行するのもそうである。
>
>並行計算は一つのプロセッサに複数のタスクを存在させて、各タスクに計算を割り振ることを指す[4]。
>そこではタイムシェアリング技術などが使われる。
148デフォルトの名無しさん
2025/12/12(金) 23:23:20.57ID:tMtI2IXb >>132
AはBのproperty(特性/性質/属性)の一つという定義と
AはBを実現するアプローチの一つ定義は同じではないよ
これはどっちかが絶対的な正解という問題ではなくて
mutual exclusionをどういう意味範囲で使ってるかの問題
compare-and-swapのようなatomic operationでも
レイヤーを掘り下げればクリティカルセクションがあって
mutual exclusionというpropertyを持ってると考えるなら
wikipediaの定義でもおかしくはない
(一般的かどうかはさておき)
あと何を誤解してると思ったのかは書いてもらわないとわからん
AはBのproperty(特性/性質/属性)の一つという定義と
AはBを実現するアプローチの一つ定義は同じではないよ
これはどっちかが絶対的な正解という問題ではなくて
mutual exclusionをどういう意味範囲で使ってるかの問題
compare-and-swapのようなatomic operationでも
レイヤーを掘り下げればクリティカルセクションがあって
mutual exclusionというpropertyを持ってると考えるなら
wikipediaの定義でもおかしくはない
(一般的かどうかはさておき)
あと何を誤解してると思ったのかは書いてもらわないとわからん
149デフォルトの名無しさん
2025/12/12(金) 23:45:04.62ID:tMtI2IXb >>133
1. ミューテックスと排他制御(mutual exclusion)を区別しよう
ミューテックスは排他制御を実現する方法の一つで
locked/unlockedの状態を管理する変数だったり構造体だったりの実装のこと
排他制御(mutual exclusion)という概念とは別もの
2. ワーカーを使わないシングルスレッドのJavaScriptにおいて排他制御は不要か?
もちろん必要
https://web.mit.edu/6.102/www/sp25/classes/16-mutual-exclusion/
3. ワーカーを使わないシングルスレッドのJavaScriptにおいてミューテックスは不要か?
ミューテックスが必要な状況ももちろんある
例えば複数のダウンロードリクエストを並行処理しているダウンローダーで
特定のサイトは最大1コネクションのダウンロードしか許可しておらず
複数同時ダウンロードをすると全部強制終了されてしまう状況とか
1. ミューテックスと排他制御(mutual exclusion)を区別しよう
ミューテックスは排他制御を実現する方法の一つで
locked/unlockedの状態を管理する変数だったり構造体だったりの実装のこと
排他制御(mutual exclusion)という概念とは別もの
2. ワーカーを使わないシングルスレッドのJavaScriptにおいて排他制御は不要か?
もちろん必要
https://web.mit.edu/6.102/www/sp25/classes/16-mutual-exclusion/
3. ワーカーを使わないシングルスレッドのJavaScriptにおいてミューテックスは不要か?
ミューテックスが必要な状況ももちろんある
例えば複数のダウンロードリクエストを並行処理しているダウンローダーで
特定のサイトは最大1コネクションのダウンロードしか許可しておらず
複数同時ダウンロードをすると全部強制終了されてしまう状況とか
150デフォルトの名無しさん
2025/12/12(金) 23:59:32.76ID:2HyQrFLK >>149
無知だな
基本を分かっていない
ミューテックスはマルチスレッド時に同時アクセスの競合が起きる可能性がある場合に用いてスレッドを待たせる機能がある
特定のサイトは最大1コネクションのダウンロードしか許可してない場合
ワーカーを用いないJavaScriptは並行処理なのでミューテックスは不要
単なるカウンター変数のみでよい
無知だな
基本を分かっていない
ミューテックスはマルチスレッド時に同時アクセスの競合が起きる可能性がある場合に用いてスレッドを待たせる機能がある
特定のサイトは最大1コネクションのダウンロードしか許可してない場合
ワーカーを用いないJavaScriptは並行処理なのでミューテックスは不要
単なるカウンター変数のみでよい
151デフォルトの名無しさん
2025/12/13(土) 00:03:09.62ID:1Rkfvz+k >>143
>並行処理=同時進行するが同時に実行されることはない
>並列処理=同時に実行されるためメモリ競合などの対策が必要
一般的な定義からすると↑これはどっちも間違ってる
並行処理は同時実行されてる部分もあれば同時実行できない部分ももある
同時実行できない部分の制御のため競合対策が必要
並列処理は同時実行可能な処理を指すので競合対策は不要
同時実行できない処理を並列処理とは普通は言わない
>並行処理=同時進行するが同時に実行されることはない
>並列処理=同時に実行されるためメモリ競合などの対策が必要
一般的な定義からすると↑これはどっちも間違ってる
並行処理は同時実行されてる部分もあれば同時実行できない部分ももある
同時実行できない部分の制御のため競合対策が必要
並列処理は同時実行可能な処理を指すので競合対策は不要
同時実行できない処理を並列処理とは普通は言わない
152デフォルトの名無しさん
2025/12/13(土) 00:07:42.28ID:TTFtgmCI153デフォルトの名無しさん
2025/12/13(土) 00:07:52.21ID:1Rkfvz+k154デフォルトの名無しさん
2025/12/13(土) 00:36:34.04ID:1Rkfvz+k 現実的には単なるカウンター変数をミューテックスとして利用するだけではダウンローダーに必要な機能を満たせないからキューイングできるタイプの非同期ミューテックスを使う
155デフォルトの名無しさん
2025/12/13(土) 01:22:57.78ID:O7dPDRw7 >>153
いいえカウンター変数とmutexは異なります
mutexは他のスレッドがロック中にスレッドを待たされる機能と利用が可能になったときに再開させる機能を伴います
その効率のためOSが提供するfutex機能を用いてmutexを実装する環境が多いです
いいえカウンター変数とmutexは異なります
mutexは他のスレッドがロック中にスレッドを待たされる機能と利用が可能になったときに再開させる機能を伴います
その効率のためOSが提供するfutex機能を用いてmutexを実装する環境が多いです
156デフォルトの名無しさん
2025/12/13(土) 03:20:12.64ID:diqjnlrE >>147
参照された記事には並行処理における競合対策は不要と記載されていました?
また、「コンピューティング」という、物理、実装を意識するレベルでの具体的差異をこちらは否定していない
その前段となる概念レベルの関係についての言及であり
>Concurrency is a broader concept that encompasses several related ideas, including:
>Parallelism (simultaneous execution on multiple processing units). Parallelism executes tasks independently on multiple CPU cores. Concurrency allows for multiple threads of control at the program level, which can use parallelism or time-slicing to perform these tasks. Programs may exhibit parallelism only, concurrency only, both parallelism and concurrency, neither.
https://en.wikipedia.org/wiki/Concurrency_%28computer_science%29#Related_concepts
実際に並行、並列処理の実装にあたっては、物理、ハードウェア的な制約に基づき、当然、両者は弁別される
言うまでもないがシングルコアにて並列処理は実装できまい
さりとて逆もしかりとならないわけで
前者は後者を包含している、後者は前者の下位概念であり、具体的な実現手段
「並行 ⊃ 並行、並列」のように概念のポケットに、それとは別に具体的技術としての「並行」「並列」が入るイメージ
そして繰り返すけど、本件論点は競合考慮、ミューテックスの要否では?
並行プログラミングする際、これを不要とする立場?
参照された記事には並行処理における競合対策は不要と記載されていました?
また、「コンピューティング」という、物理、実装を意識するレベルでの具体的差異をこちらは否定していない
その前段となる概念レベルの関係についての言及であり
>Concurrency is a broader concept that encompasses several related ideas, including:
>Parallelism (simultaneous execution on multiple processing units). Parallelism executes tasks independently on multiple CPU cores. Concurrency allows for multiple threads of control at the program level, which can use parallelism or time-slicing to perform these tasks. Programs may exhibit parallelism only, concurrency only, both parallelism and concurrency, neither.
https://en.wikipedia.org/wiki/Concurrency_%28computer_science%29#Related_concepts
実際に並行、並列処理の実装にあたっては、物理、ハードウェア的な制約に基づき、当然、両者は弁別される
言うまでもないがシングルコアにて並列処理は実装できまい
さりとて逆もしかりとならないわけで
前者は後者を包含している、後者は前者の下位概念であり、具体的な実現手段
「並行 ⊃ 並行、並列」のように概念のポケットに、それとは別に具体的技術としての「並行」「並列」が入るイメージ
そして繰り返すけど、本件論点は競合考慮、ミューテックスの要否では?
並行プログラミングする際、これを不要とする立場?
157デフォルトの名無しさん
2025/12/13(土) 07:39:32.48ID:seiImwq0 >>156
並列を用いない場合=マルチスレッドを用いない場合=シングルスレッドの場合、
並行処理でメモリアクセスが同時に実行されることはないためメモリ競合は発生しない。
つまりカウンターやフラグなどあらゆる変数についてMutexを用いる必要がない。
これはJavaScriptだけでなくRustでシングルスレッドで非同期タスクを並行処理する場合も同じ。
具体的にはtokioのspawn (並行&並列)はSendトレイト境界があるため変数共有にMutexなどが必須だが、
spawn_local (並行のみ)はSendトレイト境界がないためMutexは不要という形で表れる。
並列を用いない場合=マルチスレッドを用いない場合=シングルスレッドの場合、
並行処理でメモリアクセスが同時に実行されることはないためメモリ競合は発生しない。
つまりカウンターやフラグなどあらゆる変数についてMutexを用いる必要がない。
これはJavaScriptだけでなくRustでシングルスレッドで非同期タスクを並行処理する場合も同じ。
具体的にはtokioのspawn (並行&並列)はSendトレイト境界があるため変数共有にMutexなどが必須だが、
spawn_local (並行のみ)はSendトレイト境界がないためMutexは不要という形で表れる。
158デフォルトの名無しさん
2025/12/13(土) 08:07:26.77ID:xrC7LiGl 関連型ってT<U>みたいな型依存型ができないからその代用だよね
159デフォルトの名無しさん
2025/12/13(土) 10:56:12.72ID:vOZmwqT4 シングルスレッドでも2つの非同期処理がawaitを挟んで同じメモリを参照・更新する時は
data raceのリスクがあるから気をつけてくれ
Rustの場合は&mutが他の参照をブロックするから問題になりにくいけど
data raceのリスクがあるから気をつけてくれ
Rustの場合は&mutが他の参照をブロックするから問題になりにくいけど
160デフォルトの名無しさん
2025/12/13(土) 11:00:34.93ID:/DhArST+ 日本語より
concurrent
parallel
distributed
で議論した方が良いと思うの
https://zenn.dev/koron/articles/3ddcaaeae37f9befdf70
concurrent
parallel
distributed
で議論した方が良いと思うの
https://zenn.dev/koron/articles/3ddcaaeae37f9befdf70
161デフォルトの名無しさん
2025/12/13(土) 11:37:19.65ID:uGVM51WN 並行はヘテロ
並列はホモ
並列はホモ
162デフォルトの名無しさん
2025/12/13(土) 12:58:20.04ID:8qQHr6Hn 同時アクセスの可能性があるものにmutexでロックかけろってだけじゃないの
163デフォルトの名無しさん
2025/12/13(土) 14:26:19.82ID:vEYY11o1164デフォルトの名無しさん
2025/12/13(土) 14:26:52.20ID:DjrUGhug >>162
Mutexは別々のスレッド同士が同時アクセスするデータ競合を防げるよ
通常のstd::sys::Mutexだと既にロックを持っている同じスレッドでロックしようとすると動作の保証はなくてパニックするかデッドロックするかなど環境依存なので用いてはダメだけど
つまりそれはマルチスレッド用
Mutexは別々のスレッド同士が同時アクセスするデータ競合を防げるよ
通常のstd::sys::Mutexだと既にロックを持っている同じスレッドでロックしようとすると動作の保証はなくてパニックするかデッドロックするかなど環境依存なので用いてはダメだけど
つまりそれはマルチスレッド用
165デフォルトの名無しさん
2025/12/13(土) 14:48:01.82ID:vvvRno5n 一般的なアプリケーションプログラミングにおいては、排他制御の対象はデータというよりコードの特定のセクションであることが多い
当該セクションで扱うのが単一のデータストアである場合はそのデータストアに対する単純なロックに帰着するが、実際にはそうでない場合も多い
当該セクションで扱うのが単一のデータストアである場合はそのデータストアに対する単純なロックに帰着するが、実際にはそうでない場合も多い
166デフォルトの名無しさん
2025/12/13(土) 15:10:49.43ID:6mP4NQXw ケントンプソンに書き直してもらったほうがいいだろこの言語
167デフォルトの名無しさん
2025/12/13(土) 20:30:59.61ID:CZ2kQ+mp 自演するにしても、逆に自演ってバレバレになる1レスごとルーパチじゃなく
せめてWi-Fiとスマホ回線でやればいいのに
せめてWi-Fiとスマホ回線でやればいいのに
レスを投稿する
ニュース
- 【芸能】波瑠と高杉真宙が結婚 ドラマ共演きっかけで交際2年ゴールイン 12月上旬に婚姻届提出し既に挙式終え (スポニチ) [湛然★]
- 高市内閣の若い世代の支持率は92.4% FNN世論調査★4 [♪♪♪★]
- ゼレンスキー氏「高市総理に感謝」 9000億円超追加支援に 「国際秩序に貢献」 (動画あり) [ごまカンパチ★]
- 【MLB】村上宗隆の『小型契約』は吉田正尚の影響か 市場が思いのほか停滞 「NPB打者に懐疑的。吉田が高すぎた」 [冬月記者★]
- 【徳島】「体調が悪くなったら自己責任」と同意書求める 最長1年2か月期限切れ 生活保護受給者に賞味期限切れ食品を支給 徳島市 ★3 [ぐれ★]
- 「ONE PIECE」尾田栄一郎、原作は「ここからが大変」「僕は歳をとってしまったので最高速度で来年もズッシリドッシリ航海します」 [muffin★]
- 会社から従業員全員にサービス残業やめろって通達来たんだが
- 【正論】X「誰だよチャーハンをレンゲで食う文化作ったやつ💢スプーンのが食べやすいだろ」 [394133584]
- おいお前、チンポでかすぎひん?
- もうすぐメリクリ学園アイドルマスター学マススレ
- 口がクサいと笑うのはキミがいい〜でもキモいねって嬉しそうなのも〜
- 米は余っていないし 値下がりもしない
