C vs C++ vs Rust Part.3at TECH
C vs C++ vs Rust Part.3 - 暇つぶし2ch950:デフォルトの名無しさん
22/04/06 09:29:13.74 OcEMaDN/.net
>>935
妄想で思い込みをして架空の意味のない話を進めて批判している
なんと愚かなことだろう

951:デフォルトの名無しさん
22/04/06 10:57:59.47 X0SajXCN.net
>>931
エラーになるよ
use std::{thread, time::Duration};
fn main() {
let v = vec![Box::new(1), Box::new(2)];
thread::spawn(|| {
thread::sleep(Duration::from_secs(100000));
let ptr = &v[1];
println!("{ptr}");
});
drop(v);
}
URLリンク(play.rust-lang.org)

952:デフォルトの名無しさん
22/04/06 11:01:15.13 BAnc7YwE.net
>>935
C++相当のコードか擬似コードでもいいからお前が言う操作のコードを出せ
スレッド間操作か参照の使い方周りでC++でもぶっ壊れるやつな
Rust使いの誰かがコンパイルの通しようがないって教えてくれるだろうよ

953:デフォルトの名無しさん
22/04/06 11:41:09.81 A9app5rs.net
>>397
それ、同じmain()スコープの中で宣言しているローカル関数だからでは?
普通、そんな書き方せんでしょ。
thread::spawnで起動している、無名関数を、引数ありの独立した関数として
定義して、参照渡しとしてスレッド実行した場合、コンパイル時の静的解析
ではエラー検出できない。

954:デフォルトの名無しさん
22/04/06 11:55:40.05 KqMgG2U/.net
流石にこのレベルの人を叩いて悦に入るのはやめようぜ

955:デフォルトの名無しさん
22/04/06 12:00:23.11 a0CdlgS1.net
>>939
意味不明だな
実際にそういうコードをわかるように書いてくれ

956:デフォルトの名無しさん
22/04/06 15:45:42.18 MueoLJZZ.net
thread::spawnには引数無しのクロージャしか渡せません
pthread_createとかで明示的にvoid *を渡すのに相当する処理は、Rustだとこの引数無しクロージャにキャプチャさせる方法で実現されます
で、それをやってるのが>>937です

957:デフォルトの名無しさん
22/04/06 16:11:31.38 Dn8F6G2j.net
>>924
VCいじってりゃ嫌でもforループ前の初期化バグにぶち当たるわ。
最適化オプション下げるとか、for内でやるのをやめるとかいろいろ修正方法はあるが。
むしろいままでコンパイラバグに当たらない方が不思議。
お前仕事してんのかって疑われるレベル。

958:デフォルトの名無しさん
22/04/06 16:23:15.68 2Jp54xD1.net
forループ前の初期化バグってどんなの?

959:デフォルトの名無しさん
22/04/06 17:07:47.57 X0SajXCN.net
>>931
こういうこと?これもエラーになる。
use std::{thread, time::Duration};
fn main() {
let v = vec![Box::new(1), Box::new(2)];
thread::spawn(|| sub(&v[1]));
drop(v);
}
fn sub(ptr: &i32) {
thread::sleep(Duration::from_secs(100000));
println!("{ptr}");
}
URLリンク(play.rust-lang.org)

ちなみにこれはコンパイルが通る
URLリンク(play.rust-lang.org)
これは通らない
URLリンク(play.rust-lang.org)

960:デフォルトの名無しさん
22/04/06 17:09:04.34 X0SajXCN.net
>>945
URL間違えた
コンパイル通るやつ
URLリンク(play.rust-lang.org)
コンパイル通らないやつ
URLリンク(play.rust-lang.org)

961:デフォルトの名無しさん
22/04/06 17:18:09.35 vFuVta1u.net
>>943
具体的に書けよw

