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

レス数が950を超えています。1000を超えると書き込みができなくなります。
1デフォルトの名無しさん
垢版 |
2023/07/29(土) 15:05:46.55ID:2Hm/yplK
C++の色々配慮してめんどくさい感じは好きだけど、実務になったらメモリ安全性とか考えて今後Rustに変わっていくんかな」
「うだうだ言ってないで仕事で必要なのをやればいいんだよ、趣味なら好きなのやればいい」

っていう雑談スレ。

前スレ 
https://itest.5ch.net/mevius/test/read.cgi/tech/1688129795

関連スレ(マ板): Google&MS「バグの70%はC/C++。Rustにする」
https://medaka.5ch.n...cgi/prog/1619943288/
2023/08/27(日) 18:26:07.84ID:5kryRYaj
>>880
ありがとう
auto-refないから&a+&bって書き方になるのね
理解したわ
2023/08/27(日) 18:47:19.96ID:9Fw72WPV
>>883
具体例はfn add(self, rhs: Rhs) -> Outputだったということでしょ
2023/08/27(日) 19:50:49.96ID:zk2DK/9o
>>885
なるほどね
やはり勘違いしていたわけだ
&selfと書いていないから参照はダメだと思い込んでしまったのだろう
実際にはもちろんself自体が参照型でもOK
2023/08/27(日) 19:55:22.28ID:zk2DK/9o
一般的にもトレイトのメソッドfoo(self, ...)についてself自体が&T型の場合もある
&T型はCopy実装されているため消費されても構わない
ようはポインタだから
2023/08/27(日) 20:33:53.99ID:E6sVfEz/
え、その二つの話つながってたの?
2023/08/27(日) 21:23:31.52ID:Cz9QaAKK
比較演算子とかはauto-ref/derefできたほうがいいと思うが算術演算子はexplicitな今のスタイルの方がいいと思う
今でも&a + &bの中身がa.clone() + b.clone()になってるやつとかやめて欲しい
2023/08/27(日) 21:33:56.56ID:OVTDvFv9
>>885でSelfもRhsもOutputも自由なのでT次第でT + T、T + &T、&T + &Tなどそれぞれ最適な実装ができる
例えばT + &T -> Tは敢えて消費してそのメモリを居抜して返す効率パターン
例えば計算途中の中間生成Tは消費されてもよいわけで再び結果の中間生成Tに転用できる
2023/08/27(日) 21:35:11.73ID:Aks4ymi6
>>889
俺もそう思う
コピーして演算なら a+bで良いと思うけど
デカいオブジェクトで参照で演算なら&a+&bのほうがわかりやすいから良いと思う
2023/08/27(日) 21:44:01.12ID:OVTDvFv9
数値計算以外にも応用できて
Rhsは &T でなくてもよいため
例えば { string.push_str(other_str); string } と書くところを
string + other_str と簡潔に書ける
以下の居抜き実装があるため

impl Add<&str> for String {
 type Output = String;

