公式
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:c48cFuZJ809デフォルトの名無しさん
2024/11/13(水) 08:46:31.60ID:18dRnPdZ 米ホワイトハウス「ソフトウェアはメモリ安全でなければならない」との声明を発表:「C」「C++」よりも「Rust」などの言語を推奨
https://atmarkit.itmedia.co.jp/ait/articles/2403/18/news045.html
米国国防総省のDARPA、CからRustへのコード変換を自動化する「TRACTOR」プログラムを開始
https://atmarkit.itmedia.co.jp/ait/spv/2408/14/news045.html
https://atmarkit.itmedia.co.jp/ait/articles/2403/18/news045.html
米国国防総省のDARPA、CからRustへのコード変換を自動化する「TRACTOR」プログラムを開始
https://atmarkit.itmedia.co.jp/ait/spv/2408/14/news045.html
810デフォルトの名無しさん
2024/11/13(水) 09:16:26.38ID:T0htHWVn お
refの出番あるじゃん
コンパイラのsuggestちゃんとしてくれよ
refの出番あるじゃん
コンパイラのsuggestちゃんとしてくれよ
811デフォルトの名無しさん
2024/11/13(水) 09:17:25.81ID:T0htHWVn >>807
変更を加えるには変更を加えれば良い
変更を加えるには変更を加えれば良い
812デフォルトの名無しさん
2024/11/13(水) 09:19:24.12ID:T0htHWVn813デフォルトの名無しさん
2024/11/13(水) 09:22:11.31ID:on0r5hse814デフォルトの名無しさん
2024/11/13(水) 09:43:08.15ID:QAOz5ViO >>802
x,yのスコープと&x,&yのライフタイムを混同してるように見える
fn test<'a, 'b: 'a>(x: &'a (), y: &'b ()) -> (&'b (), &'b ()){
(x, y)
}
とすれば’a: ‘bがなければ関数単体でエラー
fn test<'a, 'b: 'a>(x: &'a (), y: &'b ()) -> (&'a (), &'a ()){
(x, y)
}
fn main() {
let x = ();
let result: (&(), &());
{
let y = ();
result = test(&x, &y);
}
println!("{:?}", result);
}
↑のように&yのborrowをyのスコープを越えて利用すればエラー
でもこの場合の関数定義は’bを使わず全部’aにしても何も変わらない
x,yのスコープと&x,&yのライフタイムを混同してるように見える
fn test<'a, 'b: 'a>(x: &'a (), y: &'b ()) -> (&'b (), &'b ()){
(x, y)
}
とすれば’a: ‘bがなければ関数単体でエラー
fn test<'a, 'b: 'a>(x: &'a (), y: &'b ()) -> (&'a (), &'a ()){
(x, y)
}
fn main() {
let x = ();
let result: (&(), &());
{
let y = ();
result = test(&x, &y);
}
println!("{:?}", result);
}
↑のように&yのborrowをyのスコープを越えて利用すればエラー
でもこの場合の関数定義は’bを使わず全部’aにしても何も変わらない
815デフォルトの名無しさん
2024/11/13(水) 17:49:14.41ID:6VxXcvJp >>727
最近上がった孫さんの動画だと最新のchatgptはいいみたいだよ
最近上がった孫さんの動画だと最新のchatgptはいいみたいだよ
816デフォルトの名無しさん
2024/11/13(水) 19:43:07.11ID:hOqFwLmf コードの生成なら Claude ai にしておけって。
817デフォルトの名無しさん
2024/11/14(木) 00:17:38.18ID:KXRqkFBN >>815
こないだ試してみたら、さほど良くなってないみたいだったが。
こないだ試してみたら、さほど良くなってないみたいだったが。
818デフォルトの名無しさん
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 の仕事に加わるということ?
レス数が900を超えています。1000を超えると表示できなくなるよ。
ニュース
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 [ぐれ★]
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… ★2 [BFU★]
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… ★3 [BFU★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★2 [BFU★]
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 [Hitzeschleier★]
- 政府、株式の配当など金融所得を高齢者の医療保険料や窓口負担に反映する方針を固めた [バイト歴50年★]
- 中国高官と話す外務省局長の表情、やばい ★2 [175344491]
- 偏差値35大臣「すぐに経済的威圧するところへの依存はリスク」 [834922174]
- 中国外務省「日中関係の悪化は高市早苗首相が原因」と名指しで強く非難。キタ━(゚∀゚)━! [153490809]
- 【朗報】高市、中国からの日本行き空路49万件キャンセルを達成🤩オーバーツーリズム対策の手腕が光る [359965264]
- 日本政府「高市総理の発言は問題ないと伝え、中国総領事のSNS投稿は問題があると中国に伝えました😊」 [931948549]
- 小野田経済安保相「すぐに経済的威圧するところへの依存はリスク」😲 [861717324]