962:デフォルトの名無しさん
22/04/06 18:45:31.77 A9app5rs.net
>>945
> こういうこと?これもエラーになる。
Rustの文法がよう判らんけど、おおむね合ってると思う。
ちなみに、C/C++だと大規模プログラム開発を想定して、ソース分割による分割
コンパイルや、ライブラリ化という仕組みがあるわけだが、Rustの言語仕様って
そのあたりどうなん?
例えば、スレッド関数「fn sub(ptr: &i32)」が、「fn main() 」を別のファイルに
(例: main.cpp, sub.cpp のように)実装してビルドするとか、スレッド関数の
「fn sub(ptr: &i32)」だけをライブラリ(dllまたはlib)化するとかできるの?
そもそも、Rust でライブラリを書いたり、Rust で書いたプログラムって、他の
言語で書かれたライブラリ(OpenCVとか)とリンクできるのか?

963:デフォルトの名無しさん
22/04/06 18:47:00.11 4TDuv4YW.net
pythonのライブラリとかgithubにいくらでもあるけど?

964:デフォルトの名無しさん
22/04/06 18:52:54.88 X0SajXCN.net
>>948
モジュール分割は普通に備えてる
というかC/C++のモジュール分割は貧弱な方で、大半の言語はまともな仕組み備えてるよ
Rustでライブラリ作ってCから呼び出したり、CのライブラリをRustから呼び出すこともランタイムとかめんどくさいこと考えずに普通にできる

965:デフォルトの名無しさん
22/04/06 22:27:56.00 MiVqlX0M.net
Rustのモジュール分割はC/C++の分割コンパイルとはちょっと違う気がする
C/C++だとソースファイルごとにコンパイルしてオブジェクト(.o)作ってからリンカでまとめるけど
Rustは最初にcrate内のソースを1つにまとめてから一気にコンパイルする感じ
(見えない部分で分割してるっぽいけどソースファイル単位じゃないしプログラマは意識しない)
C/C++の.dllとか.libに対応するのはRustだとcrateになるからsubだけライブラリ化するなら
ファイルを分けるというよりプロジェクト(crate)を分ける感じになるかな
C/C++の.oに相当する中間ファイルはRustだと存在しないはず

966:デフォルトの名無しさん
22/04/07 06:01:34.50 yfLrBpxG.net
いやgolangよりCとの相互利用はマシだけど、褒められるほどRustにCとの互換性はないよ。Dとかのほうがまだまし

967:デフォルトの名無しさん
22/04/07 07:14:19.71 Ug2bY/ov.net
RustとC++の相互呼び出しはCXXで完璧や

968:デフォルトの名無しさん
22/04/07 07:28:15.01 G2jE/Lgc.net
ぶっちゃけモジュール分割がなんでよしとされてるのかがわからない
過大評価やろ
parseにオーバーヘッドあると言われているけどC/C++のような分割コンパイルの方が並列化できるしええやん

969:デフォルトの名無しさん
22/04/07 09:21:09.02 0q4aQzv/.net
C++にはモジュール導入したいという
話はずっと前からなかったっけ

970:デフォルトの名無しさん
22/04/07 09:32:06.83 jLJRe/XC.net
分割コンパイルはgenericsとかtemplateと相性が悪いんだよね(C++の悩みの種になってるはず)
Cの時代のマシンパワーだと最適解だったと思うけど
Rustの
// main.rs
mod foo { pub fn f() {} }

// main.rs
mod foo;
// foo.rs
pub fn f() {}
を等価とみなせる言語設計は分かりやすくて余計な悩みが少ない

