公式
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 part25
https://mevius.5ch.net/test/read.cgi/tech/1722354386/
ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.5ch.net/test/read.cgi/tech/1514107621/
Rust part26
レス数が900を超えています。1000を超えると表示できなくなるよ。
1デフォルトの名無しさん
2024/09/20(金) 22:18:38.38ID:c48cFuZJ818デフォルトの名無しさん
2024/11/14(木) 04:49:13.06ID:yxSXUQjo Claude ai 無料でも有能で笑った
819デフォルトの名無しさん
2024/11/14(木) 09:48:02.77ID:ftI5Ceve >>817
それはバージョン o1 だった?
それはバージョン o1 だった?
820デフォルトの名無しさん
2024/11/14(木) 17:17:13.60ID:9ejC22ly >>819
ChatGPTではなく、OpenAI o1 のことかいな?
ChatGPTではなく、OpenAI o1 のことかいな?
821デフォルトの名無しさん
2024/11/14(木) 20:42:25.26ID:ftI5Ceve すまん、違うものだったか
孫さんの動画でGPTの次のバージョンのような扱いしてたので同じかと思ってた
孫さんの動画でGPTの次のバージョンのような扱いしてたので同じかと思ってた
822デフォルトの名無しさん
2024/11/16(土) 05:20:14.39ID:Heg70qiV アメリカ政府が「安全な言語を強制する」姿勢は、
「規制」だね。それによりC/C++だけが排除される。
ずる賢い連中だ。日本の半導体もそれで駄目になった。
「規制」だね。それによりC/C++だけが排除される。
ずる賢い連中だ。日本の半導体もそれで駄目になった。
823デフォルトの名無しさん
2024/11/16(土) 06:03:12.01ID:KjVWfR2g824デフォルトの名無しさん
2024/11/16(土) 06:40:57.58ID:Oydl0g71 時間ライブラリ、chrono使いにくいなーと思ってtimeに乗り換えたけど
メンテ状態がいまいちだし、変な仕様がいくつもあるなーと悩んでた
今日 jiff を見つけて試してみたら、とても使いやすい
設計のベースがjsのTemporalということもあり、変な独自仕様が少なそう
作者が有名人だし、今後も期待できる
ただちょっとバイナリサイズが大きめかな
メンテ状態がいまいちだし、変な仕様がいくつもあるなーと悩んでた
今日 jiff を見つけて試してみたら、とても使いやすい
設計のベースがjsのTemporalということもあり、変な独自仕様が少なそう
作者が有名人だし、今後も期待できる
ただちょっとバイナリサイズが大きめかな
825デフォルトの名無しさん
2024/11/16(土) 09:37:53.01ID:buoPSpZk826デフォルトの名無しさん
2024/11/16(土) 14:25:13.85ID:YZsYA2TA プロが一番使っている言語であるところのC/C++だけが、
アメリカ当局の鶴の一声で潰されようとしている。
アメリカ当局の鶴の一声で潰されようとしている。
827デフォルトの名無しさん
2024/11/16(土) 14:55:20.01ID:KjVWfR2g 欠陥言語C/C++が一掃されるのは良いこと
無知と怠惰が欠陥言語にしがみつく
無知と怠惰が欠陥言語にしがみつく
828デフォルトの名無しさん
2024/11/16(土) 15:50:00.42ID:YZsYA2TA 市場やソフトウェア業界のプログラマや個々の経営者が決める
べきであり、政府が強制すべきではない。
べきであり、政府が強制すべきではない。
829デフォルトの名無しさん
2024/11/16(土) 16:25:18.89ID:/+LxZ+59 サイコパスは「痛みを伴う失敗」から学習できない!
2024.11.15
nazology.kusuguru.co.jp/archives/165730
「パワハラ上司が生き残る条件」みんな●●だった!
2024.07.12
nazology.net/archives/156599
2024.11.15
nazology.kusuguru.co.jp/archives/165730
「パワハラ上司が生き残る条件」みんな●●だった!
2024.07.12
nazology.net/archives/156599
830デフォルトの名無しさん
2024/11/16(土) 16:50:05.47ID:vdtMtO4q831デフォルトの名無しさん
2024/11/16(土) 16:59:51.39ID:YZsYA2TA832デフォルトの名無しさん
2024/11/16(土) 18:31:49.86ID:Pw6hvHrk 欠陥言語使わないといけない世界は改善したほうが良い
833デフォルトの名無しさん
2024/11/16(土) 18:48:21.70ID:buoPSpZk >>828
別に法律で何時までにどうしろと決めたわけでもないので好きにすればいいけど、技術力が無い会社は置いてかれる、それだけの事よ。
別に法律で何時までにどうしろと決めたわけでもないので好きにすればいいけど、技術力が無い会社は置いてかれる、それだけの事よ。
834デフォルトの名無しさん
2024/11/16(土) 20:55:43.27ID:KjVWfR2g 全盛を極めていたプログラミング言語たちが情勢の変化により落ちていった
今回はC++の番
今回はC++の番
835デフォルトの名無しさん
2024/11/16(土) 21:01:25.26ID:ri7JcYNG 特定の言語使うことを技術力と思うのは勘違いな
たいした価値を生まない
たいした価値を生まない
836デフォルトの名無しさん
2024/11/16(土) 21:26:15.37ID:M8rnPwhr Rustの採用って実のところ、既存の資産を捨ててゼロベースで書く、キャッチアップのためにコストをかける (慣れてる言語よりも時間がかかることを許容する) とかの思い切りの問題だと思う
837デフォルトの名無しさん
2024/11/16(土) 21:37:25.08ID:vdtMtO4q それはそう。
C++ が良い言語ではないことに C++ の設計者は自覚的で、それでもなお「今」目の前にある問題に対処可能であることを理念にしてる。
まだ不十分だけど良い言語だなんてのは実務者にはなんの救いにもならない。
汚くてもなんとかする方法はあるほうがありがたい。
ただ、無限に汚くなり続けることは許容できないのだから、どこかで新しいものが生まれてリセットする必要はあって今がその時なんだろう。
でもまあ現実に使われるものは汚いものだよ。
だって現実が汚いものだから。
Rust もいずれ汚くなって次のなにかに置き換わる。
それが半世紀くらい後だとよいね。
C++ が良い言語ではないことに C++ の設計者は自覚的で、それでもなお「今」目の前にある問題に対処可能であることを理念にしてる。
まだ不十分だけど良い言語だなんてのは実務者にはなんの救いにもならない。
汚くてもなんとかする方法はあるほうがありがたい。
ただ、無限に汚くなり続けることは許容できないのだから、どこかで新しいものが生まれてリセットする必要はあって今がその時なんだろう。
でもまあ現実に使われるものは汚いものだよ。
だって現実が汚いものだから。
Rust もいずれ汚くなって次のなにかに置き換わる。
それが半世紀くらい後だとよいね。
838デフォルトの名無しさん
2024/11/16(土) 22:52:16.06ID:yOVM5XGF C/C++しか使えないダメ人間だと他の言語に手を出したり習得したりするハードルも高くそんなスキルもないんだな
普通に色んな種類の言語をやってきていればすぐに対応できるようになる
普通に色んな種類の言語をやってきていればすぐに対応できるようになる
839デフォルトの名無しさん
2024/11/17(日) 00:10:11.34ID:QnncDtq4 C/C++ を「ちゃんと」使えているならかなり能力は高いはず。
あの無茶苦茶なのを把握してるわけだからな。
でもちゃんと理解せずに使っているやつもそれなりに多いのもそう。
あの無茶苦茶なのを把握してるわけだからな。
でもちゃんと理解せずに使っているやつもそれなりに多いのもそう。
840デフォルトの名無しさん
2024/11/17(日) 01:01:11.07ID:XcYTf0nE アメリカ政府がRustが欠陥言語であることに気づいて無いだけだ。
841デフォルトの名無しさん
2024/11/17(日) 09:50:13.04ID:e6wbF7Sw >>840
欠陥の無い言語教えれ
欠陥の無い言語教えれ
842デフォルトの名無しさん
2024/11/17(日) 10:45:30.77ID:tn0ahmRj RustはCの置き換えには最適だが
C++からRustはノーチャンス
C++からRustはノーチャンス
843デフォルトの名無しさん
2024/11/17(日) 11:09:03.35ID:LOC+6QAG844デフォルトの名無しさん
2024/11/17(日) 12:57:50.30ID:QnncDtq4 >>843
まあその過去資産がクソデカだって話なんだけどな。
まあその過去資産がクソデカだって話なんだけどな。
845デフォルトの名無しさん
2024/11/17(日) 13:22:59.92ID:dobbbVxQ 現実的なことを言うとRustの仕事は多くないからな
世の中的にはC++の方が多いし、それよりもC#やJava、JavascriptやPythonの方が多い
現状Rustを書ける人が少ないから組織としても採用しづらい、みたいなところもある
世の中的にはC++の方が多いし、それよりもC#やJava、JavascriptやPythonの方が多い
現状Rustを書ける人が少ないから組織としても採用しづらい、みたいなところもある
846デフォルトの名無しさん
2024/11/17(日) 14:04:38.06ID:+vBbiqfq Rustは欠陥が多すぎる。
847デフォルトの名無しさん
2024/11/17(日) 14:14:43.13ID:LOC+6QAG >>846
C++と比べても桁違いに欠陥ない
C++と比べても桁違いに欠陥ない
848デフォルトの名無しさん
2024/11/17(日) 14:17:04.13ID:+vBbiqfq849デフォルトの名無しさん
2024/11/17(日) 16:20:28.69ID:QnncDtq4 Rust に (まだ) 足りないものはあるという意味では欠陥はあるが、設計が間違ってて改善の余地がないような欠陥は少ないだろ。
C の場当たり過ぎる設計に比べれば Rust はだいぶん綺麗だわ。
C の場当たり過ぎる設計に比べれば Rust はだいぶん綺麗だわ。
850デフォルトの名無しさん
2024/11/17(日) 17:47:06.07ID:ZjcPAB2G C++は多段に増築して要らないものも多く
新しい仕様は良いけど広まっていなくて
標準ライブラリのインターフェイスを新たな仕様にすることもできなくて
初心者にとってC++はRustの何倍も複雑で学習難易度も高いのよ
Rustはシンプルに高機能でプログラミング効率もいいね
新しい仕様は良いけど広まっていなくて
標準ライブラリのインターフェイスを新たな仕様にすることもできなくて
初心者にとってC++はRustの何倍も複雑で学習難易度も高いのよ
Rustはシンプルに高機能でプログラミング効率もいいね
851デフォルトの名無しさん
2024/11/17(日) 21:11:05.44ID:8SN0eeCN C++はBoostあたりまでは良かったけどそれ以降は機能のゴミ箱
上品な言い方をすればキッチンシンク担当になった
上品な言い方をすればキッチンシンク担当になった
852デフォルトの名無しさん
2024/11/17(日) 21:56:59.22ID:/B1+r+jF >>849
そうでもない。
そうでもない。
853デフォルトの名無しさん
2024/11/17(日) 22:25:57.84ID:rGJZLWmT mordern c+で随分楽になったけど
854デフォルトの名無しさん
2024/11/17(日) 22:26:17.33ID:rGJZLWmT modern
855デフォルトの名無しさん
2024/11/17(日) 22:37:46.32ID:lBJAP2+3 CをRustで置き換えたら劇遅になるから重要な部分は無理じゃね
856デフォルトの名無しさん
2024/11/17(日) 22:55:33.70ID:HbSpYeRV >>855
デバイスドライバを両方で実装して速度がほぼ変わらないことが立証されている
デバイスドライバを両方で実装して速度がほぼ変わらないことが立証されている
857デフォルトの名無しさん
2024/11/17(日) 23:02:46.96ID:/B1+r+jF >>856
それは、一般にデバイスドライバはシンプルなアルゴリズムしか使ってないからだよ。
それは、一般にデバイスドライバはシンプルなアルゴリズムしか使ってないからだよ。
858デフォルトの名無しさん
2024/11/17(日) 23:11:47.34ID:vlQbYPk+ 同じアルゴリズムでRustが遅い例プリーズ
859デフォルトの名無しさん
2024/11/17(日) 23:14:29.54ID:/B1+r+jF860デフォルトの名無しさん
2024/11/17(日) 23:19:43.73ID:ZjcPAB2G >>859
ウソつき
ウソつき
861デフォルトの名無しさん
2024/11/17(日) 23:25:29.83ID:dobbbVxQ 安全側に寄せる部分でRustの方が基本的にコストかかるんじゃないの?
グローバルな可変状態はMutexが無いと書けない (アクセスの度にロックが必要) とか、Cellは実行時に借用チェックするとか、配列は基本的に範囲チェックされるとか
コンパイラは利用側を知り得ない (複数スレッドから呼ばれる可能性があると想定せざるを得ない) からMutexが必要だけど実際は無いと想定して良い、みたいなケースはありそう
グローバルな可変状態はMutexが無いと書けない (アクセスの度にロックが必要) とか、Cellは実行時に借用チェックするとか、配列は基本的に範囲チェックされるとか
コンパイラは利用側を知り得ない (複数スレッドから呼ばれる可能性があると想定せざるを得ない) からMutexが必要だけど実際は無いと想定して良い、みたいなケースはありそう
862デフォルトの名無しさん
2024/11/17(日) 23:28:19.03ID:/B1+r+jF863デフォルトの名無しさん
2024/11/17(日) 23:34:51.20ID:vlQbYPk+ >>859
unsafe使えば同等になるなら、どこかの誰かさん以外はRustが遅いとは思わないのでは?
とりま、unsafe使わない遅いコードさらしてみては?
ここの優秀な方々が「unsafeでもこうすればCと同等の速さだ!」ってコードを返してくれるかもしれん。
unsafe使えば同等になるなら、どこかの誰かさん以外はRustが遅いとは思わないのでは?
とりま、unsafe使わない遅いコードさらしてみては?
ここの優秀な方々が「unsafeでもこうすればCと同等の速さだ!」ってコードを返してくれるかもしれん。
864デフォルトの名無しさん
2024/11/17(日) 23:37:27.94ID:HbSpYeRV865デフォルトの名無しさん
2024/11/17(日) 23:41:13.09ID:8NoNC7dP 他のレスに「あなたは正しくない」とだけ書けば自分が賢いということになるなら、それほど楽なことは無いな
スマホさえ持ってれば小学生でも同じことはできるわけだし
スマホさえ持ってれば小学生でも同じことはできるわけだし
866デフォルトの名無しさん
2024/11/17(日) 23:53:16.59ID:wVREKDBU 100点オジと複オジはいつまでたっても進歩がないな
867デフォルトの名無しさん
2024/11/18(月) 00:24:33.99ID:GfaceI2A 基礎的なデータ構造に unsafe が必要になるのは本当だ。
基礎は std で提供されるのでその上では unsafe の仕様が少なくなるように巧妙に設計されている。
std を使えないときに std と同等なものを作らなければならないような状況だと C とあまり差はない。
逆に言えば unsafe を含む下回りをかっちり作りさえすれば Rust のほうが優秀だよ。
基礎は std で提供されるのでその上では unsafe の仕様が少なくなるように巧妙に設計されている。
std を使えないときに std と同等なものを作らなければならないような状況だと C とあまり差はない。
逆に言えば unsafe を含む下回りをかっちり作りさえすれば Rust のほうが優秀だよ。
868デフォルトの名無しさん
2024/11/18(月) 02:14:46.19ID:Ui+tF1gu あゝこんなときRustにもextern "C"があれば平和が訪れるのに
869デフォルトの名無しさん
2024/11/18(月) 04:44:45.38ID:IRvDm3R2 >>840
「欠陥のない言語は存在しない。だがデバッグの不可能な言語もまた存在しない」
「欠陥のない言語は存在しない。だがデバッグの不可能な言語もまた存在しない」
870デフォルトの名無しさん
2024/11/18(月) 07:01:58.78ID:rC7K9dh5 おれの作った言語はデバッグ機能ないけど?
871デフォルトの名無しさん
2024/11/18(月) 07:06:12.01ID:INV+aJIp 【ナゾロジー】サイコパスは「痛みを伴う失敗」から学習できない! [すらいむ★]
http://itest.5ch.net/egg/test/read.cgi/scienceplus/1731838156
http://itest.5ch.net/egg/test/read.cgi/scienceplus/1731838156
872デフォルトの名無しさん
2024/11/18(月) 08:33:03.50ID:boZQ3aHy >>868
あるやる
あるやる
873デフォルトの名無しさん
2024/11/18(月) 09:04:25.28ID:92FA8ffy874デフォルトの名無しさん
2024/11/18(月) 09:13:51.03ID:92FA8ffy >>865
ここに書かないのは、「企業秘密的」な意味も有るんだよ。
ここに書かないのは、「企業秘密的」な意味も有るんだよ。
875デフォルトの名無しさん
2024/11/18(月) 09:30:27.68ID:IRvDm3R2 >>862
競プロでもやってんの?
競プロでもやってんの?
876デフォルトの名無しさん
2024/11/18(月) 09:41:47.81ID:7J3JrtFR >>873
RustがC/C++に勝利した一番大きな要因は
メモリ操作など基本的にunsafeにたどり着く様々な操作を
中身でunsafeを使っていてもそれを外へ染み出さないsafeなインターフェイスを提供して実用的に使えることを示した点にある
これがRustの標準ライブラリの中核であり
同様にしてunsafeが外へ染み出さないsafeなライブラリを作ることもできる
RustがC/C++に勝利した一番大きな要因は
メモリ操作など基本的にunsafeにたどり着く様々な操作を
中身でunsafeを使っていてもそれを外へ染み出さないsafeなインターフェイスを提供して実用的に使えることを示した点にある
これがRustの標準ライブラリの中核であり
同様にしてunsafeが外へ染み出さないsafeなライブラリを作ることもできる
877デフォルトの名無しさん
2024/11/18(月) 10:43:14.43ID:92FA8ffy >>876
馬鹿発見。
馬鹿発見。
878デフォルトの名無しさん
2024/11/18(月) 12:57:29.84ID:0TuJxtFY879デフォルトの名無しさん
2024/11/18(月) 13:58:30.56ID:DtxKjacA unsafeが染み出すとか言っているの本気?
意図的に出さないと出てこないよ?
// 意図的なunsafe
pub unsafe fn dangerous_operation() {
// 何らかの危険な操作
}
// 利用者側
unsafe {
dangerous_operation(); // ここでunsafeが必要
}
普通はこう書く
// ライブラリ側
pub fn safe_wrapper() {
unsafe {
// 内部で危険な操作を行うが、
// 安全性を保証する条件をすべて満たしている
}
}
// 利用者側
safe_wrapper(); // unsafeは不要
意図的に出さないと出てこないよ?
// 意図的なunsafe
pub unsafe fn dangerous_operation() {
// 何らかの危険な操作
}
// 利用者側
unsafe {
dangerous_operation(); // ここでunsafeが必要
}
普通はこう書く
// ライブラリ側
pub fn safe_wrapper() {
unsafe {
// 内部で危険な操作を行うが、
// 安全性を保証する条件をすべて満たしている
}
}
// 利用者側
safe_wrapper(); // unsafeは不要
880デフォルトの名無しさん
2024/11/18(月) 20:31:59.79ID:7J3JrtFR881デフォルトの名無しさん
2024/11/18(月) 21:05:40.46ID:K2lQU8l5 >>874
説明は求めないけどね?
「自分は知ってるが説明する義理はない」なんて第三者からみれば「俺は分かりません説明できないです」と書くのと変わらないじゃない
分からないならスルーすればいいのに、それをわざわざ書くのはダサくない?
説明は求めないけどね?
「自分は知ってるが説明する義理はない」なんて第三者からみれば「俺は分かりません説明できないです」と書くのと変わらないじゃない
分からないならスルーすればいいのに、それをわざわざ書くのはダサくない?
882デフォルトの名無しさん
2024/11/18(月) 21:41:56.71ID:K2lQU8l5 実際にはunsafe使わないRustはCよりもいくらかオーバーヘッドが生じるとは思う
Cでなポインタのコピーで済むけどsafe RustだとArcが必要だからcloneの際にロックのコストがかかるとか、配列へのインデックスでのアクセスで境界チェックされるとか
Rustでは安全側に寄せる分のコストはかかるはず
Cでなポインタのコピーで済むけどsafe RustだとArcが必要だからcloneの際にロックのコストがかかるとか、配列へのインデックスでのアクセスで境界チェックされるとか
Rustでは安全側に寄せる分のコストはかかるはず
883デフォルトの名無しさん
2024/11/18(月) 21:52:16.61ID:k3+/8xDm >>882
本当に各チェックを安全に外せる場合
つまり安全なインターフェイスを提供できる場合
Rustでもそれを安全なライブラリとして提供すればよいですね
実際にそのようにしてRustの標準ライブラリが作られて来ていますから
本当に各チェックを安全に外せる場合
つまり安全なインターフェイスを提供できる場合
Rustでもそれを安全なライブラリとして提供すればよいですね
実際にそのようにしてRustの標準ライブラリが作られて来ていますから
884デフォルトの名無しさん
2024/11/18(月) 22:05:29.90ID:1mdid6am >>879のコード例だと本当はアウトなのに屁理屈でセーフという俺ルールでねじ曲げてるだけに見える
それunsafeやない、アウトや!
それunsafeやない、アウトや!
885デフォルトの名無しさん
2024/11/18(月) 22:35:51.22ID:SToHXvxk 計測して本当にunsafeにする価値がある部分だけ暴走覚悟でunsafeにすればいい
満たさないと危なくなる条件はdebug_assertしておくと気休めになる
満たさないと危なくなる条件はdebug_assertしておくと気休めになる
886デフォルトの名無しさん
2024/11/18(月) 22:46:47.54ID:r0p6egBs >いくらかオーバーヘッドが生じるとは思う
そんなレベルじゃないだろw
そんなレベルじゃないだろw
887デフォルトの名無しさん
2024/11/18(月) 22:49:05.04ID:7J3JrtFR >>882
安全のためのオーバーヘッドはどちらの言語も同じです
Rustも&TならばCopy実装型なのでコピー出来ますからC言語と同じです
Arcのcloneはロックフリーです
ロックされるのはその中で用いるMutexなど
C言語でも排他制御が必要なところではMutexが使われます
ヒープを使うデータをポインタで指す人数が変化していくならば最後の人が解放するためにリファレンスカウント管理が必要です
実際にC++ではそれがshared_ptrとしてArcと同様なものが提供されています
安全のためのオーバーヘッドはどちらの言語も同じです
Rustも&TならばCopy実装型なのでコピー出来ますからC言語と同じです
Arcのcloneはロックフリーです
ロックされるのはその中で用いるMutexなど
C言語でも排他制御が必要なところではMutexが使われます
ヒープを使うデータをポインタで指す人数が変化していくならば最後の人が解放するためにリファレンスカウント管理が必要です
実際にC++ではそれがshared_ptrとしてArcと同様なものが提供されています
888デフォルトの名無しさん
2024/11/18(月) 22:53:38.18ID:+RZAZC6X よかった、RustとCではオーバーヘッドは同じがRustの方が少ないんだね
889デフォルトの名無しさん
2024/11/18(月) 22:59:47.77ID:x8ZZBVl/ 前提条件大杉
890デフォルトの名無しさん
2024/11/18(月) 23:17:10.99ID:tFghvvKh >>888
複おじ、幼稚すぎw
複おじ、幼稚すぎw
891デフォルトの名無しさん
2024/11/18(月) 23:40:55.05ID:k3+/8xDm Rc相当がなくArc相当のshared_ptrしかないC++はオーバーヘッドが大きい
892デフォルトの名無しさん
2024/11/18(月) 23:52:07.17ID:dSfvQiDe C++でポインタいじってる時も特定の前提条件の時まともに動くだけで、そこから外れたらすぐバグるから。安全性のレベルを合わせたら結局どちらも同じようなコードになるよ。条件チェックしてるのとしてないのを比較して速い遅い言われても。
あと、rustの方が型で前提条件弾いて全域関数を作りやすいから。下手なC++よりは最適化される場合もある。何にせよ最初ほ安全に振っておいて、そこからプロファイラかけて遅いところだけ変えて行くほうがいいと思うけどね。
あと、rustの方が型で前提条件弾いて全域関数を作りやすいから。下手なC++よりは最適化される場合もある。何にせよ最初ほ安全に振っておいて、そこからプロファイラかけて遅いところだけ変えて行くほうがいいと思うけどね。
893デフォルトの名無しさん
2024/11/19(火) 00:32:35.22ID:GSnhfwF9 参考までに聞きたいんだけど、画像処理みたいなタスクってunsafe無しでもC/C++と同等の速度を出せるの?
フィルタのように周辺画素の値を使う処理や、処理対象の画素 (もしく行) を複数スレッドに分割するような処理を想定してる
自分の知識だと、可変かつマルチスレッドのような場合はsafe Rustだと難しい気がしてる
unsafeを使うなら、オーバーラップしないように範囲を分割して、そのポインタを渡して処理させることはできるけど、safe Rustだと可変借用のルールが問題になる気がしてる
それこそunsafeを使うべき場面だというなら納得するし、safe Rustでもうまくやれるなら知っておきたい
フィルタのように周辺画素の値を使う処理や、処理対象の画素 (もしく行) を複数スレッドに分割するような処理を想定してる
自分の知識だと、可変かつマルチスレッドのような場合はsafe Rustだと難しい気がしてる
unsafeを使うなら、オーバーラップしないように範囲を分割して、そのポインタを渡して処理させることはできるけど、safe Rustだと可変借用のルールが問題になる気がしてる
それこそunsafeを使うべき場面だというなら納得するし、safe Rustでもうまくやれるなら知っておきたい
894デフォルトの名無しさん
2024/11/19(火) 00:50:32.75ID:FW/CGHup >>893
rayon crateというデーター並列処理のライブラリを使う。チャンクに分割されたパラレルイテレータを回すだけ。フィルター処理とかは割と簡単。
rayon crateというデーター並列処理のライブラリを使う。チャンクに分割されたパラレルイテレータを回すだけ。フィルター処理とかは割と簡単。
895デフォルトの名無しさん
2024/11/19(火) 01:54:46.13ID:FW/CGHup use image::{ImageBuffer, Rgb, RgbImage};
use rayon::prelude::*;
fn to_grayscale(img: &RgbImage) -> RgbImage {
let (width, height) = img.dimensions();
let mut output = ImageBuffer::new(width, height);
output.par_chunks_mut(3).zip(img.par_chunks(3)).for_each(|(out, pixel)| {
// RGB to グレースケール変換の重み付け
let gray = (0.299 * pixel[0] as f32 +
0.587 * pixel[1] as f32 +
0.114 * pixel[2] as f32) as u8;
out[0] = gray;
out[1] = gray;
out[2] = gray;
});
output
}
fn main() -> Result<(), image::ImageError> {
let img = image::open("input.jpg")?.to_rgb8();
let gray_img = to_grayscale(&img);
gray_img.save("output.jpg")?;
Ok(())
}
use rayon::prelude::*;
fn to_grayscale(img: &RgbImage) -> RgbImage {
let (width, height) = img.dimensions();
let mut output = ImageBuffer::new(width, height);
output.par_chunks_mut(3).zip(img.par_chunks(3)).for_each(|(out, pixel)| {
// RGB to グレースケール変換の重み付け
let gray = (0.299 * pixel[0] as f32 +
0.587 * pixel[1] as f32 +
0.114 * pixel[2] as f32) as u8;
out[0] = gray;
out[1] = gray;
out[2] = gray;
});
output
}
fn main() -> Result<(), image::ImageError> {
let img = image::open("input.jpg")?.to_rgb8();
let gray_img = to_grayscale(&img);
gray_img.save("output.jpg")?;
Ok(())
}
896デフォルトの名無しさん
2024/11/19(火) 02:09:20.81ID:FW/CGHup サンプル書いてみた。
RGB画像をグレースケールに変換する。
imgが入力画像、outputが出力画像のバッファ。
イテレータで回してクロージャー呼んでる。
per_chunks_mut、per_chanksでチャンクのサイズ指定。今は1ピクセルrgbで3バイトずつ取り出してクロージャーの引数として渡される。スレッドの並列処理は自動で行われてる。
例えばチャンクサイズをwidth×3とかにすれば1ラインずつデータが渡される。width×3×2とかにすれば2ラインずつ。ある程度のサイズにしたほうが高速になる。
チャンクのサイズを変えたらクロージャーの処理も変えるのを忘れずに。
RGB画像をグレースケールに変換する。
imgが入力画像、outputが出力画像のバッファ。
イテレータで回してクロージャー呼んでる。
per_chunks_mut、per_chanksでチャンクのサイズ指定。今は1ピクセルrgbで3バイトずつ取り出してクロージャーの引数として渡される。スレッドの並列処理は自動で行われてる。
例えばチャンクサイズをwidth×3とかにすれば1ラインずつデータが渡される。width×3×2とかにすれば2ラインずつ。ある程度のサイズにしたほうが高速になる。
チャンクのサイズを変えたらクロージャーの処理も変えるのを忘れずに。
897デフォルトの名無しさん
2024/11/19(火) 02:14:25.94ID:FW/CGHup これをC++で書けと言われたらやりたくない。
rustなら安全で分かりやすく書けるし、イテレータは並列処理の最適化が効く。
rustなら安全で分かりやすく書けるし、イテレータは並列処理の最適化が効く。
898デフォルトの名無しさん
2024/11/19(火) 07:54:11.15ID:126iZ9C9 rayonが出たついでの質問なんだけど、rayonのイテレーター (par_iterなど) ってグローバルなスレッドプールでなく、ThreadPoolBuilder::build で作ったスレッドプール上で実行できる?
以前調べた際によく分からなかった
以前調べた際によく分からなかった
899デフォルトの名無しさん
2024/11/19(火) 08:24:41.51ID:0JKwCmNc ところでこのスレって業務で実際にrust使ってるよーって人います?
900デフォルトの名無しさん
2024/11/19(火) 08:27:40.98ID:FW/CGHup スレッド数を自分で設定したいって意味でいいのかな?
rayon::ThreadPoolBuilder::new().num_threads(8).build_global().unwrap();
rayon::ThreadPoolBuilder::new().num_threads(8).build_global().unwrap();
901デフォルトの名無しさん
2024/11/19(火) 08:32:14.22ID:FW/CGHup use rayon::ThreadPoolBuilder;
// カスタムスレッドプール作成
let pool = ThreadPoolBuilder::new()
.num_threads(4) // スレッド数指定
.build()
.unwrap();
// スレッドプールで特定の処理を実行
pool.install(|| {
output.par_chunks_mut(row_size)
.zip(img.par_chunks(row_size))
.for_each(|...| {
// 処理
});
});
// カスタムスレッドプール作成
let pool = ThreadPoolBuilder::new()
.num_threads(4) // スレッド数指定
.build()
.unwrap();
// スレッドプールで特定の処理を実行
pool.install(|| {
output.par_chunks_mut(row_size)
.zip(img.par_chunks(row_size))
.for_each(|...| {
// 処理
});
});
902デフォルトの名無しさん
2024/11/19(火) 14:47:04.76ID:9IiXc5Vb903デフォルトの名無しさん
2024/11/19(火) 15:24:29.64ID:+UtMc6V6904デフォルトの名無しさん
2024/11/19(火) 15:42:39.43ID:s9mRA7mb Rustが勝利した原因はrayonやtokioなどのマルチスレッドを便利に安全に活かすライブラリの存在が大きいが
C/C++は数十年の年月を重ねてもそれに匹敵するものが完成しなかった
C/C++は数十年の年月を重ねてもそれに匹敵するものが完成しなかった
905デフォルトの名無しさん
2024/11/19(火) 16:37:47.00ID:Yysxm38B >>903
発端はrustでc++みたいなフィルター処理書ける?って話。c++でも書けるかもしれんが自分は面倒なんで誰かコード書いてくれ。
発端はrustでc++みたいなフィルター処理書ける?って話。c++でも書けるかもしれんが自分は面倒なんで誰かコード書いてくれ。
906デフォルトの名無しさん
2024/11/19(火) 22:42:01.95ID:126iZ9C9 >>901
ありがたい
やりたいのは「明示的に指定した場合のみ並列処理をする」プログラムで、データとしては Option::ThreadPool みたいなものを持ってるから、その中で実行したいという話
よく分かってなかったのは install の動作で、これに渡したクロージャーはプール内のスレッドで実行されると思ってたから、例えば4スレッドの場合に「スレッド1がpar_chunksを含むコードを呼びだす、それを受けてスレッド2-4が並列実行する (スレッド1はinstallに渡したクロージャの終わりでブロックされる) 」みたいなことになったりしないか…って思ってた
(公式のリファレンスは Executes op within the threadpool. という説明)
問題なさそうなら使わせてもらいます
ありがたい
やりたいのは「明示的に指定した場合のみ並列処理をする」プログラムで、データとしては Option::ThreadPool みたいなものを持ってるから、その中で実行したいという話
よく分かってなかったのは install の動作で、これに渡したクロージャーはプール内のスレッドで実行されると思ってたから、例えば4スレッドの場合に「スレッド1がpar_chunksを含むコードを呼びだす、それを受けてスレッド2-4が並列実行する (スレッド1はinstallに渡したクロージャの終わりでブロックされる) 」みたいなことになったりしないか…って思ってた
(公式のリファレンスは Executes op within the threadpool. という説明)
問題なさそうなら使わせてもらいます
907デフォルトの名無しさん
2024/11/19(火) 22:46:22.71ID:jmJ5BpPK C++で並列とかようやらんわ
SendもSyncもないとかもう考えられん
SendもSyncもないとかもう考えられん
908デフォルトの名無しさん
2024/11/19(火) 22:49:56.47ID:126iZ9C9 違うかも?
>>906 のスレッド4つの例だと、クロージャー自体はプール内のスレッド(スレッド1とする) で実行されて、スレッド1はpar_iterで並列処理を開始した後すぐ抜けて par_iter の仕事に加わるということ?
>>906 のスレッド4つの例だと、クロージャー自体はプール内のスレッド(スレッド1とする) で実行されて、スレッド1はpar_iterで並列処理を開始した後すぐ抜けて par_iter の仕事に加わるということ?
909デフォルトの名無しさん
2024/11/20(水) 00:33:04.50ID:shrZYon3 例えばスレッドプールを4で設定するとワーカースレッドが4つになります。でそれとは別にメインスレッドがあるわけで、このパラレルの処理をするときはメインスレッドもワーカーとして参加します。なので5個で回る感じ。
910デフォルトの名無しさん
2024/11/20(水) 00:36:52.89ID:ijtcomF1 pool.installとpool.scopeでメインスレッドがワーカーとして参加するかしないかが変わるみたい。
911デフォルトの名無しさん
2024/11/20(水) 00:42:34.33ID:e0+ziHsU >>907
C++にasyncがあるぞ。
C++にasyncがあるぞ。
912デフォルトの名無しさん
2024/11/20(水) 00:47:56.81ID:ijtcomF1 いずれにせよパラレルイテレータを回しているときは処理が終わるまで待つことになるんで、メインスレッド止めたくないときは別スレッドで立てる感じ。
fn non_blocking_example() {
let (tx, rx) = mpsc::channel();
std::thread::spawn(move || {
let pool = ThreadPoolBuilder::new()
.num_threads(4)
.build()
.unwrap();
pool.install(|| {
// 並列処理
});
tx.send("Done").unwrap();
});
// メインスレッドは他の処理を継続可能
println!("Doing other work");
// 必要なタイミングで結果を受信
match rx.recv() {
Ok(msg) => println!("Processing complete: {}", msg),
Err(e) => println!("Error: {}", e),
}
}
fn non_blocking_example() {
let (tx, rx) = mpsc::channel();
std::thread::spawn(move || {
let pool = ThreadPoolBuilder::new()
.num_threads(4)
.build()
.unwrap();
pool.install(|| {
// 並列処理
});
tx.send("Done").unwrap();
});
// メインスレッドは他の処理を継続可能
println!("Doing other work");
// 必要なタイミングで結果を受信
match rx.recv() {
Ok(msg) => println!("Processing complete: {}", msg),
Err(e) => println!("Error: {}", e),
}
}
913デフォルトの名無しさん
2024/11/20(水) 01:09:41.69ID:ijtcomF1 >>911
asyncは全然別の話。
rustでは型に対してsendやsyncといった属性を付けるようなイメージ。sendが付いてなければ別スレッドにデータ渡せないとかsyncが付いてなければ同時に使えないとか、そういうスレッド対応してないものを使うとコンパイラに怒られる仕組みになってる。
asyncは全然別の話。
rustでは型に対してsendやsyncといった属性を付けるようなイメージ。sendが付いてなければ別スレッドにデータ渡せないとかsyncが付いてなければ同時に使えないとか、そういうスレッド対応してないものを使うとコンパイラに怒られる仕組みになってる。
914デフォルトの名無しさん
2024/11/20(水) 08:50:31.70ID:yTy4Ahlp915デフォルトの名無しさん
2024/11/20(水) 09:59:28.14ID:MYLVUJ4i 最近のCPUは速過ぎるから第三者から見れば「速さ」は見えない
バグなら見える
それで無人の機械で速さを計測するから
第三者などという人間は不要だと分かる
バグなら見える
それで無人の機械で速さを計測するから
第三者などという人間は不要だと分かる
916デフォルトの名無しさん
2024/11/20(水) 11:26:15.05ID:W8mVvsIh Cが早くてRustが劣っていると仮定して
その差が問題なることなんてない
自分では何も生み出せないベンチ回マニアくらいだろ
その差が問題なることなんてない
自分では何も生み出せないベンチ回マニアくらいだろ
917デフォルトの名無しさん
2024/11/20(水) 12:43:18.25ID:/wT43F1g >>914
フィルター系のプログラムだとCPUのSIMD命令がかなり効くと思うんでそちらも検討するといいかと。
コンパイラが自動でやってくれる可能性もあるけど、明示的に書くと確実。
標準だと std::simd がそのうち実装される予定。
その他クレートもあるんで探してみて。
フィルター系のプログラムだとCPUのSIMD命令がかなり効くと思うんでそちらも検討するといいかと。
コンパイラが自動でやってくれる可能性もあるけど、明示的に書くと確実。
標準だと std::simd がそのうち実装される予定。
その他クレートもあるんで探してみて。
レス数が900を超えています。1000を超えると表示できなくなるよ。
ニュース
- 中国国営メディア「沖縄は日本ではない」… ★5 [BFU★]
- 高市政権にパイプ役不在…日中高まる緊張 公明党の連立離脱影響、自民内にも懸念「自分でまいた種は自分で刈り取ってもらわないと」★2 [ぐれ★]
- 【速報】 日経平均の下落率3%超す、財政懸念で長期金利上昇 [お断り★]
- 【速報】 高市政権、「日本版DOGE」を立ち上げ 米国で歳出削減をした「政府効率化省(DOGE)」になぞらえたもの [お断り★]
- 【こんなの初めて…】民泊には既にキャンセルも 中国の渡航自粛で ★2 [ぐれ★]
- 台湾声明 「台湾は独立した主権国家、中国は台湾を統治したことがなく、中国は口出しする権利ない」 中国が高市首相に抗議で ★7 [お断り★]
- 【悲報】中国を煽り運転に例えたネトウヨさん、完全に論破されてしまう [268718286]
- 山上母、安倍晋三と統一教会の関わりを知っていた。「私が加害者」と発言するも、脱会については「できれば今の形で」 [545512288]
- 日経平均、49000円割れ 国賊高市を許すな [402859164]
- 高市「金正恩総書記と会談したい」 国交ある国ですらまともに外交出来ないのに北朝鮮相手に何が出来るのこいつ [878970802]
- 中国「高市が謝罪撤回しないとこれ全部なくなるけどどうする?」 [931948549]
- 【正論】有識者「高市早苗に合理的配慮をしなかった野党が悪い」 [175344491]
