結局C++とRustってどっちが良いの? 5traits

■ このスレッドは過去ログ倉庫に格納されています
2023/06/30(金) 21:56:35.52ID:PDIJ4aZy
「C++の色々配慮してめんどくさい感じは好きだけど、実務になったらメモリ安全性とか考えて今後Rustに変わっていくんかな」
「うだうだ言ってないで仕事で必要なのをやればいいんだよ、趣味なら好きなのやればいい」

っていう雑談スレ。

結局C++とRustってどっちが良いの? 4traits
https://mevius.5ch.net/test/read.cgi/tech/1686046386/

関連スレ(マ板): Google&MS「バグの70%はC/C++。Rustにする」
https://medaka.5ch.net/test/read.cgi/prog/1619943288/
2023/07/22(土) 09:16:42.85ID:eFQEbPGf
>>247
> 俺は実世界ではとても優秀だと評価されている。

これってフィールズ賞のことだったのか?
そりゃ優秀だわ
2023/07/22(土) 10:52:28.80ID:wzDYyI8z
自己評価高すぎる爺って周りから煙たがられてそう
2023/07/22(土) 12:47:34.51ID:tvxxAvU4
キャッシュメモリ云々の話は解決したの?
2023/07/22(土) 14:05:46.99ID:o1deZ1gA
それより病気の治療が先
2023/07/22(土) 14:17:40.70ID:j4FWBx/w
トポロジー理論を極めると細かい差異が見えなくなってドーナツとコーヒーカップが同じになるとか言うし
数学の才能があってアルゴリズムを極めた人間には実世界で計算量のオーダに付随する係数も見えなくなるんだろう
だから(1000000×N)と(3×N^2)は常に(3×N^2)の方が大きく見えるようになるし
それに違反する実測結果もすべて(高々有限個の)例外にしか見えなくなる

話が通じない場合も多々あるけど我々とは見えてる世界が違うと思って諦めるしかない
2023/07/22(土) 14:27:29.52ID:psW1WegU
そもそも数学が極まってる人にはとても見えないのだが...
2023/07/22(土) 14:27:59.80ID:eFQEbPGf
ここにいるやつらって基本、数学できるやつだと思うんよ
子供の頃から算数も数学も別に苦手としてなかっただろ?
全科目サボってた割に数学物理は点取りやすかっただろ?
だから理系の理学部、理工学部、工学部に進んだりしただろ?

でも
その時周りに「数学の才能がある」とか自らアピってるやつおった?
一体どれだけの才能に恵まれたら自らアピりだすんだろうな
2023/07/22(土) 15:49:30.96ID:YLqzZrt5
>>801
>数学の才能があってアルゴリズムを極めた人間には実世界で計算量のオーダに付随する係数も見えなくなるんだろう