971:デフォルトの名無しさん
22/04/07 12:15:13.87 Fr57TkZu.net
>>951
ちょっと調べてみたが、RustってFlutterと同様、結局のところ単なるコンパイラ
コンパイラ(Rust→C++, Dart→C++)じゃんよ。
だから、どちらもターゲットプラットフォーム用のC++コンパイラ(Windowsなら
Visual Studio(Build Tools)または MinGW、macOSならXcode)が要る。
> C/C++の.oに相当する中間ファイルはRustだと存在しないはず
隠蔽されているだけで、vclやgccが動いてリンカーに渡す段階で、オブジェクト
ファイル(.oや.obj)が生成されている。 スタティックライブラリ(.aや.lib)は、
単なるオブジェクトファイルの寄せ集めなので、他のOSS含めてリンクできる。
オブジェクトファイル自体に対応していなけりゃスタティックライブラリをリンク
できないし、ELFフォーマットのデバッガも使えないし、malloc()等のランタイム
との内部整合性も取れないからな。
自転車に乗れない(C++で安全なプログラムが書けない)プログラマ向けの補助輪
みたいなもんか?

972:デフォルトの名無しさん
22/04/07 12:27:13.60 lezm9YBI.net
>>957
前半は何言ってるのかわからんが
codegen unitごと.oファイルが生成されるのはその通り
codegen unitはソースレベルのmoduleごとに2つずつ作られcodegen単位で並列化される

973:デフォルトの名無しさん
22/04/07 12:32:34.52 HPvPKplB.net
>>957
デタラメすぎる
RustコンパイラはCコードやC++コードを生成しません
あなたの書いていることは全て間違っています

974:デフォルトの名無しさん
22/04/07 12:44:03.67 jLJRe/XC.net
>>957
main.cに対応するmain.oが存在しないという意味で書いたつもりだった
混乱させたみたいですまない

975:デフォルトの名無しさん
22/04/07 12:45:05.63 pUyNlzjX.net
>>957
補助輪、というより電動機かな
同じ自転車だけど、少ない力でこげる
結果的に同じ体力でより遠くへ行ける

976:デフォルトの名無しさん
22/04/07 13:35:54.27 tEZE72Zs.net
Rustやる気ないとか言う割にはずいぶんと熱心じゃん
The Bookあたりから読み始めてみては?

977:デフォルトの名無しさん
22/04/07 13:49:05.41 Fr57TkZu.net
>>959
> RustコンパイラはCコードやC++コードを生成しません
だったら、Visual Studio (Build Tools)や、Min-GW、Xcode等がインストール
されていない環境で、Rustだけをインストールしてバイナリ生成してみな。
下請けにプラットフォーム固有のC++コンパイラを使っているから、ターゲット
プラットフォーム毎に、オフラインインストーラ―が存在するんだよ。
URLリンク(forge.rust-lang.org)

978:デフォルトの名無しさん
22/04/07 14:01:29.41 tEZE72Zs.net
>>963
それはできない
ただしその理由はコンパイラを下請けとして利用しているからじゃなくて、リンカを下請けとして利用しているからだよ
> Why might one not want to install using those instructions?
> * Offline installation. ...
斜め読みしすぎじゃないですかね?
オフラインインストーラがあるなんてどこに書いてある?

979:デフォルトの名無しさん
22/04/07 14:32:47.76 0q4aQzv/.net
空想上のRustに似た言語叩きする人多いな

980:デフォルトの名無しさん
22/04/07 14:49:00.36 DqPGONrT.net
LLVMを知らないんだろ
もう引退するお年頃

981:デフォルトの名無しさん
22/04/07 15:03:24.56 cqCq8D8c.net
5chに常駐してるようなC++民はビックリするほど見識が狭いよな
ある意味コボラーと同じ人種

982:デフォルトの名無しさん
22/04/07 15:09:08.48 Fr57TkZu.net
> オフラインインストーラがあるなんてどこに書いてある?
折角リンクを貼ってやったのに英語読めないの? 「Standalone installers」って
とこ。
> The official Rust standalone installers contain a single release of Rust,
> and are suitable for offline installation.
その下にリンク集の表があるでしょ。 以下、直リンク抜粋
Windows+GCC(32-bit)用
URLリンク(static.rust-lang.org)
Windows+MSVC(32-bit)用
URLリンク(static.rust-lang.org)
Windows+GCC(64-bit)用
URLリンク(static.rust-lang.org)
Windows+MSVC(64-bit)用
URLリンク(static.rust-lang.org)