 #[inline]
 fn add(mut self, other: &str) -> String {
  self.push_str(other);
  self
 }
}
2023/08/27(日) 21:45:30.32ID:Aks4ymi6
>>888
俺もなんで&a+&bの&を書くのがまどろっこしいが
>>847
>参照で充分なのに所有権の移転を要求する関数があると
>いちいちcloneしてから渡さないといけないから非効率
に結び付くのか理解できないが,でも、rust野郎は激頭いいから同じ質問を形を変えた質問と
見抜いたんだろう
2023/08/28(月) 03:04:54.55ID:kRbDFKro
質問してる人と答えてる人が同じ人だったら怖いなあ
895デフォルトの名無しさん
垢版 |
2023/08/28(月) 03:16:32.18ID:gISZWwhM
自演の多いスレ
2023/08/28(月) 09:03:13.17ID:ponuOfxz
ほんそれ
>>873-874
2023/08/28(月) 10:16:26.38ID:uyUKevyw
くやしすぎて負け惜しみを書かずにはいられない老害爺ww
2023/08/28(月) 12:32:28.64ID:PXcIjE1o
Rustの名誉を守るため、日々欠かさずパトロール。
そうしてRustの名誉は保たれているのだ。
2023/08/28(月) 12:58:11.57ID:v69lGQmU
質問してたのは行列演算の人でしょ
900デフォルトの名無しさん
垢版 |
2023/08/28(月) 13:33:08.88ID:EHUcz/c8
>>847>>865両方とも?
2023/08/28(月) 14:14:10.40ID:fWSSPYAk
impl<'a> Add for &'a Foo
impl<'a> Add<&'a Foo> for Foo
これで、変数名に&はつかないけど括弧に&がつく感じにできるね
a + b + c == &(a + b) + c == a + &(b + c)
2023/08/28(月) 15:01:10.40ID:Lf88OaGD
それだけじゃ無理
2023/08/28(月) 15:28:15.79ID:YEWHN9+F
Rustで学ぶなんとかとかいう本いっぱい出ているし、結構個人でやる気のあるやつは覚えるんじゃね?
Rust人口増えている印象。
2023/08/28(月) 16:02:44.46ID:Ga4nU38J
この出版不況にそれは凄いじゃん!
2023/08/28(月) 17:40:21.62ID:g5rB6bRy
数年後はHaskellみたいな存在になってそう
2023/08/28(月) 17:40:22.57ID:v1Y6udqG
数年後はHaskellみたいな存在になってそう
2023/08/28(月) 18:31:30.91ID:F1J/4/k0
地学を笑えば名誉を保てそうなのに
逆に名誉を捨てて地学を取る芸風みたいな
908デフォルトの名無しさん
垢版 |
2023/08/28(月) 19:57:39.97ID:4Zx7/Z20
数年後にはHaskellみたいなってると言う人が数年前からいるけど数年後もいるだろうなぁ
2023/08/28(月) 20:08:53.96ID:BueC5+dS
数年前はHaskellはまだブームだったからその時は誉め言葉だったんじゃないの?
2023/08/28(月) 20:46:16.35ID:o8MpXwtV
まあそもそもC++人口がそんなに多くないのにそこからRUSTに移行する人間なんて更に少ないわな
2023/08/28(月) 20:47:30.82ID:C2T1kkQt
ちょっと勉強するならいいけどビジネスでRust書くとか発狂しそう
2023/08/28(月) 20:53:03.47ID:kRbDFKro
そろそろ質問する人と答える人が出てくるかも
2023/08/28(月) 21:01:02.40ID:DV0IBXio
単純なoperator overlodingでもTと&Tの組み合わせで最低4パターンは考慮しないといけないからな
一般的なビジネスアプリケーションでこういう手間をかけるだけのメリットを享受できるケースは少ない
2023/08/28(月) 22:06:15.45ID:LALZht9t
operator overlodを使うビジネスアプリケーションw
あるとしてもoperator overlodを定義するのはライブラリの仕事
利用者は型エラー起こさないように使うだけであり一般的な静的型付け言語どれも同じ
2023/08/28(月) 22:36:07.58ID:78Jgmrk1
>>914
知らない分野に無理にコメントしなくていいぞ
2023/08/28(月) 22:50:16.52ID:t6DgO9mO
ないな
算術以外でオーバーロードは必要ない
関数(メソッド)名で目的をはっきりさせる
2023/08/28(月) 22:53:49.98ID:56ZoPPYl
くやしくてイチャモンつけたかっただけだろw
2023/08/28(月) 23:04:09.89ID:o8MpXwtV
バカでも書けるフレームワークでも無ければビジネス利用は無いだろね
919デフォルトの名無しさん
垢版 |
2023/08/28(月) 23:07:53.29ID:N5WGrjIW
>>916
operator<<
operator>>
2023/08/28(月) 23:08:27.79ID:F1J/4/k0
PerlやC++の演算子を想定してるんだろうけど
若者はそんなものは知らん
PythonとRustは失敗を繰り返さなかった
2023/08/28(月) 23:30:17.72ID:t6DgO9mO
>>919
シフトは整数以外で使ったことないな
そんなものをオーバーロードしてどうするんだよ
意味不明になるぞ
2023/08/28(月) 23:56:35.09ID:LALZht9t
>>915
具体的にoperatorをoverload実装して使うビジネスアプリケーションを言ってみろよ
例えば多倍長を利用するとしても汎用ライブラリが実装するから該当しないよな
2023/08/29(火) 00:00:35.21ID:J3xeIa5d
一般的には算術演算子よりも比較演算子をオーバーロードすることのほうが多いだろうな
924デフォルトの名無しさん
垢版 |
2023/08/29(火) 00:04:16.28ID:82ATxlW4
>>921
そいう批判は昔からあったけど混乱することは全くないよ
2023/08/29(火) 00:36:27.64ID:fynFs9jV
>>923
Rustなら例えばこう書くだけだな
#[derive(PartialEq)]
struct Foo { ... }

