Rust part9

■ このスレッドは過去ログ倉庫に格納されています
2020/08/23(日) 01:07:35.52ID:MgEpWwVh
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/
36デフォルトの名無しさん
垢版 |
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:
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
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の中身なんて読んでも意味ないし。
4431
垢版 |
2020/09/02(水) 08:06:57.73ID:s4/GEX11
>>42
それだと基本的に>>32と大差なく見えるというかリンク後に逆アセンブラリストを追いかけたら
最終的にfn panicへ制御が渡っている事を確認しています
>>34でpanic_handler書いていないみたいな事が書かれていたので別の書き方があるのかと・・
2020/09/03(木) 00:54:39.65ID:d+ZpNCKo
Supporting Linux kernel development in Rust
https://lwn.net/SubscriberLink/829858/281103f9c6fd0dc2/
46デフォルトの名無しさん
垢版 |
2020/09/03(木) 13:59:41.08ID:knKXFRQt
お前らの考えとしてぶっちゃけどうよ?
今後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とかどんな魔境になってるんだろうか…)
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かよ
2020/09/03(木) 22:16:06.69ID:ciEvly1U
>>52
それをセルフホストできてないというかどうかは知らんがビルドしたいならx.py使えよ。
bootstrapにはそれ用のオプションがちゃんとある。
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じゃコードツリーのディレクトリ構造からして違う有様だしなぁ
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

自己流で試行錯誤するよりまず公式通りにやってからカスタマイズする方がいいのでは。
2020/09/04(金) 15:34:10.06ID:7Uip4zIA
>>55
thx。それを実行するにあたって最低限必要な物ってなんだろ。書いていないような・・・
Pythonとbetaなコンパイラが必要そうっぽい事は判るけど
というかコンパイラも含めたビルドは出来るだけ避けたい
環境(Windows)やマシン(2Core/8GB)のリソース的に成功するか判らないし失敗した場合の
トラブルシュートも難しい

