「C++の色々配慮してめんどくさい感じは好きだけど、実務になったらメモリ安全性とか考えて今後Rustに変わっていくんかな」
「うだうだ言ってないで仕事で必要なのをやればいいんだよ、趣味なら好きなのやればいい」
っていう雑談スレ。
前スレ: 結局C++とRustってどっちが良いの? 2traits
https://mevius.5ch.net/test/read.cgi/tech/1680363777/
関連スレ(マ板): Google&MS「バグの70%はC/C++。Rustにする」
https://medaka.5ch.net/test/read.cgi/prog/1619943288/
探検
結局C++とRustってどっちが良いの? 3traits
■ このスレッドは過去ログ倉庫に格納されています
2023/05/04(木) 07:49:56.33ID:z+qB+AKQ
62デフォルトの名無しさん
2023/05/05(金) 11:08:39.58ID:nhdCkkeF2023/05/05(金) 11:27:48.85ID:i1pozoob
>>56
Nim
Nim
2023/05/05(金) 11:29:46.84ID:i1pozoob
>>60
ヒモさえ付いてれば無駄遣いしてもOKみたいな
ヒモさえ付いてれば無駄遣いしてもOKみたいな
2023/05/05(金) 11:58:16.34ID:kHrmJumu
RustってNimに対して何か優位なところはあるの?
2023/05/05(金) 12:01:00.00ID:1hHdixRp
2023/05/05(金) 12:15:37.38ID:t/UudqdO
2023/05/05(金) 12:17:42.38ID:0uwn+ADY
Nimはnilが存在していてヌル安全ですらない
69デフォルトの名無しさん
2023/05/05(金) 12:18:25.68ID:O7pFd4FM 基本GCでも充分な性能が出れば別にいいよ
最適化が必要なところだけ手動でやるのはRustも同じだから
手動ライフタイム管理とのトレードオフ
最適化が必要なところだけ手動でやるのはRustも同じだから
手動ライフタイム管理とのトレードオフ
2023/05/05(金) 12:22:56.73ID:kk7gdR4M
2023/05/05(金) 12:28:44.39ID:t/UudqdO
>>56
Factorかね。
Factorかね。
2023/05/05(金) 12:37:44.37ID:A/rFKldr
FactorはForthとLispの子みたいな動的型付け言語
ガベージコレクションあり
ガベージコレクションあり
2023/05/05(金) 16:12:43.08ID:UEq66Q3K
GCの有無は指標になるけど、現状のC++の、なんでもかんでもヒープに置く習慣は、
GCとそんなかわらないんじゃ…と思わなくもなかったり
GCとそんなかわらないんじゃ…と思わなくもなかったり
74デフォルトの名無しさん
2023/05/05(金) 16:21:47.02ID:ugKRRbai C++はコンパクションが行えないので、GC付きのJavaのほうが速いのです
って言ってなかった?
って言ってなかった?
2023/05/05(金) 17:13:23.83ID:/B4W1iLS
感覚的にはプリミティブでない単純なデータ(xyz座標とか)の配列を直接作れるかどうかがボーダーな気がする
ポインタの配列を作ってるようだとGCしなくてもGC言語
C#は微妙なライン
変なタイミングで大掃除始める問題もあるけどこっちを気にする機会は少ないような
ポインタの配列を作ってるようだとGCしなくてもGC言語
C#は微妙なライン
変なタイミングで大掃除始める問題もあるけどこっちを気にする機会は少ないような
76デフォルトの名無しさん
2023/05/05(金) 18:05:31.65ID:ugKRRbai 結局、RustはC++より速くても、Javaよりは遅いってことですね
2023/05/05(金) 19:01:02.92ID:yAiikMv0
もう少し待てはマイクロソフトがR++を出すと思うから
それまで待って
それまで待って
2023/05/05(金) 23:04:16.37ID:Vdiv+WAP
JAVAが速い!?
2023/05/05(金) 23:05:51.16ID:A/rFKldr
>>76
Rustはスタックを多用する言語なのでJavaより速い
Rustはスタックを多用する言語なのでJavaより速い
80デフォルトの名無しさん
2023/05/05(金) 23:35:38.70ID:ugKRRbai >>79
証拠は?
証拠は?
2023/05/05(金) 23:47:38.29ID:A/rFKldr
>>80
スタック上のメモリ領域はCPUレジスタであるスタックポインタを足し算引き算するだけでメモリ確保と解放できるため最も速い
スタック上のメモリ領域はCPUレジスタであるスタックポインタを足し算引き算するだけでメモリ確保と解放できるため最も速い
2023/05/05(金) 23:50:40.76ID:tbrjl4OG
>>81
CPUの仕組みを知っててそういう認識の人はいないと思いますよ
CPUの仕組みを知っててそういう認識の人はいないと思いますよ
2023/05/05(金) 23:56:37.63ID:Ena393we
もうみた~
2023/05/06(土) 00:11:48.42ID:GtwTEHkL
>>81のスタックメモリ利用が一番速いで合ってるけど
スタックメモリは関数から戻ると自動的に開放されその部分は無効になっちゃう
そのため従来の言語ではスタックメモリの利用を抑え気味にすることでその問題を過剰に回避してた
Rustはライフタイムの導入でスタックメモリを安全な範囲内の限界まで使えるようになったことが違いかな
スタックメモリは関数から戻ると自動的に開放されその部分は無効になっちゃう
そのため従来の言語ではスタックメモリの利用を抑え気味にすることでその問題を過剰に回避してた
Rustはライフタイムの導入でスタックメモリを安全な範囲内の限界まで使えるようになったことが違いかな
2023/05/06(土) 00:20:07.63ID:SIOBPdzx
CPUのレジスタ利用が一番速いがレジスタ割り付けの最適化が非常に難しいので
スタックを使ってお茶を濁してる
スタックを使ってお茶を濁してる
86デフォルトの名無しさん
2023/05/06(土) 00:36:19.82ID:cJf94Ar1 スタックメモリが主記憶と別の場所にあると思ってない?
87デフォルトの名無しさん
2023/05/06(土) 00:39:27.80ID:cJf94Ar1 もしかしてヒープは主記憶、スタックはプロセッサの中にあるとか思ってない?
いま検索中?
いま検索中?
2023/05/06(土) 00:43:00.80ID:GtwTEHkL
メモリの確保の仕方の違いでの速さの比較の話でレジスタの話を持ち出すのは違うでしょ
そしてレジスタの数は限界がありその退避先もスタックメモリですよ
スタックメモリに割り当てられた変数は最適化によりレジスタ割り当てが可能であればレジスタのみ利用になりますね
>>86
スタックメモリは単なるメインメインの一部にすぎません
しかしメモリ確保と解放が最も速いだけでなくメモリキャッシュに載る点でアクセスも速いです
そしてレジスタの数は限界がありその退避先もスタックメモリですよ
スタックメモリに割り当てられた変数は最適化によりレジスタ割り当てが可能であればレジスタのみ利用になりますね
>>86
スタックメモリは単なるメインメインの一部にすぎません
しかしメモリ確保と解放が最も速いだけでなくメモリキャッシュに載る点でアクセスも速いです
2023/05/06(土) 00:43:06.74ID:ky4tntbz
キャッシュメモリは主記憶に含めておいた方がいい?
2023/05/06(土) 00:43:19.23ID:SIOBPdzx
頭のおかしい人間がずっと一般的な事実に基づかない頓珍漢な独自妄想理論を展開してる
2023/05/06(土) 00:46:32.42ID:SIOBPdzx
スタックを積極的に利用しているからrustがjavaより速いと言われて
納得する馬鹿はいないだろ
もっと根本的な理由があるだろと
javaはVMでスタックマシンをエミュレートしてるから遅い
納得する馬鹿はいないだろ
もっと根本的な理由があるだろと
javaはVMでスタックマシンをエミュレートしてるから遅い
2023/05/06(土) 00:48:39.47ID:SIOBPdzx
通常はレジスタ一発で出来ることもわざわざスタックマシンでエミュレートしてるので遅い
93デフォルトの名無しさん
2023/05/06(土) 00:49:43.41ID:cJf94Ar1 Rustもたいがい遅いだろ
2023/05/06(土) 00:50:53.23ID:SIOBPdzx
頭のおかしい人間がもう一人増えてた…
2023/05/06(土) 00:53:21.90ID:+ei0akhP
スタックメモリが確保の点でもキャッシュされてる点でも非常に速いのは常識
そのためGC言語であってもGoのようにまずはスタックメモリ利用を優先する
(他へ渡すときだけGC対象になるヒープを利用)
そのためGC言語であってもGoのようにまずはスタックメモリ利用を優先する
(他へ渡すときだけGC対象になるヒープを利用)
96デフォルトの名無しさん
2023/05/06(土) 00:58:44.72ID:cJf94Ar1 でもJavaのほうが速いんでしょ?
2023/05/06(土) 01:02:01.90ID:GtwTEHkL
2023/05/06(土) 01:13:46.56ID:SIOBPdzx
変な人大集合だね
それがrustよりjavaが速い理由だと思い込んで疑わない変な人たち
それがrustよりjavaが速い理由だと思い込んで疑わない変な人たち
2023/05/06(土) 01:14:41.38ID:SIOBPdzx
おっと逆だ
それがjavaよりrustが速い理由だと思い込んで疑わない変な人たち
それがjavaよりrustが速い理由だと思い込んで疑わない変な人たち
100デフォルトの名無しさん
2023/05/06(土) 01:27:18.47ID:cJf94Ar1 RustはJavaより遅いだろ
101デフォルトの名無しさん
2023/05/06(土) 02:12:11.55ID:8+gQNNXm そなの?
102デフォルトの名無しさん
2023/05/06(土) 03:12:15.76ID:eTXbn+fa >>101
それはない。
それはない。
103デフォルトの名無しさん
2023/05/06(土) 06:31:50.59ID:BGrqS5mo C++とRustに比べればJavaは当然遅いしどうでもいい
104デフォルトの名無しさん
2023/05/06(土) 06:50:56.78ID:IDnb553v スタックってそんなでかくない、っていう世界もCの領域なんだよね
そんときの感覚を今でも引きずってる気はする
アプリケーションの起動時に、がつんとデカく確保しちゃえばいいんだろうけどね
なんとなく、ね
そんときの感覚を今でも引きずってる気はする
アプリケーションの起動時に、がつんとデカく確保しちゃえばいいんだろうけどね
なんとなく、ね
105デフォルトの名無しさん
2023/05/06(土) 07:22:20.41ID:cJf94Ar1 >>103
Javaが一番速くて、少し遅れてRust、かなり離されてC++だろ
Javaが一番速くて、少し遅れてRust、かなり離されてC++だろ
106デフォルトの名無しさん
2023/05/06(土) 07:46:12.61ID:a72ZoZZa >>95
いわゆるエスケープ解析と呼ばれているテクニックだな
スタックメモリ利用が断トツに速いのでできる限り使うようにする
GoだけでなくJava含めていくつかの言語で行われてるが適用に限界がある
単純には各ポインタのライフタイムが関数内に閉じてればスタックメモリを利用
他の関数に渡した時は確実に追い切れないので難しい
それを可能とするには言語自体がライフタイムをサポートする必要がある
それを実現したのがRustでありライフタイムを完全に追うことができて現在最強
いわゆるエスケープ解析と呼ばれているテクニックだな
スタックメモリ利用が断トツに速いのでできる限り使うようにする
GoだけでなくJava含めていくつかの言語で行われてるが適用に限界がある
単純には各ポインタのライフタイムが関数内に閉じてればスタックメモリを利用
他の関数に渡した時は確実に追い切れないので難しい
それを可能とするには言語自体がライフタイムをサポートする必要がある
それを実現したのがRustでありライフタイムを完全に追うことができて現在最強
107デフォルトの名無しさん
2023/05/06(土) 09:19:50.79ID:xQ/L7Xyj RustよりJavaのほうが速くなることも多々あるけど
unsafeやarena使ったりして最適化すればJavaより遅い状況はなくなる
でもJavaもネイティブコンパイルできるようになってるから起動速度含めてシェルスクリプトの代わりに使えるくらいには十分速いよ
unsafeやarena使ったりして最適化すればJavaより遅い状況はなくなる
でもJavaもネイティブコンパイルできるようになってるから起動速度含めてシェルスクリプトの代わりに使えるくらいには十分速いよ
108デフォルトの名無しさん
2023/05/06(土) 09:27:14.82ID:6sJMiJUH ほとんどのベンチマークでRustが圧倒的に速い
自分でunsafeする必要なんかない
自分でunsafeする必要なんかない
109デフォルトの名無しさん
2023/05/06(土) 09:28:26.41ID:mjWAg2hj JavaやGoより明らかに高い性能を得ようと思ったら面倒臭いRust特有の最適化が必要になるから
自分用のツールに速度目的でRustを使うのは生産性的におすすめしない
製品開発やそれに準ずるライブラリ開発であればRustも有り
自分用のツールに速度目的でRustを使うのは生産性的におすすめしない
製品開発やそれに準ずるライブラリ開発であればRustも有り
110デフォルトの名無しさん
2023/05/06(土) 09:34:58.48ID:zYAo+dX9111デフォルトの名無しさん
2023/05/06(土) 09:46:59.89ID:IDnb553v Javaはないわー
なんだかんだいって、Oracleのドル箱なんでしょ、あそこの法務はなめちゃだめだ><
なんだかんだいって、Oracleのドル箱なんでしょ、あそこの法務はなめちゃだめだ><
112デフォルトの名無しさん
2023/05/06(土) 11:45:09.13ID:SIOBPdzx chatGTPのいい加減なときの答えみたいなレスが増えたな
しょうもない細部にこだわって全体を一切見ない
事実を使って嘘を作るようなレス
しょうもない細部にこだわって全体を一切見ない
事実を使って嘘を作るようなレス
113デフォルトの名無しさん
2023/05/06(土) 14:05:33.18ID:49fczBUH 複オジの一人妄想エコーチェンバースレだからね
114デフォルトの名無しさん
2023/05/06(土) 14:07:36.12ID:O4KUwdol115デフォルトの名無しさん
2023/05/06(土) 15:11:59.44ID:Vkc9/sC/ >>114
> すべてを1つの言語Mojoで書く。
> Pythonを書くか、metalまでスケールダウンします。
> 多数の低レベルのAIハードウェアをプログラムします。
> C++ や CUDA は必要ありません。
挑発的だな
Pythonがベースの拡張で書きにくいことが確定だからどうでもいい
> すべてを1つの言語Mojoで書く。
> Pythonを書くか、metalまでスケールダウンします。
> 多数の低レベルのAIハードウェアをプログラムします。
> C++ や CUDA は必要ありません。
挑発的だな
Pythonがベースの拡張で書きにくいことが確定だからどうでもいい
116デフォルトの名無しさん
2023/05/06(土) 15:24:45.43ID:IfxSkTCE Pythonが手になじんでる人には吉報かも
こりゃC++に流れ込んでくる日も近いね
こりゃC++に流れ込んでくる日も近いね
117デフォルトの名無しさん
2023/05/06(土) 15:27:19.19ID:Vkc9/sC/ C++を不要にする目標なんだろ
無理だと思うが
無理だと思うが
118デフォルトの名無しさん
2023/05/06(土) 15:39:53.37ID:u7GkjfSc 逆になるべくC++でやって行きたいと思う人も大勢いるということを
分かってない。
分かってない。
119デフォルトの名無しさん
2023/05/06(土) 15:53:28.09ID:fVZUtdKL 名前からして ジョークじゃねえの
オースティンパワーズ デラックスで見たぞ これ
オースティンパワーズ デラックスで見たぞ これ
120デフォルトの名無しさん
2023/05/06(土) 16:59:42.98ID:QDUY2JyG 喪女?
121デフォルトの名無しさん
2023/05/06(土) 17:17:38.48ID:IfxSkTCE Python使いだけど、全部自力で書きたい…みたいな
GC系言語にどんどん拡がっていくんじゃね
GC系言語にどんどん拡がっていくんじゃね
122デフォルトの名無しさん
2023/05/06(土) 18:15:47.48ID:52PGn/Mb >>106のエスケープ解析やライフタイムを本格的にやるのかな
C++を一気に超えてしまいそう
C++を一気に超えてしまいそう
123デフォルトの名無しさん
2023/05/06(土) 18:26:46.92ID:SIOBPdzx 少しrustの仕組みを勉強してきた
いろいろと勉強になった
面白いからしったかさんを泳がしておこうw
いろいろと勉強になった
面白いからしったかさんを泳がしておこうw
124デフォルトの名無しさん
2023/05/06(土) 18:43:25.55ID:0gq0Gmfh Pythonはインスタンスをヒープに置くことしかしていないが
スタックに置いて高速化するかもしれないのか
スタックに置いて高速化するかもしれないのか
125デフォルトの名無しさん
2023/05/06(土) 20:28:37.67ID:IfxSkTCE LLVMとかあのへんに任せるんだろうから、できるようになりだしたらあっという間
126デフォルトの名無しさん
2023/05/06(土) 23:34:35.68ID:9Mu3Cg1D GCの分だけRustの方がJavaよりも早いんじゃないの
一般論だけど
一般論だけど
127デフォルトの名無しさん
2023/05/06(土) 23:43:00.84ID:8+gQNNXm GCって予測不能なだけで速いか速くないかとは関係ないのでは?
それよりJavaはプロセッサとの間に入るJavaマシンが律速段階なのでは?
それよりJavaはプロセッサとの間に入るJavaマシンが律速段階なのでは?
128デフォルトの名無しさん
2023/05/07(日) 00:20:35.09ID:zx4D7i6q 一度実行したら コンパイルすりゃいいんじゃね
129デフォルトの名無しさん
2023/05/07(日) 03:11:23.01ID:+pQ1lZnP RustよりJavaのほうがだいぶ速い
130デフォルトの名無しさん
2023/05/07(日) 06:16:47.38ID:7BVdtRv5131デフォルトの名無しさん
2023/05/07(日) 07:39:12.44ID:UNWBnCPP 多くの人たちが一つの問題を色んな言語を用いて実装することで各言語の実行速度比較例
https://pbs.twimg.com/media/EmYvG8aVkAMdfFG.jpg
AtCoderのABC182-E問題で提出された各プログラミング言語別の実行時間分布
https://pbs.twimg.com/media/EmYvG8aVkAMdfFG.jpg
AtCoderのABC182-E問題で提出された各プログラミング言語別の実行時間分布
132デフォルトの名無しさん
2023/05/07(日) 07:45:16.15ID:ga+9ADYk c++の実装数の多さよ。
Rustの「実装しようとしてできなかった数」がどれくらいになるのか知りたいところ。
Rustの「実装しようとしてできなかった数」がどれくらいになるのか知りたいところ。
133デフォルトの名無しさん
2023/05/07(日) 08:07:01.05ID:IAlaDasW134デフォルトの名無しさん
2023/05/07(日) 10:50:21.49ID:xEkqTcpa C、C++、Rust の速度に関しては、fact checkが必要。
少なくとも、C や C++ は、高級アセンブラなのだから、最速のはず。
Rustに負ける可能性はゼロ。
少なくとも、C や C++ は、高級アセンブラなのだから、最速のはず。
Rustに負ける可能性はゼロ。
135デフォルトの名無しさん
2023/05/07(日) 10:52:23.10ID:xEkqTcpa 「C++はRustより遅い」などと言っている人は、C++の標準ライブラリ(STL)
だけを使った場合に限定してしまっている。
C++は、アセンブラで書けることはほぼ何でも書けるし、Rustはそれを越える
ことは不可能なわけで、C++がRustより遅くなると言うのは論理的におかしい。
だけを使った場合に限定してしまっている。
C++は、アセンブラで書けることはほぼ何でも書けるし、Rustはそれを越える
ことは不可能なわけで、C++がRustより遅くなると言うのは論理的におかしい。
136デフォルトの名無しさん
2023/05/07(日) 10:58:59.25ID:xEkqTcpa もし、「RustがC++よりどうしても速くなる例」があるとするならば、
Rustのコンパイラは、C言語ではかけない特殊なマシン語を出力できる
ようになっているということである。
しかし、RustのバックエンドはLLVMであり、C/C++ のコンパイラ clang の
バックエンドも LLVM であることから、なぜそのような現象が起きるかは
大いに疑問となる。LLVMはLLVMレベルで最適化を行なうことができるような
コンパイラが存在しているので、C++が吐いたコードを最適化しても、
なぜか、Rustが吐いたコードを最適化したものより遅くなってしまうと言う
ことが起きなければならないことになる。
しかし、C++は、高級アセンブラであり、アセンブラで書けることは特殊命令
以外は基本的に全て書ける。ということは、Rustは、そのような特殊命令を
出力しない限りは、C++に勝つことは不可能と言っても過言ではない。
Rustのコンパイラは、C言語ではかけない特殊なマシン語を出力できる
ようになっているということである。
しかし、RustのバックエンドはLLVMであり、C/C++ のコンパイラ clang の
バックエンドも LLVM であることから、なぜそのような現象が起きるかは
大いに疑問となる。LLVMはLLVMレベルで最適化を行なうことができるような
コンパイラが存在しているので、C++が吐いたコードを最適化しても、
なぜか、Rustが吐いたコードを最適化したものより遅くなってしまうと言う
ことが起きなければならないことになる。
しかし、C++は、高級アセンブラであり、アセンブラで書けることは特殊命令
以外は基本的に全て書ける。ということは、Rustは、そのような特殊命令を
出力しない限りは、C++に勝つことは不可能と言っても過言ではない。
137デフォルトの名無しさん
2023/05/07(日) 11:00:30.38ID:+pQ1lZnP いや、>>131 を見る限り、平均するとC++はPythonにすら負けてる
138デフォルトの名無しさん
2023/05/07(日) 11:01:52.13ID:ms6+oRxa 誰かがスタックメモリを使ってるからrustが早いと言ってるけどllvmレベルでは差がない
吐き出した中間コードみてもそんな特徴は特になかった
吐き出した中間コードみてもそんな特徴は特になかった
139デフォルトの名無しさん
2023/05/07(日) 11:04:44.26ID:+pQ1lZnP いや、>>131 を見る限り、平均するとRustは最速
140デフォルトの名無しさん
2023/05/07(日) 11:06:24.77ID:xEkqTcpa >>136
アセンブラに詳しくない人のために捕捉しておくと、特殊なマシン語の
例外(仲間はずれ)を除けば
「C言語の演算子は、アセンブラ(マシン語)の 1命令に一対一対応している」
とほぼ言える。なので、基本的に、マシン語を1命令ずつ書いていくのと
同じレベルでC言語はプログラム可能である。それに当てはまらないのは
CPUに依存したような「独特なマシン語」が存在している場合に限られる。
そして、コンピュータは、最終的には全てマシン語に置き換えられて実行され、
マシン語しか理解できない。
そして、C++は、C言語の演算子や機能は全て包含している。
ということは、C++は、特殊命令以外のマシン語を全て1命令ずつ記述できる、
ということである。
マシン語しか理解できないCPUに対して、C++は、あらゆる順序のマシン語を
ほぼ人間が思った通りの順序で書こうと思えば書けるのであるから、どうして、
C++が最速に成らないのだとしたら、非常に特殊な事態が起きていることになる。
その特殊な自体は、人間の手作業による最適化であると考えられている。
アセンブラに詳しくない人のために捕捉しておくと、特殊なマシン語の
例外(仲間はずれ)を除けば
「C言語の演算子は、アセンブラ(マシン語)の 1命令に一対一対応している」
とほぼ言える。なので、基本的に、マシン語を1命令ずつ書いていくのと
同じレベルでC言語はプログラム可能である。それに当てはまらないのは
CPUに依存したような「独特なマシン語」が存在している場合に限られる。
そして、コンピュータは、最終的には全てマシン語に置き換えられて実行され、
マシン語しか理解できない。
そして、C++は、C言語の演算子や機能は全て包含している。
ということは、C++は、特殊命令以外のマシン語を全て1命令ずつ記述できる、
ということである。
マシン語しか理解できないCPUに対して、C++は、あらゆる順序のマシン語を
ほぼ人間が思った通りの順序で書こうと思えば書けるのであるから、どうして、
C++が最速に成らないのだとしたら、非常に特殊な事態が起きていることになる。
その特殊な自体は、人間の手作業による最適化であると考えられている。
141デフォルトの名無しさん
2023/05/07(日) 11:07:48.80ID:xEkqTcpa142デフォルトの名無しさん
2023/05/07(日) 11:09:29.23ID:ms6+oRxa >>139
それを見てもptyhon最速の人とC#最速の人が何をしたのかが気になるだけ
それを見てもptyhon最速の人とC#最速の人が何をしたのかが気になるだけ
143デフォルトの名無しさん
2023/05/07(日) 11:12:16.15ID:xEkqTcpa >>140
「ほぼ」の意味を書いておく。
int x, y;
x = y;
と書くと、x,y をレジスタにとっていない場合は、
マシン語では、
mov eax,dword ptr [&y]
mov dword ptr [&x],eax
の2命令になり、基本的に1命令では書けない。
x,y がレジスタ、ebx, ecx にとられている場合は、
mov ebx,ecx
という1命令で書ける。
だから、x=y は、2命令になるときと1命令になるときが有る。
これが、「ほぼ」の意味である。
「ほぼ」の意味を書いておく。
int x, y;
x = y;
と書くと、x,y をレジスタにとっていない場合は、
マシン語では、
mov eax,dword ptr [&y]
mov dword ptr [&x],eax
の2命令になり、基本的に1命令では書けない。
x,y がレジスタ、ebx, ecx にとられている場合は、
mov ebx,ecx
という1命令で書ける。
だから、x=y は、2命令になるときと1命令になるときが有る。
これが、「ほぼ」の意味である。
144デフォルトの名無しさん
2023/05/07(日) 11:14:47.99ID:ms6+oRxa llvmは仮想レジスタマシーンである
145デフォルトの名無しさん
2023/05/07(日) 11:15:59.86ID:xEkqTcpa >>143
同様に、x += y; は、
x,y をレジスタにとっていない場合は、
マシン語では、
mov eax,dword ptr [&y]
add dword ptr [&x],eax
となり、
x,y がレジスタ、ebx, ecx にとられている場合は、
add ebx,ecx
という1命令で書ける。
だから、x += y は、やはり、2命令になるときと1命令になるときが有る。
「ほぼ 一対一対応」の意味は、このような意味で言っている。
C言語はどうしてもマシン語よりも粒度が大きいので、1命令に置き換える
事が出来ずに、2命令か3命令程度になってしまうことはある。
同様に、x += y; は、
x,y をレジスタにとっていない場合は、
マシン語では、
mov eax,dword ptr [&y]
add dword ptr [&x],eax
となり、
x,y がレジスタ、ebx, ecx にとられている場合は、
add ebx,ecx
という1命令で書ける。
だから、x += y は、やはり、2命令になるときと1命令になるときが有る。
「ほぼ 一対一対応」の意味は、このような意味で言っている。
C言語はどうしてもマシン語よりも粒度が大きいので、1命令に置き換える
事が出来ずに、2命令か3命令程度になってしまうことはある。
146デフォルトの名無しさん
2023/05/07(日) 11:17:50.86ID:xEkqTcpa147デフォルトの名無しさん
2023/05/07(日) 11:19:00.29ID:ms6+oRxa ながながとつまらないことを書いてるな
最適化でsimdを自動で使ってくれるベースがあればそっちが勝つわ
最適化でsimdを自動で使ってくれるベースがあればそっちが勝つわ
148デフォルトの名無しさん
2023/05/07(日) 11:20:09.23ID:xEkqTcpa >>146
[補足]
誤解なきように行っておくと、Rustも、= や、+= のような演算子の粒度は、
C言語と基本的に同じことが多いので、その部分に関しての両者に優劣の
差は無い。だから、RustはC/C++と同じ程度の速度が出ることがある。
[補足]
誤解なきように行っておくと、Rustも、= や、+= のような演算子の粒度は、
C言語と基本的に同じことが多いので、その部分に関しての両者に優劣の
差は無い。だから、RustはC/C++と同じ程度の速度が出ることがある。
149デフォルトの名無しさん
2023/05/07(日) 11:21:33.84ID:xEkqTcpa150デフォルトの名無しさん
2023/05/07(日) 11:23:54.31ID:ms6+oRxa コンパイラは高速化では中間言語化が有効なケースが多い
llvmの最適化はそれで行われてる
rustは二種類の中間言語に変換されてバイトコードを出す
でも中間言語に寄らないヒューリスティックな最適化も存在してる
そちらは泥臭く研究が進められてそちらは今llvmより速いコードを吐き出している
llvmの最適化はそれで行われてる
rustは二種類の中間言語に変換されてバイトコードを出す
でも中間言語に寄らないヒューリスティックな最適化も存在してる
そちらは泥臭く研究が進められてそちらは今llvmより速いコードを吐き出している
151デフォルトの名無しさん
2023/05/07(日) 11:25:01.81ID:xEkqTcpa152デフォルトの名無しさん
2023/05/07(日) 11:27:12.27ID:xEkqTcpa153デフォルトの名無しさん
2023/05/07(日) 11:28:14.31ID:ms6+oRxa エスケープ解析はjava一時期重点的に研究されて実装に取り込まれている
誰か天才的な人間が開発に来たんだろう
golangも後追いでエスケープ解析入れてるけどエスケープ解析をオンにすると速度が落ちるケースが多いらしい
開発者が愚鈍なのか想定ケースを外れてるのか不明
誰か天才的な人間が開発に来たんだろう
golangも後追いでエスケープ解析入れてるけどエスケープ解析をオンにすると速度が落ちるケースが多いらしい
開発者が愚鈍なのか想定ケースを外れてるのか不明
154デフォルトの名無しさん
2023/05/07(日) 11:29:33.02ID:xEkqTcpa155デフォルトの名無しさん
2023/05/07(日) 11:34:06.34ID:xEkqTcpa >>154
マシン語プログラミングとは、
mov,add,sub,mul,imul,div,idiv,cmp,jnz,jb, jbe, ja, jae,call,ret
のような20個ほどの命令を組み合わせて書く書き方。
ところが、C言語では、少し粒度が大きくなってしまうが、それらの20個の
命令に対応する命令が存在している。つまり、C言語では、マシン語の
1〜3命令の単位で命令を書くことが出来る。マシン語の1命令にならない
ケースは、レジスタが足りなくて本質的に1命令で書けない場合。
マシン語プログラミングとは、
mov,add,sub,mul,imul,div,idiv,cmp,jnz,jb, jbe, ja, jae,call,ret
のような20個ほどの命令を組み合わせて書く書き方。
ところが、C言語では、少し粒度が大きくなってしまうが、それらの20個の
命令に対応する命令が存在している。つまり、C言語では、マシン語の
1〜3命令の単位で命令を書くことが出来る。マシン語の1命令にならない
ケースは、レジスタが足りなくて本質的に1命令で書けない場合。
156デフォルトの名無しさん
2023/05/07(日) 11:35:48.42ID:ms6+oRxa エスケープ解析が有効なシーンにあっても速度向上はわずか1%~2%ぐらいのレベルなので
誤差と言えば誤差
誤差と言えば誤差
157デフォルトの名無しさん
2023/05/07(日) 11:37:17.94ID:zo7jDOyY >>154
時代に取り残されてるな
まず大昔にレジスタ最大限活用最適化により1対1は崩れてる
さらにパイプライン最適化によって手書きアセンブリが敗北するようになってのがだいぶ昔の話
並行してキャッシュ最大限活用最適化によりスタック利用有利がさらに強まったり
時代に取り残されてるな
まず大昔にレジスタ最大限活用最適化により1対1は崩れてる
さらにパイプライン最適化によって手書きアセンブリが敗北するようになってのがだいぶ昔の話
並行してキャッシュ最大限活用最適化によりスタック利用有利がさらに強まったり
158デフォルトの名無しさん
2023/05/07(日) 11:38:19.17ID:xEkqTcpa >>157
そんなことない。
そんなことない。
159デフォルトの名無しさん
2023/05/07(日) 11:40:38.01ID:ms6+oRxa お互いに自分の強いと思う必殺技を叫んで殴り合ってる状態だな
映画館に行かずにこんなところで聖闘士星矢が見られるとは…
映画館に行かずにこんなところで聖闘士星矢が見られるとは…
160デフォルトの名無しさん
2023/05/07(日) 11:46:33.50ID:g30pVgXT 今は究極のパイプライン最適化により
生成された機械語と元のプログラミング言語は実行順序すら異なる
だから連投してるアホ>>155の書き込みは読む必要なし
memory orderingとかすら知らない低レベル
生成された機械語と元のプログラミング言語は実行順序すら異なる
だから連投してるアホ>>155の書き込みは読む必要なし
memory orderingとかすら知らない低レベル
161デフォルトの名無しさん
2023/05/07(日) 11:46:55.96ID:xEkqTcpa いくらRustが独自の最適化しても、その最適化と同じことを
C++では書こうと思えば書けてしまうのだから、C++が負ける可能性
はない可能性がとても高いと言うこと。
C++では書こうと思えば書けてしまうのだから、C++が負ける可能性
はない可能性がとても高いと言うこと。
162デフォルトの名無しさん
2023/05/07(日) 11:48:22.26ID:xEkqTcpa >>160
そのレベルの最適化は、コンパイラの最後の段階であるところのLLVMレベル
で行なわれるから、Rustとclangで差が出ることは無い。
出るとしたら、LLVM最適化がたまたまその時には上手く最適化できなかっただけ。
そのレベルの最適化は、コンパイラの最後の段階であるところのLLVMレベル
で行なわれるから、Rustとclangで差が出ることは無い。
出るとしたら、LLVM最適化がたまたまその時には上手く最適化できなかっただけ。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国側が首相答弁の撤回要求、日本側拒否 [夜のけいちゃん★]
- 債券・円・株「トリプル安」に…長期金利1.755%まで上昇、円は対ユーロで史上最安値 [蚤の市★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★5 [ぐれ★]
- 映画「鬼滅の刃」の興行収入急減、日本行き航空券大量キャンセル…中国メディア報道 [蚤の市★]
- 【音楽】Perfume・あ~ちゃんの結婚相手「一般男性」は吉田カバンの社長・吉田幸裕氏(41) 高身長で山本耕史似 [Ailuropoda melanoleuca★]
- 【大分】佐賀関で大規模火災、170棟以上が延焼中 70代男性1人と連絡取れず [ぐれ★]
- フランス「G7に習近平主席を呼びたい」ドイツ「良い考えだ」 高市さん...? [237216734]
- 麻生太郎氏、高市政権と距離を置きはじめる(´・ω・`) [399259198]
- 【悲報】中国営業に熱心な日本人タレントたち、中国のイベントが続々と中止に… まだ予定中のアイドルとか歌手とかたくさんいるけど [452836546]
- 自閉症が「んなっしょい」と連呼するお🏡
- 【悲報】高市効果で「1ドル=160円」が相場へwwwwwwwwwwwwwwwwwwwwwwwwwwwww 止まらぬ高市円安💥💥 [871926377]
- 【悲報】SP500今日も暴落で完全に世界恐慌。高市恐慌として全世界で語り継がれそう [686538148]