これで型表記Foo == Fooも&Foo == &Fooも通る
Foo == &Fooは撥ねてくれる

ちなみに値の比較ではなく
同一性すなわちポインタの比較をしたいならば
std::ptr::eq(&Foo, &Foo)
2023/08/29(火) 01:09:16.27ID:Cd1k3Xfz
>>922
もしかしなくても実務経験ゼロ?
2023/08/29(火) 01:43:28.47ID:g1jCtVM0
>>925
>Foo == &Fooは撥ねてくれる
値として扱うならこれは跳ねるべきではないのでPatrialEqのimplが追加で2ついる
2023/08/29(火) 01:43:31.90ID:fynFs9jV
おまえらいつも例を出さずにもめてるな
演算子をオーバーロード実装するビジネスアプリとやらの例を出せば済む話
2023/08/29(火) 01:45:18.86ID:fynFs9jV
>>927
型不一致として撥ねるべきだ
2023/08/29(火) 01:49:31.97ID:fynFs9jV
>>927
例えば型不一致でも通せ!という理不尽な要求はここへ行き着くので認めるべきでない
if Foo != &Foo {
 Foo = &Foo;
}
2023/08/29(火) 01:51:57.07ID:3VOu0kGE
>>929
eqメソッドを使った時も撥ねる仕様ならその言い訳も成り立ったかもね
932デフォルトの名無しさん
垢版 |
2023/08/29(火) 02:17:09.83ID:+HxwobiY
>>926
と素人が申しております
2023/08/29(火) 02:25:36.33ID:RO95g2iU
>>931
演算子オーバーロードの話をしているところにメソッドを持ち出したらオウンゴールw
メソッド使用でいいなら演算子オーバーロードの必要なし
2023/08/29(火) 05:40:09.32ID:DdsP5NoC
演算子のオーバロードは、ライブラリマンに任せるよ これはC++も同様
あんなものバグ・抜けなしで書けるとか数学マンかよ

ああいうこともできる、というのがC++のいいところだが、自分には過ぎた代物
2023/08/29(火) 07:50:33.04ID:E3TpD5zQ
英単語ではない記号を使うだけなら仮想関数でもできる
仮想関数のように型を統一しないのがオーバーロードの特徴
統一するとvoid*とかObjecとか残念な型になってしまう
936デフォルトの名無しさん
垢版 |
2023/08/29(火) 10:14:25.34ID:RvCE3Lp0
>>900
その二つは別人
ソース俺

>>888
繋がってない
めっちゃ迷惑

自演じゃなくて他演されたの初めてだわ
2023/08/29(火) 12:39:12.46ID:Gj9jSZac
>>936を信じるなら
ID:EQIr/PqP

ID:m1noAQBG = ID:RvCE3Lp0 = 行列ライブラリの人
で、ID:Aks4ymi6は行列ライブラリの人になりすまそうとしたっぽい謎の人物ってことかいな?
2023/08/29(火) 13:05:17.54ID:4jFDwxnu
このスレまじで負け惜しみレスが多いな
なんでここまで幼児メンタルを引きつけるのか謎
2023/08/29(火) 13:45:45.19ID:L7AzKEdf
ここはプログラマ板ではなくプログラム板
話はプログラムで示せ
それができない話ならばプログラマ板へ行け
具体的なコードで話せずに文句と批判するだけの無能は不要
2023/08/29(火) 13:57:24.70ID:YzXqUdha
自分で自分追放してて草
2023/08/29(火) 14:01:13.75ID:Gj9jSZac
>>939
問題の切り分けができない無能も不要
2023/08/29(火) 14:44:41.31ID:CCTytCTB
急に発狂するやついて草
何か刺さっちまったんだろうなw
943デフォルトの名無しさん
垢版 |
2023/08/29(火) 18:25:25.49ID:113viVdP
玲音しね
2023/08/29(火) 18:42:00.76ID:E3TpD5zQ
こんな仮想空間でまじになっちゃって
負けたら大変なことになると思い込むのが問題なんだけど
論破というのはまさにそういう仮想空間で相手にそう思い込ませる術だよね
2023/08/29(火) 19:18:58.62ID:YzXqUdha
rustって名前が良くないよねって思ったけどcも大概やったわ
2023/08/29(火) 20:54:09.08ID:Nn6iD5I/
おれ865だけどなんで847と同一人物認定されてんの?
2023/08/29(火) 21:54:12.23ID:0ZJbGVqi
Rustは普及してないという願望・妄想と
Rustに言及するレスが続いてる現状を両立させるためだろ
2023/08/29(火) 21:55:40.52ID:o1bsY+eR
稚拙w
2023/08/29(火) 22:39:33.53ID:qbvOBi0x
>>947
C++おっさん・爺は年齢的にRust覚えられないから
普及されると嫌だろうからな
一方、若い連中はもう化石言語になるC++よりRustに将来性を見出すだろうからな。
2023/08/29(火) 23:08:37.53ID:dpeDea2P
若い人は誰も使ってないイメージ
951デフォルトの名無しさん
垢版 |
2023/08/29(火) 23:42:50.57ID:KeTq/BI+
でも、いまC++もRustも経験がない人が勉強するならC++からじゃない? C++がある程度分かってないと、Rustのありがたみも分からないし。
2023/08/30(水) 00:16:18.11ID:4rN9QUhj
Cと各スクリプト言語から来てRustで困ることなかった
C++は必要なさそう
2023/08/30(水) 08:48:22.21ID:eE+KSztu
将来性ならpython
言語設計ならNimかMojo
実力ならc/c++
かね。
pythonは無くなることないから身につけて損はないし、その延長線としてNimは使える。
Mojoはスタックフレーム指向として将来性感じる。RustはMojoの踏み台。
2023/08/30(水) 08:54:27.99ID:Q1GiOTDg
バイナリサイズを小さくしたい→C
バグを少なくしたい→Rust
??→C++
955デフォルトの名無しさん
垢版 |
2023/08/30(水) 10:06:20.92ID:7zJH/Xg6
>>954
Cの後継はZig
C++の後継はRust

C++はいらないこ
2023/08/30(水) 10:57:54.24ID:O0+f/FEO
mojoはわかるけどnimってスーパーマイナーすぎんか
957デフォルトの名無しさん
垢版 |
2023/08/30(水) 12:29:00.92ID:kkA3iJAe
>>953
>>956
mojoは早くソース公開しろよ
958デフォルトの名無しさん
垢版 |
2023/08/30(水) 12:30:46.34ID:kkA3iJAe
>>955
zig使ってるbunが1.0になったのに、肝心のzigはいつ1.0になるんだよ?
2023/08/30(水) 12:32:21.28ID:K0sdPATe
喪女はまだめっちゃアーリーステージです~って言ってなかったか
それであんなにドヤ顔登場させた意味はわからんが
960デフォルトの名無しさん
垢版 |
2023/08/30(水) 12:40:02.98ID:wWfEYgvd
やねうら氏ね
961デフォルトの名無しさん
垢版 |
2023/08/30(水) 12:40:52.41ID:wWfEYgvd
>>951-952
C++は知らない方が良い
962デフォルトの名無しさん
垢版 |
2023/08/30(水) 12:42:41.11ID:wWfEYgvd
>>956
nim知らないの?遅れてるな
963デフォルトの名無しさん
垢版 |
2023/08/30(水) 13:45:48.64ID:mNxVjhal
>>962
あなたの遅れてる認定とか知りませんやんw
2023/08/30(水) 15:17:49.40ID:zHni/Vbc
智慧をくれ
2023/08/30(水) 15:36:17.12ID:HQ0MoXmm
「次世代言語wに憧れる一日中暇なお爺さん達wのスレ」
さすが!中身がない!
966デフォルトの名無しさん
垢版 |
2023/08/30(水) 17:03:14.09ID:JRlr8oOO
前にnimは使ったことあるけど、結論的にはそんなに将来性を感じなかった。nimのライブラリが少ないし、pythonのライブラリを使うと結局そこが律速段階になるので速度の恩恵も個人的には微妙だった。これなら普通にpythonを使った方が便利だなとは思った。いまはどんだけ進展してるのかは良く知らんけど。
2023/08/30(水) 18:40:48.60ID:Blqpd4nm
>>953
Pythonは必要な時にスクリプトの読み書きができれば十分で
あの言語仕様と遅さはプログラミング言語としては適してないためこのスレの対象外

Nimは何もかも中途半端であることに加え
先が見えてしまったのとあの開発体制では今後も期待できないため無視してよい存在
2023/08/30(水) 18:56:26.78ID:VDEXXxkp
意味のないレスだよ
2023/08/30(水) 19:40:27.89ID:K0sdPATe
mojoを持ちつつPythonを嗜み
Rustを横目にc+に打ち込む
2023/08/30(水) 20:24:13.48ID:YW1fodiP
Rustが失敗作だったってことじゃん
2023/08/30(水) 20:35:58.15ID:o+6d8X1p
現実はこれ>>496
新たなネットインフラC++ではなくRustで記述されている
972デフォルトの名無しさん
垢版 |
2023/08/30(水) 21:03:04.24ID:U5prozod
>>971
現実はRustで書かれているものも稀にあるってだけでは?
2023/08/30(水) 21:05:54.95ID:EFFGi3bv
>>298
mallocしたままfreeしないのはRustでももちろんできる
BoxやVecなどにはleak()があり意図的にリークする(=今後解放しない)ことができる
代わりに得られるのはライフタイムがstaticな可変参照
つまり静的にメモリ確保したことと同じ扱いになりライフタイムの束縛がなくなり自由となる
2023/08/30(水) 21:20:25.79ID:qErRQYHl
>>972
超大手が色々検討してその結果Rustで作ったなんだが、
知りたいのは、なんで(C++じゃなく)Rustを採用したのかなんだよな。
俺思うに、ネットインフラは公開で超攻撃対象になるから、脆弱性がなるべく少なくなるように
するためにはC++よりRustが良いと判断したからじゃないかと妄想。
975デフォルトの名無しさん
垢版 |
2023/08/30(水) 21:33:28.86ID:U5prozod
>>974
だからその超大手の数多ある新規プロジェクト群の中に
Rustのプロジェクが稀にあるってだけなのでは?
2023/08/30(水) 21:37:48.96ID:qErRQYHl
>>973
そんなの(leak()って)あるのか、leak()でdropしない(禁止する)ように指示しているのかな
2023/08/30(水) 21:39:30.75ID:8/HxBYkL
>>974
C++と比べるとRustはまず記述のしやすさと可読性の良さ
そしてC++よりもコンパイル時点で判明できるミスやバグが多くてデバッガ実行も激減し開発効率が高い
同時にそれらは保守性の良さにも繋がっている
C++とRustのどちらも選べる環境ではC++が今後使われることがほぼなくなるのだろう
2023/08/30(水) 21:43:01.91ID:qErRQYHl
>>975
まれだとしても,超重要なものにわざわざRustだからな
話題のRustでどれぐらいのものが出来るか確認するための
重要なものを作ってみた可能性もあるが
2023/08/30(水) 21:49:43.21ID:8/HxBYkL
>>496はCloudflareとAWSそれぞれの最も重要な中核部分だ
試しに作ってみるような部分ではない
今後は人員さえ揃えばRustを使うというIT各社の確固たる方針
2023/08/30(水) 22:00:23.43ID:dSL5QWen
何かを選ぶ理由とそれを選んだという事実の因果関係は無いほうが動きやすい
強者の命令に対し
命令に従うことが必然的ではない人間はもっと強い
2023/08/30(水) 22:11:27.44ID:YW1fodiP
>>974
99%はC++なんだけど…
982デフォルトの名無しさん
垢版 |
2023/08/30(水) 22:23:28.66ID:U5prozod
そもそも本家本丸のfirefoxのコードは実はC++の方が多いんだぜ?
2023/08/30(水) 22:34:47.35ID:CtEi3o2X
複オジの世迷言 vs 老害爺
レス数が950を超えています。1000を超えると書き込みができなくなります。