あとそのコマンドはnightly?beta?限定のような。1.46.0 stableのコードツリーだとディレクトリ名が違う
57デフォルトの名無しさん
垢版 |
2020/09/04(金) 18:04:10.13ID:REp3w4XA
>>51
ほんそれ。
ある程度はシュガライズすべき
2020/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が適切なバージョンを勝手に取ってくるから任せればよい。
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探してもないから知ってる人いる?
2020/09/06(日) 13:33:28.17ID:378cUVT9
>>65
Cargoにその機能はないな。rustupの機能として
rust-toolchainファイルにバージョンとかnightlyとか書けるよ。
当然rustupを使っていないと効果はないけど。
2020/09/06(日) 13:50:50.21ID:NTBgE1bF
低レイヤーのアルゴリズム実装てrustは実は向いてないんだよ。
2020/09/06(日) 20:53:31.66ID:q3JWysFz
>>65
MSRVのことかな
https://rust-lang.github.io/rfcs/2495-min-rust-version.html
69デフォルトの名無しさん
垢版 |
2020/09/07(月) 05:35:58.44ID:pQuWqVzw
>>68
おお、そうそう。ありがとう
70デフォルトの名無しさん
垢版 |
2020/09/08(火) 14:08:21.21ID:VQ4SFraN
なんでIteratorの方にはchunksとかwindowsとかないの?
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に追加しようとする人が現れない理由だと思う
75デフォルトの名無しさん
垢版 |
2020/09/09(水) 18:10:37.98ID:8UaafUk3
>>74
コストのかかる処理は ってIteratorにないからコストかかってるのでその理由は成り立たない気がする
個人的にはIteratorとスライスという違う型に同じメソッド名が生えてるのがあれなのかなと思った
76デフォルトの名無しさん
垢版 |
2020/09/09(水) 18:23:13.97ID:8UaafUk3
>>72
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
>>75
allocation不要なchunks/windowsの実装ってどうやるの?
Iterator ではなくて std::vec::IntoIter などに実装するということ?
2020/09/10(木) 07:20:42.22ID:CtWfYO23
itertoolsの実装どんなんかしらんけど、
itertoolsのchunksは各チャンクがイテレータになってるし、
windowsのほうはtupleで帰ってくるからアロケーションしないんじゃね?
2020/09/10(木) 07:23:35.08ID:CtWfYO23
すまん、チャンク・ウィンドウの個数分のアロケーションはさすがに発生してると思うわ多分
82デフォルトの名無しさん
垢版 |
2020/09/13(日) 20:54:26.61ID:e9EK7dt7
VS2019の拡張機能にRustがあるんだけど、これは本物ですか?
VSCodeのとは違うみたいで情報がない
83デフォルトの名無しさん
垢版 |
2020/09/14(月) 01:42:47.60ID:uF+7D4//
&'static strってデータかテキスト領域どっちに入るの?デバッグ方法分からん
2020/09/16(水) 01:12:00.89ID:fJPIYTy9
Rustってむずくないですか
これ最初にプログラムやる言語じゃないよね…昔に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
>>85
この言語は、深いことをやろうとするとメンドクサイだけではなく、
ちゃんと仕様が公開されて無い事が多いから難しくなる。
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
>>87
公開されていないというより確定していないことは結構ある。
細かいところでは処理系の実装の現実に頼らないとしゃーないってのは
C/C++ でもなんでも同じだし、
まあそんなもんです。
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なことやらなきゃいけないみたいに書いてあって
やる気なくしたアホくさ
2020/09/17(木) 09:38:19.49ID:bFAy1lxI
LinkedListはもうオワコン
あれはCPUが遅くてキャッシュミスとかあまり考えなくても良かった時代のもの
2020/09/17(木) 09:49:42.39ID:CU1OLpA0
初心者が「まずは独自コンテナクラスでも実装してみるか」っていって討ち死にしていくのはしばしば見られるよな。
Rustのコンテナ実装は高難度なので素直に標準ライブラリを使いましょう、ってどこかに書いてあるべきかも。
97デフォルトの名無しさん
垢版 |
2020/09/17(木) 09:53:23.90ID:k60QR6Dx
高難度?ただ面倒なだけじゃなくて?
2020/09/17(木) 10:01:04.46ID:CU1OLpA0
>>97
大抵の人にとってhello worldの次にやる課題としては高難度過ぎると思うけど。
もちろんおまえにとっては簡単で面倒なだけってのは別に否定しないが。
99デフォルトの名無しさん
垢版 |
2020/09/17(木) 10:11:43.63ID:k60QR6Dx
別にRustのチュートリアルはプログラミング初心者のためにあるわけじゃないし
2020/09/17(木) 10:53:28.83ID:SW6+Z1Cs
>>93
一番問題なのは、ヒープに対する参照の詳細が英語でもどこを探してもないこと。
Box<T>, Rc<T>, RefCell<T>
などの詳細と、生存期間、所有、借用、コンストラクト時のMoveの処理の話。
Option<T>はまだ分かるが。
2020/09/17(木) 10:55:15.75ID:SW6+Z1Cs
>>95
それは信頼できる情報か。
キャッシュミスし易いから、LinkedListは、もう動的配列より絶対的に劣る、
などというようなことを書いたまともな論文でもどこかにあるのか。
2020/09/17(木) 11:01:24.99ID:eg0aXI83
Cアルゴリズム入門的な本があるように
Rustアルゴリズム入門的な記事があっていい気がする
103デフォルトの名無しさん
垢版 |
2020/09/17(木) 11:06:01.57ID:k60QR6Dx
任意の場所への挿入・削除とかは動的配列よりLinkedListでやったほうが効率いいし
2020/09/17(木) 11:19:25.01ID:Wtt+0SS3
>>94
unsafe使わなくてもできるよ
stdのLinkedListがunsafe使ってるのはパフォーマンスのため

独自実装のLinkedListなんでプロダクションでは使わないだろう
unsafe使わないやり方で作ってみればいいと思うよ
2020/09/17(木) 11:22:36.45ID:wWB4PA6B
>>101
まともな論文ではないけどC++のハゲがそんなこと言ってなかったっけ
106デフォルトの名無しさん
垢版 |
2020/09/17(木) 11:27:31.41ID:k60QR6Dx
キャッシュミスしやすいのはそうだろう
メモリが連続してないんだから当然だね
ただ時代遅れってのは勝手に付け足したろ
2020/09/17(木) 11:33:13.70ID:Wtt+0SS3
>>100
「ヒープに対する参照の詳細」って何じゃい?

Box<T>, Rc<T>, RefCell<T>は標準ライブラリだからライブラリのリファレンスを見る

>生存期間、所有、借用、コンストラクト時のMoveの処理の話。
こっちは一般原則だから普通に明記されてると思うけど
Language Reference本も完成はしてないから書いてない詳細もあるだろうけど
それで困るのは一般原則的なことじゃないでしょ
2020/09/17(木) 12:26:42.19ID:NHfa1bvj
C++ のコンテナは、デフォルトでベクター