983:デフォルトの名無しさん
22/04/07 15:34:45.27 wO4kVij8.net
>>968
それは単にプラットフォーム毎にビルド済みのRustコンパイラと標準ライブラリが違うだけ
いずれにしてもC++に変換してC++コンパイラを使ってるなんて事実はない

984:デフォルトの名無しさん
22/04/07 15:35:55.43 tEZE72Zs.net
>>968
ああそこはこちらの勘違いでしたね
すみません

985:デフォルトの名無しさん
22/04/07 15:55:01.85 gcjUoiEr.net
ちんちんシュッ!シュッ!シュッ!

986:デフォルトの名無しさん
22/04/07 18:28:45.48 6J24GmAj.net
>>954
クソデカヘッダファイルのパースコストは馬鹿にならないよ
コンパイラはプリコンパイル済みヘッダファイルを用意したり、涙ぐましい努力をしている
>>957
rustが必要としてるのはVS Build Toolのリンカやランタイムで、コンパイル自身はrustcというかLLVMがやっている
vclは動かないよ

987:デフォルトの名無しさん
22/04/07 22:11:21.15 cJXUldxb.net
Rustの集大成と言えるFirefoxが世界で一番固まるブラウザとして名高いのだから、ユーザーに嫌がらせしたいプログラマはRustを使うべき。
タブレットモードで使ってると毎日一回は操作不能になるからね。
電源ボタン長押しして強制リセットするしかなくなる。

988:デフォルトの名無しさん
22/04/07 23:12:28.96 6mRJTF59.net
>>963
コンパイラとリンカを一緒くたにされてもなぁ。
それ言ったらc/c++も結局アセンブラ必要じゃん。
c/c++なんてアセンブリ言語使えない奴向けの補助輪じゃん。

989:デフォルトの名無しさん
22/04/07 23:26:31.11 YR3mJewM.net
そいやRUSTってオプションでアセンブラ出力させたり出来るの?

990:デフォルトの名無しさん
22/04/07 23:27:28.73 YR3mJewM.net
>>973
まだservoとかだけでしょ?

991:デフォルトの名無しさん
22/04/08 00:19:49.85 PcnkB3on.net
>>973
アプリケーションのせいで電源強制断を要求されるのはOSが悪いのでは...
というのはさておきfirefoxの悪い部分がrustに依るものってのはどうやって調べたの?

992:デフォルトの名無しさん
22/04/08 01:42:20.81 uV0lTSE5.net
それにマジレスするか

993:デフォルトの名無しさん
22/04/08 06:18:52.60 8k2J9S8r.net
>>973
もしそれが本当ならばWindowsでの問題でしょう
LinuxでFirefoxを使っているけど一度も固まったことがない

994:デフォルトの名無しさん
22/04/08 07:35:26.61 UBiXicJa.net
俺はwindowsでEdge使ってるけど一度も固まったことないな

995:デフォルトの名無しさん
22/04/08 07:40:49.60 OhTsNUjo.net
Rustを叩くために>>973が適当なホラを吹いてるのだろう
毎日固まるブラウザなんてあるわけないし
頻出するバグがあったらすぐに修整される

996:デフォルトの名無しさん
22/04/08 07:57:10.73 phXvIdWB.net
そもそも>>725が書いてるけどrustはまだ全体の1割位しか使ってないのにrustの集大成とかアホ晒しすぎw

997:デフォルトの名無しさん
22/04/08 08:00:48.24 Z05AA1u1.net
firefoxは固まるもの。
固まったところで誰も気にしない

998:デフォルトの名無しさん
22/04/08 08:02:17.06 cn2WsGzN.net
>>983
どんな環境で使っている?
一度も固まったことない

999:デフォルトの名無しさん
22/04/08 09:36:43.82 gFm4wviN.net
>>982
登場して10年で1割ですか。100年後もfirefoxが動いてるといいですね。