簡単な例だと nCr の公式
Σ(n!/(r!(n-r)!))
馬鹿正直にこの通りにloopすると無駄な計算が多い
2023/07/22(土) 16:16:53.88ID:kAWTuV72
なんかのAAに見えてしまう俺(ry
2023/07/22(土) 16:38:56.50ID:j4FWBx/w
シグマつけるとnCrの公式じゃなく2^nになるな
2023/07/22(土) 16:52:58.46ID:NWfMWzFP
普通にかけて行ってO(nklog(n))くらいはすぐ思いつくけどもっと早い方法あるん?
2023/07/22(土) 16:59:32.04ID:NWfMWzFP
もちろん固定長レジスタで桁数の増大分も込めてO(knlog(n))ね
桁数の増大無視、純粋な掛け算、割り算回数なら掛け算2k-2回、割り算一回で2k-1回の四則演算で出せる
桁数がO(n)だから一回の乗算、除算はn×log(n)前後
もっと早くできる?
2023/07/22(土) 17:08:56.89ID:GoncfkXA
>>801
N→∞に飛ばすんだよ?
1000000より遥かに大きい数がNと考えても良い
係数なんか意味なくなるでしょ
2023/07/22(土) 17:11:59.52ID:NWfMWzFP
あ、わかった
Binetの公式で少し早くなるのかな?
2023/07/22(土) 17:20:36.85ID:j4FWBx/w
>>809
工学上実用的なNの範囲では係数が大きな意味を持つ場合もあるんだけど
そうやってすぐに係数を捨てちゃうから話が通じなくなるってこと

と言っても通じないから結局諦めるしかないんだけどね…
2023/07/22(土) 17:36:20.37ID:GoncfkXA
>>811
O記法は実用的な話はしてないよ
あくまでアルゴリズムの計算量だけに特化したもの
実際はNが支配的じゃないような場合は多々ある
そういう理解をしておくべき
2023/07/22(土) 17:37:57.59ID:GoncfkXA
まあとはいえそんな係数だけが大きい定数となるケースはほとんどないのでだけどね
そのような場合は間違いなくNが関与していることが多い
2023/07/22(土) 17:41:04.50ID:GoncfkXA
数学が苦手な人はこのように基本的な定義とか定理をきちんと理解してないことが多い
それなのにこの場合はおかしい!と言う
定義に戻ってみるとそんな場合のことは言ってないことが多い
2023/07/22(土) 17:46:37.41ID:GoncfkXA
O記法はnを無限大に持って行った時の話
o記法はnを無限小に持って行った時の話
きちんと定義を確認しよう
これらは大学の微積でやるよ?
ちな数学での定義は厳密に書かれているから分かりにくいが直感的な理解の仕方を自分で考えるのが良い
2023/07/22(土) 17:55:32.12ID:XFIdOXKk
ちゃうで
https://ja.m.wikipedia.org/wiki/%E3%83%A9%E3%83%B3%E3%83%80%E3%82%A6%E3%81%AE%E8%A8%98%E5%8F%B7
2023/07/22(土) 18:03:08.40ID:GoncfkXA
厳密に書くとそうなるだけだよ
無限大や無限小を正確に表すにはイプシロンデルタや上界下界の定義が必要
ただこれらはプログラマにとってはオーバースペックなので俺のいう上の直感的な定義を理解しとけばよろしい
2023/07/22(土) 18:07:40.13ID:GoncfkXA
数学がある程度出来る人は正確な定義と
理解するための直感的な考え方を持ってる
しかし教科書ではその直感的な考え方を書くと同業者から不正確だ!って突っ込まれるので書きにくい
だから勉強しにくい
ほんと困ったものです
2023/07/22(土) 18:16:40.96ID:GoncfkXA
O記法やo記法はnを無限大/無限小に持って行った時
どういう関数になるのか?を表しているだけなのです!
どん!ね、簡単でしょ
2023/07/22(土) 18:20:17.39ID:sToEtmK8
京大の数学専攻に行った人知ってるけどまあひどいありさまだよ

中学の担任がまずそれで暴力教師
社会に出てあった人はうつ病で施設を行ったり来たり
もう一人は中退して地元帰ってきてギャンブルにのめりこんで今もパチプロみたいな生活してる
2023/07/22(土) 18:23:18.53ID:kAWTuV72
確率計算がさくっとできちゃうからパチプロできるんだったりして

雀士とかいうのも聞いたことある マンガとかでだけどw
2023/07/22(土) 18:38:00.93ID:sToEtmK8
一般生活でも自然現象を見て脳内でモデル作って偏微分の境界条件とか気になる人が数学が出来る人
2023/07/22(土) 18:46:30.74ID:sToEtmK8
その人たちの共通点は一つ

本人が理不尽だと感じることには絶対妥協しないで最後まで食い下がってくる
狂気を感じた
2023/07/22(土) 20:16:03.51ID:DM7c04yB
>>819
わかりやすくて草
この理解でいいね
2023/07/22(土) 20:38:27.64ID:bCf8Jd0F
O記法o記法に無限小は出てこない。

>>816が参照出しているんだから少しは読めよ。
2023/07/22(土) 20:53:08.15ID:tvxxAvU4
沢山数式暗記してても馬鹿は馬鹿なんだよな
2023/07/22(土) 21:00:51.86ID:XFIdOXKk
>>817
イヤ厳密に言ったらも何も全く意味が違う
完全に誤解してる
2023/07/22(土) 21:06:42.21ID:YhxH2f1t
>>818
ぼやけたjpegも圧縮率が高ければ文句言われない
不正確でも短ければ良い
長文は悪い
829デフォルトの名無しさん
垢版 |
2023/07/22(土) 21:50:16.59ID:kdu4dn9d
>> テンプレートは通常、コピーを避けるために const& を使用しますが、これは int のような単純な型を渡すには非効率的な方法です。

な?C++20便利だろ?
2023/07/22(土) 22:36:24.52ID:nB6v7J6K
計算量でスモールoとか使う場所あるの
831デフォルトの名無しさん
垢版 |
2023/07/22(土) 23:22:57.00ID:kdu4dn9d
そういえばJAXAに居たとき使ってたわ
2023/07/22(土) 23:43:43.06ID:pjILcF77
ロケットが失敗続きな理由がなんとなくわかった
833デフォルトの名無しさん
垢版 |
2023/07/22(土) 23:47:22.27ID:kdu4dn9d
俺が辞めたからだろ?
2023/07/23(日) 08:32:47.35ID:YG1/7f33
マジレスすれば、いかに優秀でも一人抜けたくらいで…といったところだが、
人材流出ネタを聞くたびに、ひょっとして…と思ってしまう自分が情けない
835デフォルトの名無しさん
垢版 |
2023/07/23(日) 09:44:20.13ID:mLgzCYW9
ロブ・パイクの「プログラミング5カ条」

ルール2:処理速度を測定すること。測定して、コードのある部分が他の部分を圧倒しない限り、速度の調整をしてはいけない。

ルール3:派手なアルゴリズムは、入力値のnが小さいと処理が遅い。そして通常、nは小さい。派手なアルゴリズムは大きな定数を持っている。nが頻繁に大きくなることがないなら、派手なアルゴリズムは使わないようにすること。(nが大きくなっても、まずルール2を適用すること)


https://gigazine.net/news/20200817-rob-pike-5-rules-programming/
2023/07/23(日) 09:55:53.38ID:DSw9DmtI
LinkedListの挿入削除は常にO(1)!だから最強!


オーダ記法を最近覚えて得意げに使ってそう
Javaの入門本でもArrayListとLinkedListの使い分けはこういう用途でやりましょうって書いてあるよねw
2023/07/23(日) 10:58:23.71ID:bnyHswx7
給料もらってるのに辞めるとか、課金してもサービス終了するようでは
フリーソフトに対する優位性がなくなってしまう
2023/07/23(日) 11:19:29.58ID:kMNWXVHy
>>804 の実装で一番早いのは
パスカルの三角形で縦に足して行くやり方の気がする
2023/07/23(日) 11:39:51.12ID:kMNWXVHy
>>818
CS用語って量子化とかエントロピーとか変に数学とか物理の用語借用してるのがまずいんだよな
全然関係無い概念で混乱する
2023/07/23(日) 11:43:20.98ID:NhS1+0R5
クライマックスシリーズはまだはやい
2023/07/23(日) 11:48:32.16ID:kMNWXVHy
>>832
>>832
打ち上げの動画で今のロケット責任者の頭抱えてる姿観るとあれじゃだめ感
842デフォルトの名無しさん
垢版 |
2023/07/23(日) 11:49:16.91ID:kMNWXVHy
>>834 だった
2023/07/23(日) 11:51:24.56ID:kMNWXVHy
>>836
挿入削除だけで参照も検索もしないなら高速だね
四次元ポケット欲しいな
2023/07/23(日) 12:06:43.78ID:GuX7KEu3
>>838
ネタなのかマジなのか分からんけど高速な実装を考える前に
とりあえず(1+a)^nを展開して両辺のaに1を代入してみよう
2023/07/23(日) 14:11:34.49ID:OiBoM91I
Rustは、コンパイル速度が遅いと言う噂があるが、
VC++(msvc、precompiled header利用時)と比べると
どうなんだ。
2023/07/23(日) 14:12:51.60ID:OiBoM91I
コンパイル速度は、本を見てるだけでは分からない事
の一つだな。そして大規模開発には物凄く重要となる。
2023/07/23(日) 15:04:02.22ID:ILZNl6Xo
さすがにそこは、clangと比べるべきでは
2023/07/23(日) 15:47:54.37ID:kMNWXVHy
>>844
それがどうかしましたか?
849デフォルトの名無しさん
垢版 |
2023/07/23(日) 15:55:24.23ID:ZTC84cTM
let hoge = "a";
println!("{:2}後ろ",hoge);
let hoge = "あ";
println!("{:2}後ろ",hoge);
表示幅を揃えたいのですが上のやり方だと
後者の「あ」と「後ろ」の間にスペース1文字入ってしまいます
hogeに「あ」か「a」かどちらが入るか不定の時
どうするのが定石?
2023/07/23(日) 16:38:44.72ID:bnyHswx7
traitを作る
とりあえず定石無視でimplする
2023/07/23(日) 16:40:47.70ID:OMFtuUSH
>>849
unicode_widthとかで表示幅を求めて調整する
調整したい文字列集合の最大値ベースの調整だけでいいか
1行で表示したい最大長ベースの調整も必要かは用途次第
2023/07/23(日) 18:04:59.73ID:hD/uYp9Y
メモリ安全性は大規模開発時に有利に働く特徴なのだが、
コンパイル速度の遅さなど、Rustにはそれとは逆の特徴も
持っており、ややこしいぞ。
2023/07/23(日) 21:22:05.78ID:lmJrnSr9
幅曖昧問題は指定するしかない
https://www.unicode.org/reports/tr11/images/tr11.h1.jpg
https://www.unicode.org/reports/tr11/images/tr11.h2.jpg
2023/07/23(日) 22:53:08.93ID:bnyHswx7
コストカットに取り憑かれたら
文字列cloneしてスペースを付け足して返すコストも
許可がないと支払えない人間になったりして
知らんけど
2023/07/24(月) 03:35:04.61ID:tlNrTE5b
C++だと、ライブラリが大きくなってもコンパイル速度が
遅くなることは無い。異常に大きくなった場合には
リンク速度が遅くなることが有る程度だが、通常は
遅さを感じることが無い程度に留まる。
Rustだと、crateが大きくなったりcrateの個数が増えると
コンパイルが遅くなったりするの?
2023/07/24(月) 04:35:03.66ID:8nghHebx
ブラウザにはJSがあるから
C++やRustのコード修正と再コンパイルをすることなくJSのコードを修正すればいい
これが大規模開発ではないというなら小規模で十分
2023/07/24(月) 07:01:01.92ID:E3S0vo4U
どうやろ?
コンパイラの暗黙の了解でサイズに対して処理は線形にならなければならないというのがある
流石にその範囲ではあるんじゃないの?
ただ線形は線形でも係数がでかいんかな
それだけならコンピュータが早くなれば体感的には改善していくはず
2023/07/24(月) 08:50:15.20ID:b4teMFwb
Rustのcratesの依存関係でcargoが予期せぬものをいっぱいダウンロードするから
遅い回線だと(一回目の)コンパイル(というかコンパイルの準備)は超遅くなる
2023/07/24(月) 11:25:58.22ID:Jt1K3EYN
デフォルトが全部静的リンクだからそれが遅いのもある
2023/07/24(月) 11:35:01.87ID:DOk3bTYa
>>858
その「遅い回線」って何?
2023/07/24(月) 13:30:21.48ID:LicyyNi9
>>860
時間帯によっては遅いことがある。
技術や能力の差ではなく、お金持ちかどうかで出来ることが
違ってくるのはおかしい社会。
862デフォルトの名無しさん
垢版 |
2023/07/24(月) 13:34:38.77ID:DOk3bTYa
>>861
>技術や能力の差ではなく、お金持ちかどうかで出来ることが
>違ってくるのはおかしい社会。
お前それ左翼の発想そのものじゃねーかwww
863デフォルトの名無しさん
垢版 |
2023/07/24(月) 13:36:23.66ID:DOk3bTYa
通信インフラってのは
ソフトウェアの複製がゼロコストなのと違って
コストが掛かるんだよ
2023/07/24(月) 13:39:12.35ID:LicyyNi9
>>862
左翼は能力の差まで無視しようとするで。
2023/07/24(月) 13:51:35.63ID:DOk3bTYa
>>864
典型的にはいわゆる「優秀」な人を
民意を無視して登用するシステムと理解しているが?
政治家として優秀かはさておき
日本でも共産党って学歴偏重でしょ?
2023/07/24(月) 13:59:42.61ID:7fuealYq
自分用には、そこそこ全体がコンパクトな方が好きかなあ

仕事用には、回線も装置も会社のものだから兎も角なんだが
2023/07/24(月) 14:04:31.32ID:LicyyNi9
「コンパイル速度が遅い」という噂が立ってるんですが、
実際は、crateのダウンロード速度が遅い、ということなんですか?
2023/07/24(月) 14:05:59.45ID:LicyyNi9
>>865
明らかに能力の無い女性を、最も能力の高い男性しか
就けない役職に無理やり入り込ませようとするのも
左翼なんだけど。
869デフォルトの名無しさん
垢版 |
2023/07/24(月) 14:07:33.73ID:1ixoDG3j
>>868
例えば? 煽りではなく
2023/07/24(月) 15:00:19.41ID:056Z4jSG
イヤちゃうやろ
流石にそれはコンパイラの作業量が純粋に多いから遅いでしょ
そりゃC++と比べて早くなるわけない
チェックしてる事多いんだから
871デフォルトの名無しさん
垢版 |
2023/07/24(月) 15:30:37.55ID:9sf7J+PW
>>861
それはプログラム板で主張することじゃないやろ
2023/07/24(月) 16:03:16.33ID:7fuealYq
C++派だが、C++もたいがい遅いだろ
pchとか使うのが習慣化してるけど

そういや、結構前からmoduleってのが使えるけど、きちんと使ったことないな。。
2023/07/24(月) 17:44:58.93ID:u3xro2aJ
>>869
能力が低い女性を政治的圧力で無理やり色々な場所に
押し込んできたから日本はこんなにめちゃくちゃに
なってるのに。
2023/07/24(月) 18:20:23.66ID:dGeJrBxo
10人必要っぽい場所に20人投入すればいいのに
10人投入してめちゃくちゃになってから10人追加するやつって何なの?
戦力の逐次投入なの?
875デフォルトの名無しさん
垢版 |
2023/07/24(月) 18:51:49.12ID:DOk3bTYa
>>873
何の話だ?
ちゃんとスレを遡って文脈を把握してから書いてくれ
2023/07/24(月) 21:47:00.51ID:Zw6srC2c
>>874
20人必要そうなら最初から20人要求しろよ。

10人で合意しているのに20人にして予算倍増させた責任は誰が取るんだよ。
2023/07/24(月) 22:22:14.29ID:dGeJrBxo
自己責任ってあれほど言ったのに
自己とは誰なのか
誰も知らないんだよな
878デフォルトの名無しさん
垢版 |
2023/07/25(火) 01:43:34.89ID:bta56IUp
多次元配列のライブラリの演算スピードがまだnumpyより倍くらい遅い。また、速くできる要素は利便性の観点から悩ましい。rayonを使えばnumpyの倍速くらいにはできるようになった。
2023/07/25(火) 03:35:47.01ID:w8nK1FpQ
>>878
それはライブラリを改良すれば今後良くなっていくだろう問題
なので、余り気にすることは無い。
それより、今後も改善しにくい問題のほうが問題。
Rustにも色々な問題が有るようだ。
2023/07/25(火) 08:41:35.71ID:UPZxbC6+
スピードが必要な部分だけRustを使わないようにすれば解決
2023/07/25(火) 08:54:51.87ID:k8WJtY+U
そういえば君らのメモリ管理の会話でLinkedListの使い道思い出したわ
Rustやその他の言語側じゃなくてOS側のメモリ管理にLinkedList使われてるわ
2023/07/25(火) 09:01:07.57ID:k8WJtY+U
>>874
デスマは人数増やしても解決しない
ステマは露出増やすと賞賛される
2023/07/25(火) 09:02:56.16ID:k8WJtY+U
>>880
unsafe {} 便利ですね判ります
2023/07/25(火) 09:03:45.28ID:P1fUbQNp
まぁ調べてみると確かに行列配列系の計算は“生rust”だと難しいんやろな
でかいデータを高速に捌くには“参照”をうまく使いこなしてなるべく“コピー”の回数を減らすくらいしかアルゴリズムの改善は見込めない
しかしrustは安全性の観点からC++のそれより所有権、生存期間の抽象度、制約を一段引き上げてる
だからそれでも速度が欲しいならunsafeで囲って危ない橋を渡るしかない、実際rcとかarcのソース読むとundafeだらけやしな
逆に言うとユーザーがその“危ない橋”を渡らなくても済むようにライブラリがあるとも言える
885デフォルトの名無しさん
垢版 |
2023/07/25(火) 13:32:44.33ID:cCDBQCCP
>>884
ArcやRcは使用はやめた。マルチスレッド化の時にだるいことが多いから。仕方ないのでreshapeメソッドとかでは配列をクローンすることにした。
886デフォルトの名無しさん
垢版 |
2023/07/25(火) 13:34:21.22ID:cCDBQCCP
あと、行列の計算とかでループのスピードを速くするために次元はconst N: usizeを使ってる。
2023/07/25(火) 13:51:24.76ID:nk58GX8+
海外のサイトを見ていたら、Rustは、インクリメンタル
ビルドが遅いらしい。だから、ソースを細かく分けすぎると
遅くなるのかも知れない。しかし、ビルドの高速化の
ために発明されたのがインクリメンタルビルドだった
のだから、本末転倒の厄介な問題だ。
なんでも、リンクに10秒くらいかかるのだとか。
ある人によれば一時間くらいかかったと言う。
888デフォルトの名無しさん
垢版 |
2023/07/25(火) 13:53:33.03ID:nk58GX8+
>>887
crateの初回使用の時にフルコンパイルされる
ので遅いのは、それはそれで困るが、ギリギリセーフ
だとしても、それ以上に厄介なのは、自分のソースを
少しいじってビルドしなおしても、リンクはどうしても
必要だから、そこで10秒もかかってしまっては
開発は非常にストレスがかかってしまうことだ。
2023/07/25(火) 13:58:22.63ID:nk58GX8+
中くらいの大きさのプロジェクトで、
structの中の一行を変えるだけで、5分かかって
困っていると言う報告も見つけた。
890デフォルトの名無しさん
垢版 |
2023/07/25(火) 14:00:01.53ID:uSv6E5ak
>>888
リンカーは共通だろうからC/C++と差はないと思うのだが?
891デフォルトの名無しさん
垢版 |
2023/07/25(火) 14:15:10.14ID:nk58GX8+
https://www.reddit.com/r/rust/comments/11vrzme/help_me_love_rust_compilation_time/

Hey all, I've been writing software for about 15 years, Started from VB, .NET (C#), Java, C++, JS (Node), Scala and Go.

I've been hearing about how Rust is great from everyone ! But when I started learning it one thing drove me nuts: compilation time.

Compared to Go (my main language today) I find myself waiting and waiting for the compilation to end.

If you take any medium sized OSS project and compile once, it takes ages for the first time (3,4 minutes, up to 10 !) but even if I change one character in a string it can still take around a minute.
892デフォルトの名無しさん
垢版 |
2023/07/25(火) 14:31:37.57ID:iTChcdyR
cargo 使ってるときに rust にリンカオプション教える方法教えて
2023/07/25(火) 14:32:50.71ID:nk58GX8+
海外のサイトを見ていて考えられる要因の候補
・マクロの使いすぎ。Rustのマクロは乱用すると遅いらしい。
・メモリー不足で仮想記憶が働いてしまっている?
2023/07/25(火) 14:37:55.45ID:nk58GX8+
Rustは、ファイル単位でなく crate 単位でコンパイルするらしい。
だから、あるソースファイルの1行を直してもcrate全体の
コンパイル時間が必要となる。
C++が、ファイル単位でコンパイルするのと対照的となる。

Q: Does Rust compile fast?
A: For incremental builds, Rust will take longer to compile
than C++ (i.e. C++ wins).
This is because Rust compiles one crate at a time,
rather than one file at a time like in C++,
so Rust has to look at more code after each small change.
Jan 5, 2023
2023/07/25(火) 14:41:52.08ID:MikqYz6X
でcrateってのは複数ファイルに跨ることが多いわけ?
それとも1ファイルに複数のcrateが実装されることが多いわけ?
2023/07/25(火) 14:49:22.82ID:nk58GX8+
>>895
前者だろう。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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