ゲームプログラミングでは、プログラマー自身がまとめてメモリを確保する、
メモリ管理システムの例が、よく載っているけど、

一般用途では、ベクターの速度には勝てないのじゃないか?
2分木とか、特殊用途なら別だが

Elixir でも、リストは先頭・末尾だけが速いだけで、
中間の要素を取得するには、N / 2 要素をたどる必要がある

ただ、Elixirは関数型で、元の要素が変化しないから、
更新時だけ、要素をコピーすればよい
109デフォルトの名無しさん
垢版 |
2020/09/17(木) 13:19:52.64ID:OW2OZx8D
C++のvectorでも深い考え無しに闇雲に使うと
要素コピー発生しまくりなアホなコードになる
2020/09/17(木) 13:41:43.66ID:SW6+Z1Cs
LinkedListと動的配列の違いは速度だけの問題じゃないんだな、これが。
前者はプログラミング上、後者より圧倒的に有利な場面がある。
それは、要素の識別性だ。
111デフォルトの名無しさん
垢版 |
2020/09/17(木) 14:10:37.15ID:k60QR6Dx
C++のRAIIイディオム、SharedPointer、Moveセマンティクス
でRustにメモリ安全でどこまで対抗可能かな
2020/09/17(木) 15:25:52.19ID:wWB4PA6B
とりあえず二重開放でコケますね
2020/09/17(木) 15:58:39.73ID:av+XxBIf
C++は確かに道具は十分揃ってるんだけど、
適切に使えるかどうかはプログラマーの注意力次第なので厳しい…。
2020/09/17(木) 20:47:10.45ID:PWLbdk49
LinkedListが役に立たないと知ったのは結構前だな
Javaのスレで色々議論があったんだけど
LinkedListが優位になるであろう場面でもArrayListのほうが早いと断言するやつが居て
バカじゃねーの?と思いつつも実装してみたら完全にArrayListのほうが早かった
古い知識でイキってた当時の自分が恥ずかしい
115デフォルトの名無しさん
垢版 |
2020/09/17(木) 21:46:41.57ID:QIzByEmL
> C++は確かに道具は十分揃ってるんだけど、
> 適切に使えるかどうかはプログラマーの注意力次第なので厳しい…。
そもそもC++は注意力の前に必要知識が多すぎる

>>114
ベンチのソースとか記事ないの?
116デフォルトの名無しさん
垢版 |
2020/09/17(木) 21:47:07.97ID:k60QR6Dx
その早いって何が?
要素の検索が?挿入・削除が?
117デフォルトの名無しさん
垢版 |
2020/09/17(木) 21:56:39.63ID:k60QR6Dx
適当に検索した記事みてみたら普通に予想通りの内容だったけど
2020/09/17(木) 22:27:03.14ID:eGAt76U1
リンクリストのキャッシュミスが問題になるのであれば
探索時にプリフェッチしておけばよくね?
今時の高性能なプロセッサなら大抵そういう命令を装備しているだろ
遅いのは実装がウンコなだけなんじゃ
2020/09/18(金) 00:33:25.64ID:FytpOkUB
リストの要素がそれぞれ離れたアドレスにあるような実装だったら、クソデカキャッシュ必要になったりしない?
2020/09/18(金) 02:24:56.35ID:2RtYnDyr
最近のDDR4(?)メモリの速度の進化も凄いから、キャッシュミスがあっても、
キャッシュがヒットした場合の3倍位の速度低下で済むんじゃないかと思うし、
少なくとも、キャッシュミスによる速度低下には上限がある。
一方、LinkedList、動的配列の途中への挿入や、途中要素の削除にかかる時間は、
全体の要素数を N とした時、それぞれ、O(1)、O(N)となる。
キャッシュミスによる速度低下が高々3倍程度なのに対し、
動的配列の遅さは、要素数 N に比例してしまうから上限がない。
だから、本質的に要素数が多くなった場合には、
キャッシュミスによる速度低下とは比べ物にならないくらい
速度差は歴然たるものとなる。
121デフォルトの名無しさん
垢版 |
2020/09/18(金) 02:26:46.51ID:2RtYnDyr
>>120
[補足]
動的配列で途中への挿入や途中要素の削除では、平均で、 N/2 要素程度のコピー動作が
入る。これを
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動作が有効である例では、たとえ動的配列で
あっても、結局、キャッシュミスは生じる。
2020/09/18(金) 03:33:15.49ID:/+t0myE3
ここまでベンチなんもないのでとりあえず適当に拾ったやつ
https://dzone.com/articles/performance-of-array-vs-linked-list-on-modern-comp