1000:デフォルトの名無しさん
22/04/08 09:59:58.15 Fa4rer7L.net
既に昔からある動いているモジュールを書き換える無駄なことはしないからそんなもんじゃね?
そもそもRust自体も他の言語と同様にlibc含めて鉄板のC製ライブラリ使いまくるしな
どの言語でもそのへんは同じだろ

1001:デフォルトの名無しさん
22/04/08 14:54:35.66 aIPGNTn3.net
firefox は固まるっていうかメモリリークだな
rust のコードが unsafe だらけになっているのかは知らんが
タブを閉じても使い終わったメモリを開放しない
ひたすら使用メモリが増え続けswapがいっぱいになって固まる

1002:デフォルトの名無しさん
22/04/08 14:59:41.50 LPi7J7jk.net
>>987
両方を使ってみればわかるが
メモリをバカ食いするのはChromeの方

1003:デフォルトの名無しさん
22/04/08 15:37:14.24 aIPGNTn3.net
>>988
自分は firefox で swap に悩まされてて
その後 chromium 系の vivaldi とか brave にして一気に快適になった
メモリ4Gのマシンに linux 64bit を入れてた時の話だけど

1004:デフォルトの名無しさん
22/04/12 07:13:47 i2DHgPAx.net
firefoxのせいで、スレまでの流れまで止まったな

1005:デフォルトの名無しさん
2022/0


1006:4/15(金) 14:27:51.53 ID:sD2CwuNi.net



1007:デフォルトの名無しさん
22/04/15 14:38:25.40 sD2CwuNi.net
>>987
通信障害起こしてるのをfirefoxのせいにされてもなww
firefox使ってる最中に固まったことあったよ
使ってる最中にSSDが死んでアクセス不能になったのが原因だった

1008:デフォルトの名無しさん
22/04/15 15:14:39.30 k/yGxJzN.net
>>991
ちがうよ
rustでのビルド必要なのはターゲットプラットフォーム用のリンカであってC++コンパイラは不要
RustはLLVM使ってるからLLVM bitcodeへのコンパイラとは言えるかも知れないけどC++は一切関与しないよ

1009:デフォルトの名無しさん
22/04/15 17:33:35.75 k+WJVc0v.net
>>991
バカそうなやつ

1010:デフォルトの名無しさん
22/04/15 20:07:09.22 sD2CwuNi.net
リリースされて10年経過する言語に思いを寄せてるのは馬鹿の骨頂だろwww
お前といっしょでもう終わってんだよハナタレ
せめてIARあたりがリリースしてたんなら話は別だがな
どこぞのチップメーカでrustコンパイラ出してるとこあったけ?
チップメーカが見向きもしない言語それがRust って認識でFA?
あ、そーそ、SystemC rustで書けるか?
これぐらい書けなきゃC++はreplaceできない
C++をreplaceが目標じゃなかったっけ?

1011:デフォルトの名無しさん
22/04/15 20:14:02.55 sD2CwuNi.net
大体
Rustなんてネーミングがセンスなさすぎだろ。あほすぎて。これで洒落たつもりかよ。
これからぴかぴかの新製品投入するときにRustてwwww
機械メーカなら絶対採用したくい名前だろこんなもん

1012:デフォルトの名無しさん
22/04/15 20:26:31.06 k/yGxJzN.net
>>995
LLVMって知ってる?

1013:デフォルトの名無しさん
22/04/15 20:35:07.13 k+WJVc0v.net
>>996
確かに

1014:デフォルトの名無しさん
22/04/15 20:37:43.23 tyfulKnM.net
というか何故か言語って大概ネーミングに疑問符がつくような感じだよね

1015:デフォルトの名無しさん
22/04/15 20:38:50.95 sD2CwuNi.net
rustてさび以外に
"役に立たない"
て意味もあるのな
まさに、理念のみの
 役 た た ず 言 語

1016:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 77日 22時間 19分 4秒

1017:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch