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

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

っていうスレ。

前スレ: 結局C++とRustってどっちが良いの?
https://mevius.5ch.net/test/read.cgi/tech/1677286186/
2023/04/03(月) 09:51:01.03ID:7c0W6U8J
でも、C++よりマシな程度では?
2023/04/03(月) 09:52:16.72ID:7c0W6U8J
Rustだって、まともにって難しいだろ、たぶん
俺は簡単に使いたい

>>39>>36
2023/04/03(月) 10:19:52.71ID:efbJG7yX
「安全」に描こうとするとコピーが大量に発生するのか
2023/04/03(月) 10:22:17.10ID:efbJG7yX
>>31
Rust は(限られた範囲において)常に安全ω(キリっ
43デフォルトの名無しさん
垢版 |
2023/04/03(月) 10:26:17.83ID:ni15ogEW
C++er あるあるシリーズ
#![allow(unused)]
... = hoge().unwrap;
... = hoge()?;
let p: *const [u8] = &fuga;
unsafe {}
2023/04/03(月) 10:27:57.18ID:L3onvvn+
>>37
C++のスマポの使い方をミスっても公式支援がない話でそれらは的外れかなあ

clippyはRust公式リント
rustfixはRustコンパイラのよる提案の適用
rust-fmtは清書
cargo-expandはマクロ展開
2023/04/03(月) 10:39:12.43ID:ux7WrBep
>>41
Rustはムダなコピーを発生させずに参照を使って安全にメモリ管理できる言語
もしRustで不可能なケースがあったらそれはC++でも不可能で元から無理筋
2023/04/03(月) 10:55:27.74ID:GLvgK6Zq
なおグラフ
2023/04/03(月) 11:15:28.73ID:UoFPeH1S
>>44
それはRustの実装が一つしかないのを公式と言っているに過ぎない
C++でデバッガが用意されていない開発環境は無い?
もしくは使われていないのでは?
48デフォルトの名無しさん
垢版 |
2023/04/03(月) 11:47:36.10ID:GWsnSys+
>>44
誰もが使ってるツールにわざわざ説明つけてるところ見ると基本の静的解析ツールも知らなかったんだな
複オジは所詮このレベルだから全く信用できない
2023/04/03(月) 11:50:42.61ID:UoFPeH1S
>>45
C++は選択ができる
値とポインタ(スマートポインタ)と参照(左辺値と右辺値)
冗長に書くも効率的に書くもプログラマ次第
素人にはオススメしない
2023/04/03(月) 12:08:48.70ID:NHUpObDP
>>49
それはどちらも同じ
所有権を持つ: C++のスマポ、Rustの変数
所有権を持たない: C++とRustの参照
ただしライフタイムが管理できるRustの参照の方が強力かつ安全
2023/04/03(月) 12:15:40.80ID:UoFPeH1S
>>50
「ライフタイムが管理できるRustの参照」って何?
単に参照先が死んでることをコンパイラで弾くことを「管理」って言ってるの?
2023/04/03(月) 12:16:08.17ID:GLvgK6Zq
the Bookを捨てよ、町へ出よう
2023/04/03(月) 12:24:08.54ID:GLvgK6Zq
Rustの宣伝文だけ読んで他言語を知った気になり
Rustの宣伝文を5chにコピペし続けるだけの人生
2023/04/03(月) 12:47:23.54ID:UoFPeH1S
>>53
言い得て妙
マジでこれw
2023/04/03(月) 12:54:34.40ID:xtNXRsCH
>>50
C++の参照とRustの参照はかなり違うぞ
C++の参照はちょっとミスるとダングリングになる
2023/04/03(月) 13:50:16.07ID:QA6IHCRk
「数学的」連呼してる割には名前に直交性が無いな

.iter
.indexed_iter
.iter_mut
.indexed_iter_mut

.outer_iter
.outer_iter_mut

not exist .indexed_iter_mut
not exist .enumerate_iter_mut

.enumerate_pixels_mut

いちいち覚えてられるか?
2023/04/03(月) 13:54:52.87ID:QA6IHCRk
違ったので訂正
誤 not exist .indexed_iter_mut
正 not exist .indexed_outer_iter_mut
2023/04/03(月) 14:01:30.74ID:7c0W6U8J
あ。「数学的」連呼してたのは、C++側の俺
そして、あんまり、数学的な安全の論拠ってのはみつからない

ありゃあC++で真似するんだよ 手本にしない手はない
2023/04/03(月) 14:08:12.25ID:rB8gWfoY
>>56
各ライブラリで命名方針が異なるのは、プログラミング言語の比較の話と全く無関係じゃね?
あと、enumerate_pixels_mutをその提案のenumerate_iter_mutとしてしまったら、肝心なピクセルが消えて意味不明じゃん。
2023/04/03(月) 14:14:18.67ID:7c0W6U8J
雑談としては、そのへんも「きれい」になってくれるとありがたいね
これはC++も同様
2023/04/03(月) 14:28:24.56ID:gdFj9/S+
直交性の意味がよく分からなかった
index_of(先頭から検索)とlast_index_of(末尾から検索)は直交性がないことになるのかな
標準と非標準の関係で考えると自然な命名だと思うけど
2023/04/03(月) 14:29:57.73ID:GLvgK6Zq
かわいそうだから答えてやるか
数学的な保証が云々ってたぶんRustBeltプロジェクトのことだよね
https://plv.mpi-sws.org/rustbelt/
63デフォルトの名無しさん
垢版 |
2023/04/03(月) 15:09:57.20ID:dlyOKSPs
>>62
どの辺を指して数学的と言ってるのか謎
2023/04/03(月) 15:39:46.50ID:7c0W6U8J
Rust 安全 論文、で上手く引き当てられなかったんだよ
仕事サボって、ちょっと読んでみるw

>>63
いや、いいんだ。「それっぽいの」って俺も言った。
2023/04/03(月) 15:53:08.55ID:ZjD7pm8v
>>62
unsafeを使ってsafeなインタフェースを作っている部分、すなわち人間が安全性を保証しなければならなかった部分を、数学的に保証する試みがあるのか
2023/04/03(月) 15:56:35.02ID:7c0W6U8J
そこも気を付けて読んでみるけど、
unsafeを撲滅しようと思ったら、SoCのサポートが必要ってのが今のところの俺の考え
そう考えないと、C++も永遠にsafeに成れないことになってしまう

unsafe部分にバグが、っていう古い記事が出てきたりするんだけど、
どうせ、safeでいいものまでunsafeでいっぱい書いたんでしょ、と思ってる
これは個人の推測
67デフォルトの名無しさん
垢版 |
2023/04/03(月) 16:08:23.20ID:sTax+JD2
>>65
数学的とは一言も書いてなくね?
2023/04/03(月) 16:11:48.88ID:7c0W6U8J
学術的とか、論理的とか、適当に読み替えてくれよ、俺がうまく言えなかったのがいけなかっただけ
69デフォルトの名無しさん
垢版 |
2023/04/03(月) 17:01:07.96ID:dGJwzzow
>>61
last_index_ofはlast occurrenceのindexを示すだけで検索方向を示すものでは無いと思う
2023/04/03(月) 17:14:21.15ID:WoF7SnyS
>>56 >>59
.indexed_pixel_mut も欲しいです
2023/04/03(月) 17:34:14.59ID:G+jJ6S+V
>>70
はあ?
indexed_iter_mutがあるのはndarray crateの話
enumerate_pixels_mutがあるのはimage crateの話
pixelのイテレータとrowのイテレータがあるためiterではなくpixelsおよびrowsと名付けている
>>56が無関係な両ライブラリをごっちやに取り上げてその意味も分からず批判しているだけにすぎない
2023/04/04(火) 09:48:59.96ID:1EmRTN+L
前スレを読んだ感想だが
Rustのvtableは1つに合成されているのがへーだった
ちなみにC++は各基底毎にある
https://i.stack.imgur.com/rK5xx.jpg
https://i.stack.imgur.com/TJ1k6.jpg
73デフォルトの名無しさん
垢版 |
2023/04/04(火) 09:57:45.04ID:WkDAaTBe
>>72
それ読み間違えてるぞ
74デフォルトの名無しさん
垢版 |
2023/04/04(火) 10:05:22.65ID:wMBLnZ/K
複オジメソッド発動
2023/04/04(火) 10:08:21.90ID:2Z9CTS/R
>>72
Rustは継承がなくトレイト合成なんだから当然だろ

>>73
間違ってはいないだろ
2023/04/04(火) 10:10:16.77ID:E2o8nJSl
まあ、ちゃんとキャストできるようにできてるというか
77デフォルトの名無しさん
垢版 |
2023/04/04(火) 12:04:39.20ID:4IMp+S71
何が間違ってるかは教えてあげない
2023/04/04(火) 13:10:25.87ID:I8oGyAYF
プッ
2023/04/04(火) 13:20:50.92ID:E2o8nJSl
C++を知ってしまったことかな。。
80デフォルトの名無しさん
垢版 |
2023/04/04(火) 14:47:11.16ID:NrMPyXSZ
日本人はtraitとtoiletの区別がつきにくい
2023/04/04(火) 17:52:01.37ID:N9reXox+
もうGPTがどの言語でも変換してくれる時代
82デフォルトの名無しさん
垢版 |
2023/04/04(火) 20:58:36.08ID:N+qd6aMB
rustのcrateはdependenciesで入るのが多過ぎるし大き過ぎるわ
要らないものまで無理やり入れさせられてる気分になる
83デフォルトの名無しさん
垢版 |
2023/04/04(火) 21:26:41.04ID:0Yk0tShF
依存crate問題が最大の弱点ではある
2023/04/04(火) 21:32:45.26ID:nnLBpR2L
node_modulesとどっちがヤバいかな?
2023/04/05(水) 15:18:19.83ID:MSpbiXL9
node_modules は -g で解決
86デフォルトの名無しさん
垢版 |
2023/04/05(水) 15:43:59.95ID:lwqbYnd2
dependenciesに5個程度指定するだけで
依存crateが100個近くになるのも珍しくない
nodeとは比べ物にならないくらいひどいよ
87デフォルトの名無しさん
垢版 |
2023/04/05(水) 15:47:38.76ID:lwqbYnd2
しかもビルドすると500~1GB超の容量使うからノートの内蔵SSDを使ってると残す必要のないのは積極的にcleanしないときつい
2023/04/05(水) 15:49:19.66ID:46QkPZge
そんだけファイルの読み書きするなら
IOの速度に影響されそうだね
2023/04/05(水) 15:55:51.93ID:/Rqy2YcF
マイコンでも大人気と聞いたんだが、どうなってるんだ
90デフォルトの名無しさん
垢版 |
2023/04/05(水) 17:07:48.56ID:rkWYEusf
容量使うのはインクリメンタルビルド用の中間生成物で配置するものとは違うよ
2023/04/05(水) 17:26:43.23ID:/Rqy2YcF
C++もPCHファイルを生成するとアホほどでかかったりするが…世の中うまくいかんな
2023/04/06(木) 14:03:59.93ID:sb5+vAgP
チンチン汁出るッ
2023/04/06(木) 15:09:52.63ID:jULmAo6w
C++なら明示的インスタンス化を使おうよ
使っている人をほぼ見ないけども
2023/04/06(木) 15:52:41.86ID:gPnWA/2r
こう書いておけば、インスタンス化した関数に、こんな風に溶け込むだろうな、とか思って書いてたりはする
時間があれば、生成コードを汗で確認する
びっくりするほどスパゲッティな出力になってて、びっくりすることがある まあ実力不足を痛感する瞬間
95デフォルトの名無しさん
垢版 |
2023/04/06(木) 18:12:44.37ID:un5AwFJZ
Cargo はゴミ
2023/04/06(木) 20:01:46.11ID:W1iP43mr
ぺたんこおっぱい
ぽっこりおなか
つるつるわれめ
2023/04/06(木) 23:30:16.81ID:ZIKOL9hh
>>94
クラスも構造体も使わずに書いているの?
2023/04/06(木) 23:35:22.20ID:gPnWA/2r
ああ、callで呼ぶようなものはなんでも関数って言っちゃうねつい
99デフォルトの名無しさん
垢版 |
2023/04/07(金) 00:17:10.35ID:u3jMtx4p
https://www.publickey1.jp/blog/22/ccarbon_languagegooglec.html
こちらはC++との互換性を重視しているらしい
Rustはこの先生きのこれるかな?
2023/04/07(金) 00:31:06.23ID:D4MDBVlu
そこにこれ載ってた
[RFC] Lifetime annotations for C++
https://discourse.llvm.org/t/61377

Rustは勝利した しかし、Rustはその勝利を独占できない
2023/04/07(金) 03:11:25.56ID:ZE3zxB0C
>>100
こう書いてあるね

提案された有効期間注釈に基づく静的分析では、C++ コード内のすべてのメモリ安全性の問題をキャッチすることはできません。
具体的には、すべての時間メモリの安全性のバグ (反復子の無効化によって引き起こされるバグなど) をキャッチすることはできず、
もちろん、有効期間注釈は空間メモリの安全性 (たとえば、C スタイルの配列の範囲外のインデックス作成) には役立ちません。
詳細な議論については、以下のRustとの比較を参照してください。
2023/04/07(金) 03:22:57.43ID:ZE3zxB0C
>>99
Rustを使えるならばRustを使ったほうが良いと明記されているね

ソース
Carbon公式FAQ
https://github.com/carbon-language/carbon-lang/blob/trunk/docs/project/faq.md#why-not-rust

Why not Rust?
If you can use Rust, ignore Carbon.
If you want to use Rust, and it is technically and economically viable for your project, you should use Rust.
In fact, if you can use Rust or any other established programming language, you should.
Carbon is for organizations and projects that heavily depend on C++
2023/04/07(金) 03:34:46.32ID:D4MDBVlu
>>101
-Wlifetime とかと組み合わせろってことじゃないん
スマポだけでは解けない課題にこれが要るんだろ
(勉強中なので)知らんけど
2023/04/07(金) 15:30:28.71ID:xzLK1vX9
動きました。ほんとうにありがとうございました。

use std::ffi::c_void;

#[link(name = "user32")]
#[no_mangle]
extern "stdcall" {
fn MessageBoxA(hWnd: *const c_void, lpMsg: *const u8, lpTitle: *const u8, flg: u64) -> u64;
}

fn main() {
let msg: &[u8] = &vec![65u8, 66u8, 67u8, 0u8];
let lpmsg: *const u8 = &msg[0];
let ttl: &[u8] = &vec![97u8, 98u8, 99u8, 0u8];
let lpttl: *const u8 = &ttl[0];

println!("{}", unsafe { MessageBoxA(0 as *const c_void, lpmsg, lpttl, 3) });
}
2023/04/07(金) 16:14:09.83ID:VHO1ouQx
>>103
知らないなら書くなよアホが
2023/04/07(金) 16:45:18.17ID:e9qg1mi5
>>104
こうしろよ
let msg: &[u8] = &vec![65u8, 66u8, 67u8, 0u8];

let msg: &[u8] = b"ABC\0";
2023/04/07(金) 16:51:51.07ID:e9qg1mi5
さらに*constにするならこれだけでいい
let msg: &[u8] = &vec![65u8, 66u8, 67u8, 0u8];
let lpmsg: *const u8 = &msg[0];

let lpmsg = b"ABC\0" as *const _;
2023/04/07(金) 18:04:16.50ID:D4MDBVlu
>>105
しらんがなw
2023/04/08(土) 02:42:49.64ID:6o1jJWCj
>>104
こっち使え
https://github.com/microsoft/windows-rs
https://www.youtube.com/watch?v=-oZrsCPKsn4
2023/04/09(日) 10:11:37.53ID:kqAFhzUx
Haskellでrustみたいに
型引数だけじゃなく型引数を引数に取るデータ型に対しても型制約書けたりできるんですか?
2023/04/09(日) 11:45:46.52ID:vz6m7/QT
逆では?
112デフォルトの名無しさん
垢版 |
2023/04/09(日) 14:32:11.00ID:pIxjloTA
>>110
もちろんできる
HaskellはRustにできないHKTもサポートしてる
2023/04/10(月) 12:58:57.54ID:AInS4/OD
HaskellはH言語に名を改めるべきだな
そしたら興味持つ奴がたくさん出てくる
2023/04/10(月) 13:12:23.09ID:dCIkFZZ7
「すごいH たのしく学ぼう」 という本が出版されるのか
2023/04/10(月) 15:02:02.71ID:mDAZdp8I
いやん、のび太さんのHaskell
2023/04/10(月) 15:30:45.65ID:lVeX+H98
はじめてのH
2023/04/12(水) 01:19:12.28ID:LloefAdv
https://i.imgur.com/qUbcNx0.jpg
2023/04/13(木) 18:14:06.57ID:HbYojT2c
100%検索引っ掛からねー糞がって話になるわ
2023/04/14(金) 11:40:41.31ID:UzCXU8/1
無能の内輪ノリで人口への膾炙が遅れただろその本の名前
キモいこと分かってないんだからそういうヤツラが使ってると思われる
日本でコケたのは本の題名のせいだ
2023/04/15(土) 02:05:35.34ID:OSkIS2HX
ChatGPTでいいじゃゆ
121デフォルトの名無しさん
垢版 |
2023/04/15(土) 09:46:37.00ID:PycfapTP
気が付くと unsafe {} 描きまくってるんだよなぁ orz
2023/04/15(土) 09:48:12.09ID:nVVXe4ml
>>118
Julia の二の舞だな

>>121
ほんそれ
2023/04/15(土) 10:48:22.69ID:8QIF2BQP
unsafeは甘え(自戒

C++の生ポも甘え(自戒
2023/04/15(土) 12:33:08.40ID:nVVXe4ml
mut 付け過ぎもあるかな
let hoge: &mut Vec<u8> = &mut vec![0u8; 256];
for i in 0..hoge.len() { hoge[i] = 255u8; }
の場合と
let mut hoge: Vec<u8> = vec![0u8; 256];
for i in 0..hoge.len() { hoge[i] = 255u8; }
の場合とか
2023/04/15(土) 14:12:22.83ID:YfadAR61
>>121
通常のプログラムの中にunsafeが出てくることはない
unsafeは本質的に新たな構造や仕組みをその原理部分のみ小さくライブラリ化して閉じ込めるときに用いられる
その場合も多くは再発明なので既存のライブラリを使えばよい
2023/04/15(土) 19:28:04.14ID:yvTdL9wg
現段階でRustを推している人は、「イノベーター」と呼ばれる人で、
『常に最新の情報をチェックしていて、新しい商品やサービスに対する興味を持ちやすいユーザーです。
「新しさ」に価値を感じているのが特徴で、商品の細かい性能や価格はそれほど気にしません。
「最先端」「革新的」などが感じられる商品を積極的に選ぶ傾向があります。』
ということで、「メリット」は余り考えなくて、最先端や革新的であれば
試す人達らしい。牽引役として重要だが、すぐ飽きると言われている。
2023/04/15(土) 19:33:25.66ID:yvTdL9wg
普及するには、その次に新し物好きなアーリーアダプターが重要らしい。
こちらは新しさだけでなくメリットも考慮して判断すると言われていて、
なおかつ影響力も大きいらしい。
イノベーターは恐らく説得力に乏しいから人を呼ぶ込む力が弱いかも。
2023/04/15(土) 19:33:29.98ID:8QIF2BQP
こんなとこ(スレ)に溜まる奴らだろ、ライブラリ内製でもしてんじゃねーの

あるいはガチ学習者。学生なら、車輪の一つや二つ、自分で磨いてみるもんだ
青春やり直してる大人も含む
2023/04/15(土) 19:36:01.37ID:yvTdL9wg
経験から言うと、余りよくない品物、本当は競合と比べてメリットが余りないもの
でも、一定の人は買ってくれる。そして、なぜかその人達は商品を高く評価する。
しかし、実際にはそれ以上進まない。
実は商品の競争力が本当は余り無くてもそういう人達は高く評価するから。
2023/04/15(土) 19:36:32.22ID:8QIF2BQP
あらら >>128 >>125

まあ、ガチ勢はコード書いてるよね
今ちょっと半田ごてに逃げてる俺も耳が痛いねw
2023/04/15(土) 19:38:31.04ID:yvTdL9wg
過去の例からすると、Rustは非常に限られた分野で普及が進むのかも知れない。
ただ、言語の場合は、プロには無料である事もそんなにメリットにはならないので
どこまでいくかは見通せない。
2023/04/15(土) 19:40:01.02ID:yvTdL9wg
マニアは、それ自体を楽しんでいるだけで、実用的な仕事に使うことは想定して
なかったりすることが多い。
Rustもそうなのではないか。
2023/04/15(土) 19:42:50.40ID:yvTdL9wg
>>128
そういう人は、ライブラリ作りも、作ること自体を楽しんだり、自慢や就職に
利用するためにやってるのではないか。また、そういう人には
「沢山の人に使ってもらえれば満足」
などという人も多い傾向がある。
2023/04/15(土) 19:51:35.04ID:yvTdL9wg
>>125
Rustのunsafeは効率を落とさない限りはライブラリ内部に閉じ込めることが出来
無い事があることが分かってる。
数学的な才能が無い人は、想像力が無いのでそれが分からない。
反論は不要。結論は出ているので。
2023/04/15(土) 20:02:07.05ID:yvTdL9wg
>>134
もしかしたら、マシン語を理解できないからそのことが分からないのかも知れないな。
「効率を落とさずに」
の意味がマシン語を知らないから分かって無い。
どういうことかと言えば、C言語では1クロックで書けるところが、
Rustだとunsafeをライブラリの中だけに閉じ込めるだけでは、
どうしても1クロックでは書けないことが有る。
2023/04/15(土) 20:24:11.46ID:fX0vt5Cu
Rustもご多分に漏れず
新しいC/C++チャレンジャーが現れて
忘れ去られるんだと思うよ
2023/04/15(土) 20:42:03.21ID:8QIF2BQP
Cは、広義の安全であることが実装者の責任と権限だけど、
そのために余計なステートメントを書かなくちゃいけなくて、
結局Rustのほうが全体ではステップ数がすくなくなる余地はあるぞ

なので、C/C++は、追いつき、追い越さなければならない
2023/04/15(土) 21:49:44.60ID:stEGFLky
クラウド世界トップシェアのAWSもRustで構築されているらしい

https://japan.zdnet.com/article/35183866/
AWD (Amazon Web Services)は、「Rust」を使っている大きな理由として、エネルギー効率の高さを挙げる。
AWSは早くからRustを採用し、Rust Foundationの創設にも携わった。
現在もRustの普及に熱心に取り組んでいる。

AWSのソフトウェアエンジニアで、Rustの普及に取り組む
Shane Miller氏と主任エンジニアのCarl Lerche氏の投稿によれば、
Rustはメモリー安全性を高め、セキュリティ関連の不具合を減らす役に立つだけでなく「エネルギー効率に優れている」。
Amazonは、2025年までにデータセンターの100%を再生エネルギーでまかなうという目標を掲げ、
データセンターの環境負荷の軽減に取り組んでいる。
Rustの採用はその一翼を担うという。

Rustで構築されたAWSサービスの例としては、
コンテナーアプリ用のサーバーレスプラットフォーム「Lamba」を支える「Firecracker」、
「Amazon Simple Storage Service(S3)」、
「Amazon Elastic Compute Cloud(EC2)」、
コンテンツ配信ネットワーク「Amazon CloudFront」、
LinuxベースのコンテナーOS「Bottlerocket」などがある。
2023/04/15(土) 22:30:48.74ID:8QIF2BQP
大いに主観が入るけど、もっと高級言語から来てる人も多いんじゃないかな
C++に巻き取りたいねえ、負けていられない
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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