総データ量がキャッシュをはるかに超えるとかだと多分変わってくるんだとは思う
その場合でもUnrolled linked listとかを使うのがいいってことにはなるのかな?
2020/09/18(金) 03:52:17.29ID:2RtYnDyr
>>123
大体そういう人は、リンクリストの本質を理解できてないので、
「先頭から10番目の場所に挿入する」
などという馬鹿な書き方をしている。
例え博士課程とかの人でもそういう馬鹿な人がいる。
2020/09/18(金) 03:53:47.62ID:M9ZXsRqQ
推測するな、計測せよ
2020/09/18(金) 03:54:10.38ID:2RtYnDyr
>>124
C++のSTLは設計は馬鹿なので、先頭から k 番目に挿入するなど言う
馬鹿な統一関数がある。
それは、リンクリストにとって最悪の挿入法で、O(N)の時間が掛かる。
だから遅い。
数学的なイマジネーションが無いので、その間違いに気づかない。
2020/09/18(金) 03:54:37.58ID:2RtYnDyr
>>125
いくら測定しても、理屈が間違っていれば、間違った実験結果となる。
2020/09/18(金) 03:56:20.84ID:2RtYnDyr
>>125
グラフだけ書いて、ソースがない。
どうせ、k 番目に挿入すると言う馬鹿コードになっている。
いくら言っても、同じ間違いをする人が続出する。
2020/09/18(金) 03:58:23.37ID:2RtYnDyr
数学が出来ない人は、生まれつき脳が馬鹿なので、
この人も、乱数で番号を発生させて、先頭からk番目の位置に挿入する
という馬鹿なベンチマークを作って、リンクリストが遅いなどと言っている
のだろう。
そんなことすれば遅くなるに決まっているが、彼は馬鹿なので分からない。
2020/09/18(金) 04:01:14.05ID:2RtYnDyr
数学脳を持ってない人にヒントをかいておくと、
リンクリストは、途中への挿入は O(1)で可能だが、
先頭から k 番目という番号を指定した位置への挿入は、O(N)の時間が掛かる。
こういうベンチマークを取って論文にしてしまうような人は、
プログラミングもコンピュータサイエンスにも全く向いてない。
2020/09/18(金) 04:04:00.76ID:2RtYnDyr
アメリカの大学生の非常に多くのがポインタやアドレスの概念が理解できないらしい。
この人もそれに近い状態だから、途中への挿入を、先頭からの番号で指定すると言う
発想しか出来ないのだろう。
ポインタが何故頭のいい人に好まれるか、そういう人種の人にはわからない。
そして、間違ったベンチマークを大真面目に論文にしてしまう。
132デフォルトの名無しさん
垢版 |
2020/09/18(金) 06:34:01.52ID:JNeepSOt
>C++のSTLは設計は馬鹿なので、先頭から k 番目に挿入するなど言う
>馬鹿な統一関数がある
え?ここ見る限りそんなのないけど
https://cpprefjp.github.io/reference/list/list/insert.html
2020/09/18(金) 08:12:28.71ID:aEEfDPH5
DDRメモリのセットアップタイムをググったらcrucialが判りやすい資料を公開していた
ttps://www.crucial.jp/articles/about-memory/difference-between-speed-and-latency
これはメモリ単体での値だから実際にはCPU内キャッシュの探索時間、バスの調停時間
メモリコントローラの動作時間が積まれる。L3まで探って未ヒットだった場合CPUが3GHzとしても
30サイクル以上は待たされそう

今時のPCで使用されるプロセッサはL1からのロードですらノーウェイトではないし計画的なロードは超重要
2020/09/18(金) 09:09:51.55ID:FytpOkUB
先頭や末尾への挿入削除だけならVecDequeでよくね
2020/09/18(金) 09:26:18.23ID:/+t0myE3
>>123が参照してる記事でもっと詳細あったわ
https://baptiste-wicht.com/posts/2012/12/cpp-benchmark-vector-list-deque.html

こっちは、挿入が挿入箇所のサーチも加わったことを断った上で比較してますね
サーチを加えてもデータサイズがでかい・コンストラクタのコストが重い場合はlistが有利っすね

挿入位置のサーチの分のコストを含めるかは難しいところだけど、先頭・末尾以外の一定位置にだけ挿入するってシチュエーションはそうそうないだろうし、
この程度の比較でいいんじゃねーのかな
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況