Mozilla発のRust言語のスレ
公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust
Web上の実行環境
https://play.rust-lang.org
前スレ
Rust part8
https://mevius.5ch.net/test/read.cgi/tech/1579834072/
探検
Rust part9
■ このスレッドは過去ログ倉庫に格納されています
2020/08/23(日) 01:07:35.52ID:MgEpWwVh
2020/08/30(日) 03:03:14.91ID:A+BfCyCQ
@rustlangって日本語のRTもするのか
機械翻訳で読んだのかな
機械翻訳で読んだのかな
30デフォルトの名無しさん
2020/08/30(日) 11:07:07.53ID:YXE1VqL6 いつになったらベンチマークStableにすんだよな
2020/08/30(日) 18:03:13.46ID:nkt3Z4R5
ベアメタル用のコードを-C opt-level=0でコンパイルして乗算のオーバーフローチェック等のpanic機構って使用できる?
アセンブラリストを出力すると存在しないラベルの分岐命令が出力されるんだが正常な動作なのか・・・
アセンブラリストを出力すると存在しないラベルの分岐命令が出力されるんだが正常な動作なのか・・・
3231
2020/08/30(日) 18:53:07.92ID:nkt3Z4R5 例えばこんな感じ
ttps://uploader.purinka.work/src/17641.png
callqの行き先が不明
ttps://uploader.purinka.work/src/17641.png
callqの行き先が不明
2020/08/30(日) 19:51:29.80ID:03fMpyFE
--emit asmってlibcoreとリンクしたもの吐くの?
リンクされてないだけでここ呼んでるだけな気がする
https://github.com/rust-lang/rust/blob/1.46.0/src/libcore/panicking.rs#L39
リンクされてないだけでここ呼んでるだけな気がする
https://github.com/rust-lang/rust/blob/1.46.0/src/libcore/panicking.rs#L39
2020/08/30(日) 22:35:01.08ID:vWRii7PY
3531
2020/08/30(日) 23:57:14.44ID:mEmNBl/k36デフォルトの名無しさん
2020/08/31(月) 08:19:34.04ID:DTQYV4xt ターミナル上で色つけるのとテキストポジションを決めたいだけの簡単なTUIアプリ作りたいんだけど、有名なTUIクレートが多くて迷ってます。
適切なクレートが何か分かる方教えてください。
適切なクレートが何か分かる方教えてください。
2020/08/31(月) 10:44:07.07ID:8VYSRGWn
複雑なことしないなら termion
なんてどう?
なんてどう?
38デフォルトの名無しさん
2020/08/31(月) 20:17:03.77ID:DTQYV4xt >>37
ありがとうございます。一度見てみます。
ありがとうございます。一度見てみます。
2020/08/31(月) 22:50:36.76ID:hNA5PDaQ
>>35
英語読めないって話?
>A behavior can be chosen by declaring a #[panic_handler] function. This function must appear exactly once in the dependency graph of a program, and must have the following signature: fn(&PanicInfo) -> !, where PanicInfo is a struct containing information about the location of the panic.
>Given that embedded systems range from user facing to safety critical (cannot crash) there's no one size fits all panicking behavior but there are plenty of commonly used behaviors. These common behaviors have been packaged into crates that define the #[panic_handler] function. Some examples include:
英語読めないって話?
>A behavior can be chosen by declaring a #[panic_handler] function. This function must appear exactly once in the dependency graph of a program, and must have the following signature: fn(&PanicInfo) -> !, where PanicInfo is a struct containing information about the location of the panic.
>Given that embedded systems range from user facing to safety critical (cannot crash) there's no one size fits all panicking behavior but there are plenty of commonly used behaviors. These common behaviors have been packaged into crates that define the #[panic_handler] function. Some examples include:
40デフォルトの名無しさん
2020/09/01(火) 00:12:49.85ID:OUJLkiQD MirakurunクローンのmirakcってRustでかかれてるのか
ソースちょっとのぞいてみたけどサッパリだった
ソースちょっとのぞいてみたけどサッパリだった
41デフォルトの名無しさん
2020/09/01(火) 00:14:06.84ID:pQTVtNeX よく作れるよなあ
2020/09/01(火) 00:23:01.46ID:TpxWZL4k
>>35
記述例が見たいならそこからリンクされてるpanicハンドラクレートのソースを見ればいい。
例えばこれとか。
https://github.com/japaric/panic-abort/blob/master/src/lib.rs
記述例が見たいならそこからリンクされてるpanicハンドラクレートのソースを見ればいい。
例えばこれとか。
https://github.com/japaric/panic-abort/blob/master/src/lib.rs
2020/09/02(水) 00:14:27.98ID:I/VQ/2li
>>42
そうじゃなくて
>Given that embedded systems range from user facing to safety critical (cannot crash) there's no one size fits all panicking behavior
の意味がわからないんだろう。ベアメタルで人の書いたpanic handlerの中身なんて読んでも意味ないし。
そうじゃなくて
>Given that embedded systems range from user facing to safety critical (cannot crash) there's no one size fits all panicking behavior
の意味がわからないんだろう。ベアメタルで人の書いたpanic handlerの中身なんて読んでも意味ないし。
4431
2020/09/02(水) 08:06:57.73ID:s4/GEX112020/09/03(木) 00:54:39.65ID:d+ZpNCKo
Supporting Linux kernel development in Rust
https://lwn.net/SubscriberLink/829858/281103f9c6fd0dc2/
https://lwn.net/SubscriberLink/829858/281103f9c6fd0dc2/
46デフォルトの名無しさん
2020/09/03(木) 13:59:41.08ID:knKXFRQt お前らの考えとしてぶっちゃけどうよ?
今後10年でc/c++を凌駕する存在になり得るのかRustは
今後10年でc/c++を凌駕する存在になり得るのかRustは
47デフォルトの名無しさん
2020/09/03(木) 14:09:27.73ID:1kMF5+E3 10年もありゃRustベースのもっといいやつが出てきそう
48デフォルトの名無しさん
2020/09/03(木) 14:28:37.24ID:DK3Ul6vK Dはもう20年になるのか胸熱
2020/09/03(木) 14:49:09.48ID:p5IeVBH6
C++ 30よりは普及するんじゃないか。
(30とかどんな魔境になってるんだろうか…)
(30とかどんな魔境になってるんだろうか…)
2020/09/03(木) 16:20:07.25ID:Tou2TpEC
Rust++もそこそこの魔境になるから大丈夫
2020/09/03(木) 16:22:17.40ID:Tou2TpEC
折角Edition分けしてんだし、一部後方互換性をバッサリ捨てて冗長な表現を纏めて++回避したら流行りそう
なおロードマップ見渡してもその予定は一切御座いません(笑)
なおロードマップ見渡してもその予定は一切御座いません(笑)
2020/09/03(木) 21:15:25.18ID:303ndmJQ
Rustって未だにセルフホストできていない事に驚いた
標準添付のライブラリのビルドを試みたら
>error[E0554]: `#![feature]` may not be used on the stable release channel
等が大量に吐かれたw 要nightlyかよ
標準添付のライブラリのビルドを試みたら
>error[E0554]: `#![feature]` may not be used on the stable release channel
等が大量に吐かれたw 要nightlyかよ
2020/09/03(木) 22:16:06.69ID:ciEvly1U
2020/09/04(金) 08:11:24.22ID:19D8+X78
rustc: 1.48.0-nightly (130359cb0 2020-09-01)
src: 1.46.0
でもダメだった
>>53
丸ごとビルドしたい訳じゃなくて一部だけビルドしたい
ttps://qiita.com/kotetuco/items/54af67d5663013ad0db7#rust-core-library%E3%82%92%E7%94%A8%E6%84%8F%E3%81%99%E3%82%8B
こんな感じ。実際にはコンパイルオプションを調整したいけど
コンパイルできる組み合わせを探すしかないのか?stableとnightlyじゃコードツリーのディレクトリ構造からして違う有様だしなぁ
src: 1.46.0
でもダメだった
>>53
丸ごとビルドしたい訳じゃなくて一部だけビルドしたい
ttps://qiita.com/kotetuco/items/54af67d5663013ad0db7#rust-core-library%E3%82%92%E7%94%A8%E6%84%8F%E3%81%99%E3%82%8B
こんな感じ。実際にはコンパイルオプションを調整したいけど
コンパイルできる組み合わせを探すしかないのか?stableとnightlyじゃコードツリーのディレクトリ構造からして違う有様だしなぁ
2020/09/04(金) 10:04:14.14ID:8dK8t4gI
>>54
coreだけでもビルドできるが…。さすがに開発中に毎回bootstrapするわけない。
https://rustc-dev-guide.rust-lang.org/building/how-to-build-and-run.html#build-specific-components
自己流で試行錯誤するよりまず公式通りにやってからカスタマイズする方がいいのでは。
coreだけでもビルドできるが…。さすがに開発中に毎回bootstrapするわけない。
https://rustc-dev-guide.rust-lang.org/building/how-to-build-and-run.html#build-specific-components
自己流で試行錯誤するよりまず公式通りにやってからカスタマイズする方がいいのでは。
2020/09/04(金) 15:34:10.06ID:7Uip4zIA
>>55
thx。それを実行するにあたって最低限必要な物ってなんだろ。書いていないような・・・
Pythonとbetaなコンパイラが必要そうっぽい事は判るけど
というかコンパイラも含めたビルドは出来るだけ避けたい
環境(Windows)やマシン(2Core/8GB)のリソース的に成功するか判らないし失敗した場合の
トラブルシュートも難しい
あとそのコマンドはnightly?beta?限定のような。1.46.0 stableのコードツリーだとディレクトリ名が違う
thx。それを実行するにあたって最低限必要な物ってなんだろ。書いていないような・・・
Pythonとbetaなコンパイラが必要そうっぽい事は判るけど
というかコンパイラも含めたビルドは出来るだけ避けたい
環境(Windows)やマシン(2Core/8GB)のリソース的に成功するか判らないし失敗した場合の
トラブルシュートも難しい
あとそのコマンドはnightly?beta?限定のような。1.46.0 stableのコードツリーだとディレクトリ名が違う
57デフォルトの名無しさん
2020/09/04(金) 18:04:10.13ID:REp3w4XA2020/09/04(金) 18:33:08.78ID:GMhQHpfx
>>56
環境構築はREADMEだな。
https://github.com/rust-lang/rust#building-on-windows
ディレクトリはちょうど運悪く先月くらいに構成変わってて、今betaまで反映されてるから次のリリースでstableも同じになる。
とりあえず今のstableなら以下でcoreだけビルドできるはず。
./x.py build --stage 0 src/libcore
コンパイラはx.pyが適切なバージョンを勝手に取ってくるから任せればよい。
環境構築はREADMEだな。
https://github.com/rust-lang/rust#building-on-windows
ディレクトリはちょうど運悪く先月くらいに構成変わってて、今betaまで反映されてるから次のリリースでstableも同じになる。
とりあえず今のstableなら以下でcoreだけビルドできるはず。
./x.py build --stage 0 src/libcore
コンパイラはx.pyが適切なバージョンを勝手に取ってくるから任せればよい。
2020/09/05(土) 10:06:13.78ID:TAeq65PR
2Core/8GBでLLVMビルドするのかなりつらそう
60デフォルトの名無しさん
2020/09/05(土) 13:17:51.96ID:c1warezh forとiterの使い分けってどうしたらいいんだろ
用途?
用途?
2020/09/05(土) 15:05:36.16ID:TAeq65PR
コードが読みやすくなる方を使う
62デフォルトの名無しさん
2020/09/05(土) 21:40:57.16ID:I89Y16zH codewarsをRustで解いてるけどなかなか勉強になる
2020/09/06(日) 00:09:09.42ID:/EPcKLfQ
戦争反対
2020/09/06(日) 00:12:10.28ID:YpEFqLu/
敗戦国に対する差別を助長するとアメリカで主張していこうな!
65デフォルトの名無しさん
2020/09/06(日) 13:05:53.33ID:iYICzO1R Cargo.tomlにrustのバージョン指定する方法ってどうやるっけ?
どこかで見た気がするんだけどcargo reference探してもないから知ってる人いる?
どこかで見た気がするんだけどcargo reference探してもないから知ってる人いる?
2020/09/06(日) 13:33:28.17ID:378cUVT9
2020/09/06(日) 13:50:50.21ID:NTBgE1bF
低レイヤーのアルゴリズム実装てrustは実は向いてないんだよ。
2020/09/06(日) 20:53:31.66ID:q3JWysFz
69デフォルトの名無しさん
2020/09/07(月) 05:35:58.44ID:pQuWqVzw >>68
おお、そうそう。ありがとう
おお、そうそう。ありがとう
70デフォルトの名無しさん
2020/09/08(火) 14:08:21.21ID:VQ4SFraN なんでIteratorの方にはchunksとかwindowsとかないの?
Vecに変換するのめんどくさい
Vecに変換するのめんどくさい
2020/09/08(火) 14:14:25.89ID:D8/F+ExD
stdにない理由はしらんけどItertoolsでできるっしょ
2020/09/08(火) 16:58:13.30ID:Qt4K4jXD
rustのormって何でdieselしかないの?dieselが完成されてるから?それともrustがdb使う用途に使われることが少ないとか?
2020/09/08(火) 18:04:31.50ID:7F3fj5vU
rustに関わらずormって限らられたシーンでしか使えない印象
2020/09/08(火) 20:34:32.20ID:iCuj3PWZ
>>70
任意のimpl Iteratorからスライス作るためにはcollectしてVecを作るなど、比較的重めの処理が必要になる
コストのかかる処理は明示的にやらせるというのがstdのポリシーなので、用意されていないのでは
あと利用者側で .collect::<Vec<_>>() を追加するだけでよくて対処が難しくないのもわざわざstdに追加しようとする人が現れない理由だと思う
任意のimpl Iteratorからスライス作るためにはcollectしてVecを作るなど、比較的重めの処理が必要になる
コストのかかる処理は明示的にやらせるというのがstdのポリシーなので、用意されていないのでは
あと利用者側で .collect::<Vec<_>>() を追加するだけでよくて対処が難しくないのもわざわざstdに追加しようとする人が現れない理由だと思う
75デフォルトの名無しさん
2020/09/09(水) 18:10:37.98ID:8UaafUk3 >>74
コストのかかる処理は ってIteratorにないからコストかかってるのでその理由は成り立たない気がする
個人的にはIteratorとスライスという違う型に同じメソッド名が生えてるのがあれなのかなと思った
コストのかかる処理は ってIteratorにないからコストかかってるのでその理由は成り立たない気がする
個人的にはIteratorとスライスという違う型に同じメソッド名が生えてるのがあれなのかなと思った
76デフォルトの名無しさん
2020/09/09(水) 18:23:13.97ID:8UaafUk3 >>72
Dieselが早いうちに作られて支配的に使われるようになって他の連携クレートもdiesel用を用意してそして誰もいなくなった的な展開
個人的にはdieselは癖強いから完成度高くないと思う、ただ連携はかなり強い
Dieselが早いうちに作られて支配的に使われるようになって他の連携クレートもdiesel用を用意してそして誰もいなくなった的な展開
個人的にはdieselは癖強いから完成度高くないと思う、ただ連携はかなり強い
77デフォルトの名無しさん
2020/09/09(水) 18:58:45.43ID:oR4G2d97 sqlxが本名だと思う
2020/09/09(水) 21:48:02.38ID:5DrZyU/S
Sqlx良いね
2020/09/09(水) 22:34:56.87ID:ldUOsxby
2020/09/10(木) 07:20:42.22ID:CtWfYO23
itertoolsの実装どんなんかしらんけど、
itertoolsのchunksは各チャンクがイテレータになってるし、
windowsのほうはtupleで帰ってくるからアロケーションしないんじゃね?
itertoolsのchunksは各チャンクがイテレータになってるし、
windowsのほうはtupleで帰ってくるからアロケーションしないんじゃね?
2020/09/10(木) 07:23:35.08ID:CtWfYO23
すまん、チャンク・ウィンドウの個数分のアロケーションはさすがに発生してると思うわ多分
82デフォルトの名無しさん
2020/09/13(日) 20:54:26.61ID:e9EK7dt7 VS2019の拡張機能にRustがあるんだけど、これは本物ですか?
VSCodeのとは違うみたいで情報がない
VSCodeのとは違うみたいで情報がない
83デフォルトの名無しさん
2020/09/14(月) 01:42:47.60ID:uF+7D4// &'static strってデータかテキスト領域どっちに入るの?デバッグ方法分からん
2020/09/16(水) 01:12:00.89ID:fJPIYTy9
Rustってむずくないですか
これ最初にプログラムやる言語じゃないよね…昔にC触ったとかそんなレベルだと全然わからん
これ最初にプログラムやる言語じゃないよね…昔にC触ったとかそんなレベルだと全然わからん
85デフォルトの名無しさん
2020/09/16(水) 10:24:27.14ID:l4YX/vwQ むずくない
めんどくい
めんどくい
86デフォルトの名無しさん
2020/09/16(水) 11:57:04.37ID:Kj2RyNnD std::collections とかが複数形でstd::markerが単数形な理由ってなに?
2020/09/16(水) 12:36:20.15ID:g8ss57Sd
2020/09/16(水) 13:09:08.47ID:mQPJrXyp
え?仕様公開されてるだろ英語で
89デフォルトの名無しさん
2020/09/16(水) 13:54:55.78ID:GiXJ7CmX 自分の足も撃ち抜けない不自由な言語
2020/09/16(水) 14:23:57.05ID:r03rWfLq
2020/09/16(水) 20:12:39.40ID:Gmhk8xHy
具体的な話をしてくれ
2020/09/17(木) 04:57:16.23ID:SW6+Z1Cs
>>88
公開されてない。
公開されてない。
2020/09/17(木) 06:48:06.13ID:VCs9Ea+4
何の仕様が知りたくて見つけられなかったのか言ってくれよ
94デフォルトの名無しさん
2020/09/17(木) 09:31:52.63ID:k60QR6Dx チュートリアル追ってみたらLinkedListの実装に結局
unsafeなことやらなきゃいけないみたいに書いてあって
やる気なくしたアホくさ
unsafeなことやらなきゃいけないみたいに書いてあって
やる気なくしたアホくさ
2020/09/17(木) 09:38:19.49ID:bFAy1lxI
LinkedListはもうオワコン
あれはCPUが遅くてキャッシュミスとかあまり考えなくても良かった時代のもの
あれはCPUが遅くてキャッシュミスとかあまり考えなくても良かった時代のもの
2020/09/17(木) 09:49:42.39ID:CU1OLpA0
初心者が「まずは独自コンテナクラスでも実装してみるか」っていって討ち死にしていくのはしばしば見られるよな。
Rustのコンテナ実装は高難度なので素直に標準ライブラリを使いましょう、ってどこかに書いてあるべきかも。
Rustのコンテナ実装は高難度なので素直に標準ライブラリを使いましょう、ってどこかに書いてあるべきかも。
97デフォルトの名無しさん
2020/09/17(木) 09:53:23.90ID:k60QR6Dx 高難度?ただ面倒なだけじゃなくて?
2020/09/17(木) 10:01:04.46ID:CU1OLpA0
99デフォルトの名無しさん
2020/09/17(木) 10:11:43.63ID:k60QR6Dx 別にRustのチュートリアルはプログラミング初心者のためにあるわけじゃないし
100デフォルトの名無しさん
2020/09/17(木) 10:53:28.83ID:SW6+Z1Cs >>93
一番問題なのは、ヒープに対する参照の詳細が英語でもどこを探してもないこと。
Box<T>, Rc<T>, RefCell<T>
などの詳細と、生存期間、所有、借用、コンストラクト時のMoveの処理の話。
Option<T>はまだ分かるが。
一番問題なのは、ヒープに対する参照の詳細が英語でもどこを探してもないこと。
Box<T>, Rc<T>, RefCell<T>
などの詳細と、生存期間、所有、借用、コンストラクト時のMoveの処理の話。
Option<T>はまだ分かるが。
101デフォルトの名無しさん
2020/09/17(木) 10:55:15.75ID:SW6+Z1Cs102デフォルトの名無しさん
2020/09/17(木) 11:01:24.99ID:eg0aXI83 Cアルゴリズム入門的な本があるように
Rustアルゴリズム入門的な記事があっていい気がする
Rustアルゴリズム入門的な記事があっていい気がする
103デフォルトの名無しさん
2020/09/17(木) 11:06:01.57ID:k60QR6Dx 任意の場所への挿入・削除とかは動的配列よりLinkedListでやったほうが効率いいし
104デフォルトの名無しさん
2020/09/17(木) 11:19:25.01ID:Wtt+0SS3 >>94
unsafe使わなくてもできるよ
stdのLinkedListがunsafe使ってるのはパフォーマンスのため
独自実装のLinkedListなんでプロダクションでは使わないだろう
unsafe使わないやり方で作ってみればいいと思うよ
unsafe使わなくてもできるよ
stdのLinkedListがunsafe使ってるのはパフォーマンスのため
独自実装のLinkedListなんでプロダクションでは使わないだろう
unsafe使わないやり方で作ってみればいいと思うよ
105デフォルトの名無しさん
2020/09/17(木) 11:22:36.45ID:wWB4PA6B >>101
まともな論文ではないけどC++のハゲがそんなこと言ってなかったっけ
まともな論文ではないけどC++のハゲがそんなこと言ってなかったっけ
106デフォルトの名無しさん
2020/09/17(木) 11:27:31.41ID:k60QR6Dx キャッシュミスしやすいのはそうだろう
メモリが連続してないんだから当然だね
ただ時代遅れってのは勝手に付け足したろ
メモリが連続してないんだから当然だね
ただ時代遅れってのは勝手に付け足したろ
107デフォルトの名無しさん
2020/09/17(木) 11:33:13.70ID:Wtt+0SS3 >>100
「ヒープに対する参照の詳細」って何じゃい?
Box<T>, Rc<T>, RefCell<T>は標準ライブラリだからライブラリのリファレンスを見る
>生存期間、所有、借用、コンストラクト時のMoveの処理の話。
こっちは一般原則だから普通に明記されてると思うけど
Language Reference本も完成はしてないから書いてない詳細もあるだろうけど
それで困るのは一般原則的なことじゃないでしょ
「ヒープに対する参照の詳細」って何じゃい?
Box<T>, Rc<T>, RefCell<T>は標準ライブラリだからライブラリのリファレンスを見る
>生存期間、所有、借用、コンストラクト時のMoveの処理の話。
こっちは一般原則だから普通に明記されてると思うけど
Language Reference本も完成はしてないから書いてない詳細もあるだろうけど
それで困るのは一般原則的なことじゃないでしょ
108デフォルトの名無しさん
2020/09/17(木) 12:26:42.19ID:NHfa1bvj C++ のコンテナは、デフォルトでベクター
ゲームプログラミングでは、プログラマー自身がまとめてメモリを確保する、
メモリ管理システムの例が、よく載っているけど、
一般用途では、ベクターの速度には勝てないのじゃないか?
2分木とか、特殊用途なら別だが
Elixir でも、リストは先頭・末尾だけが速いだけで、
中間の要素を取得するには、N / 2 要素をたどる必要がある
ただ、Elixirは関数型で、元の要素が変化しないから、
更新時だけ、要素をコピーすればよい
ゲームプログラミングでは、プログラマー自身がまとめてメモリを確保する、
メモリ管理システムの例が、よく載っているけど、
一般用途では、ベクターの速度には勝てないのじゃないか?
2分木とか、特殊用途なら別だが
Elixir でも、リストは先頭・末尾だけが速いだけで、
中間の要素を取得するには、N / 2 要素をたどる必要がある
ただ、Elixirは関数型で、元の要素が変化しないから、
更新時だけ、要素をコピーすればよい
109デフォルトの名無しさん
2020/09/17(木) 13:19:52.64ID:OW2OZx8D C++のvectorでも深い考え無しに闇雲に使うと
要素コピー発生しまくりなアホなコードになる
要素コピー発生しまくりなアホなコードになる
110デフォルトの名無しさん
2020/09/17(木) 13:41:43.66ID:SW6+Z1Cs LinkedListと動的配列の違いは速度だけの問題じゃないんだな、これが。
前者はプログラミング上、後者より圧倒的に有利な場面がある。
それは、要素の識別性だ。
前者はプログラミング上、後者より圧倒的に有利な場面がある。
それは、要素の識別性だ。
111デフォルトの名無しさん
2020/09/17(木) 14:10:37.15ID:k60QR6Dx C++のRAIIイディオム、SharedPointer、Moveセマンティクス
でRustにメモリ安全でどこまで対抗可能かな
でRustにメモリ安全でどこまで対抗可能かな
112デフォルトの名無しさん
2020/09/17(木) 15:25:52.19ID:wWB4PA6B とりあえず二重開放でコケますね
113デフォルトの名無しさん
2020/09/17(木) 15:58:39.73ID:av+XxBIf C++は確かに道具は十分揃ってるんだけど、
適切に使えるかどうかはプログラマーの注意力次第なので厳しい…。
適切に使えるかどうかはプログラマーの注意力次第なので厳しい…。
114デフォルトの名無しさん
2020/09/17(木) 20:47:10.45ID:PWLbdk49 LinkedListが役に立たないと知ったのは結構前だな
Javaのスレで色々議論があったんだけど
LinkedListが優位になるであろう場面でもArrayListのほうが早いと断言するやつが居て
バカじゃねーの?と思いつつも実装してみたら完全にArrayListのほうが早かった
古い知識でイキってた当時の自分が恥ずかしい
Javaのスレで色々議論があったんだけど
LinkedListが優位になるであろう場面でもArrayListのほうが早いと断言するやつが居て
バカじゃねーの?と思いつつも実装してみたら完全にArrayListのほうが早かった
古い知識でイキってた当時の自分が恥ずかしい
115デフォルトの名無しさん
2020/09/17(木) 21:46:41.57ID:QIzByEmL > C++は確かに道具は十分揃ってるんだけど、
> 適切に使えるかどうかはプログラマーの注意力次第なので厳しい…。
そもそもC++は注意力の前に必要知識が多すぎる
>>114
ベンチのソースとか記事ないの?
> 適切に使えるかどうかはプログラマーの注意力次第なので厳しい…。
そもそもC++は注意力の前に必要知識が多すぎる
>>114
ベンチのソースとか記事ないの?
116デフォルトの名無しさん
2020/09/17(木) 21:47:07.97ID:k60QR6Dx その早いって何が?
要素の検索が?挿入・削除が?
要素の検索が?挿入・削除が?
117デフォルトの名無しさん
2020/09/17(木) 21:56:39.63ID:k60QR6Dx 適当に検索した記事みてみたら普通に予想通りの内容だったけど
118デフォルトの名無しさん
2020/09/17(木) 22:27:03.14ID:eGAt76U1 リンクリストのキャッシュミスが問題になるのであれば
探索時にプリフェッチしておけばよくね?
今時の高性能なプロセッサなら大抵そういう命令を装備しているだろ
遅いのは実装がウンコなだけなんじゃ
探索時にプリフェッチしておけばよくね?
今時の高性能なプロセッサなら大抵そういう命令を装備しているだろ
遅いのは実装がウンコなだけなんじゃ
119デフォルトの名無しさん
2020/09/18(金) 00:33:25.64ID:FytpOkUB リストの要素がそれぞれ離れたアドレスにあるような実装だったら、クソデカキャッシュ必要になったりしない?
120デフォルトの名無しさん
2020/09/18(金) 02:24:56.35ID:2RtYnDyr 最近のDDR4(?)メモリの速度の進化も凄いから、キャッシュミスがあっても、
キャッシュがヒットした場合の3倍位の速度低下で済むんじゃないかと思うし、
少なくとも、キャッシュミスによる速度低下には上限がある。
一方、LinkedList、動的配列の途中への挿入や、途中要素の削除にかかる時間は、
全体の要素数を N とした時、それぞれ、O(1)、O(N)となる。
キャッシュミスによる速度低下が高々3倍程度なのに対し、
動的配列の遅さは、要素数 N に比例してしまうから上限がない。
だから、本質的に要素数が多くなった場合には、
キャッシュミスによる速度低下とは比べ物にならないくらい
速度差は歴然たるものとなる。
キャッシュがヒットした場合の3倍位の速度低下で済むんじゃないかと思うし、
少なくとも、キャッシュミスによる速度低下には上限がある。
一方、LinkedList、動的配列の途中への挿入や、途中要素の削除にかかる時間は、
全体の要素数を N とした時、それぞれ、O(1)、O(N)となる。
キャッシュミスによる速度低下が高々3倍程度なのに対し、
動的配列の遅さは、要素数 N に比例してしまうから上限がない。
だから、本質的に要素数が多くなった場合には、
キャッシュミスによる速度低下とは比べ物にならないくらい
速度差は歴然たるものとなる。
121デフォルトの名無しさん
2020/09/18(金) 02:26:46.51ID:2RtYnDyr122デフォルトの名無しさん
2020/09/18(金) 02:33:02.97ID:2RtYnDyr >>121
これをMoveに置き換えて高速になるのは、要素の中身が、Heap領域など、要素自体
とは別の場所に有る場合である。たとえば、
struct Element {
const char *m_pszText; // new char[]で確保したHeap領域を指す0終端文字列
};
簡単のためこれの固定長配列を書いてみれば:
Element g_arr[1024];
となる。この要素のデータを読み取る場合は次のようになる、
for ( int i=0; i<1024; i++) {
printf( "i=%d, text=%s\n", i, g_arr[i].m_pszText );
}
この場合、m_pszTextは、ヒープ領域にとってあるから、結局、配列でも
キャッシュミスは生じ得る。
ということで、動的配列でMove動作が有効である例では、たとえ動的配列で
あっても、結局、キャッシュミスは生じる。
これをMoveに置き換えて高速になるのは、要素の中身が、Heap領域など、要素自体
とは別の場所に有る場合である。たとえば、
struct Element {
const char *m_pszText; // new char[]で確保したHeap領域を指す0終端文字列
};
簡単のためこれの固定長配列を書いてみれば:
Element g_arr[1024];
となる。この要素のデータを読み取る場合は次のようになる、
for ( int i=0; i<1024; i++) {
printf( "i=%d, text=%s\n", i, g_arr[i].m_pszText );
}
この場合、m_pszTextは、ヒープ領域にとってあるから、結局、配列でも
キャッシュミスは生じ得る。
ということで、動的配列でMove動作が有効である例では、たとえ動的配列で
あっても、結局、キャッシュミスは生じる。
123デフォルトの名無しさん
2020/09/18(金) 03:33:15.49ID:/+t0myE3 ここまでベンチなんもないのでとりあえず適当に拾ったやつ
https://dzone.com/articles/performance-of-array-vs-linked-list-on-modern-comp
総データ量がキャッシュをはるかに超えるとかだと多分変わってくるんだとは思う
その場合でもUnrolled linked listとかを使うのがいいってことにはなるのかな?
https://dzone.com/articles/performance-of-array-vs-linked-list-on-modern-comp
総データ量がキャッシュをはるかに超えるとかだと多分変わってくるんだとは思う
その場合でもUnrolled linked listとかを使うのがいいってことにはなるのかな?
124デフォルトの名無しさん
2020/09/18(金) 03:52:17.29ID:2RtYnDyr125デフォルトの名無しさん
2020/09/18(金) 03:53:47.62ID:M9ZXsRqQ 推測するな、計測せよ
126デフォルトの名無しさん
2020/09/18(金) 03:54:10.38ID:2RtYnDyr >>124
C++のSTLは設計は馬鹿なので、先頭から k 番目に挿入するなど言う
馬鹿な統一関数がある。
それは、リンクリストにとって最悪の挿入法で、O(N)の時間が掛かる。
だから遅い。
数学的なイマジネーションが無いので、その間違いに気づかない。
C++のSTLは設計は馬鹿なので、先頭から k 番目に挿入するなど言う
馬鹿な統一関数がある。
それは、リンクリストにとって最悪の挿入法で、O(N)の時間が掛かる。
だから遅い。
数学的なイマジネーションが無いので、その間違いに気づかない。
127デフォルトの名無しさん
2020/09/18(金) 03:54:37.58ID:2RtYnDyr >>125
いくら測定しても、理屈が間違っていれば、間違った実験結果となる。
いくら測定しても、理屈が間違っていれば、間違った実験結果となる。
128デフォルトの名無しさん
2020/09/18(金) 03:56:20.84ID:2RtYnDyr■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 国民 居住目的でない住宅所有者に「空室税」課せる法案を提出 ★2 [少考さん★]
- 「働いて働いて」の流行語大賞に懸念 「言葉が独り歩き」 過労自殺遺族 [尺アジ★]
- アメリカ、入国時に「日本人を含む外国人観光客の最大5年分のSNS履歴の提出」義務化へ 過去10年間に使用のメールアドレスや電話番号等も★3 [Hitzeschleier★]
- 【画像】消えた美人女優 上原多香子さん(42)、沖縄で目撃される [牛丼★]
- 「暖房が使えない」「食費が高くて子どもの栄養が…」 物価高に苦しむ子育て世帯、政府に期待する支援は ★2 [蚤の市★]
- バイク事故で入院ゆたぼん、見舞金「1円」振り込みの名義に衝撃「悲しい人ですね」「こういう人がいるから…」 [muffin★]
- 【実況】博衣こよりのえちえちダンガンロンパ2🧪★2
- 【実況】博衣こよりのえちえちダンガンロンパ2🧪★1
- 【実況】博衣こよりのえちえちダンガンロンパ2🧪★2
- 【高市悲報】JA、発狂www「臨時に経費率を下げるので、どうかお米券を使ってください」 [246620176]
- 小林よしのり先生が橋下徹・玉川徹らと歴史的和解 「全体主義に負けずに高市早苗批判をしている彼らを見直した」 [309323212]
- 『丸源ラーメン』👈👈どう思う!? [153490809]
