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/
結局C++とRustってどっちが良いの? 6traits
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2023/07/29(土) 15:05:46.55ID:2Hm/yplK2023/08/02(水) 00:36:41.42ID:NJTTLLY6
>>69
それはRustと全く関係ない問題
オブジェクトファイルはコンパイラと独立した存在
C言語だけの話でもclangとgccを当然併用できる
まず関数fooだけのfoo.cを用意
$ cat foo.c
#include <stdint.h>
int foo(int32_t a, int32_t b) {
return a + b;
}
これをclangでコンパイル
$ clang -c foo.c
オブジェクトファイルfoo.oが出来ている
$ ls foo.o
foo.o
つづく
それはRustと全く関係ない問題
オブジェクトファイルはコンパイラと独立した存在
C言語だけの話でもclangとgccを当然併用できる
まず関数fooだけのfoo.cを用意
$ cat foo.c
#include <stdint.h>
int foo(int32_t a, int32_t b) {
return a + b;
}
これをclangでコンパイル
$ clang -c foo.c
オブジェクトファイルfoo.oが出来ている
$ ls foo.o
foo.o
つづく
2023/08/02(水) 00:37:45.81ID:NJTTLLY6
次に関数mainのmain.cを用意
$ cat main.c
#include <stdio.h>
#include <stdint.h>
int32_t foo(int32_t, int32_t);
int main(void) {
int ret = foo(10, 20);
printf("ret = %d\n", ret);
return 0;
}
このmain.cをgccでコンパイルして(clangで作った)foo.oをリンクして実行ファイル生成
$ gcc -o main main.c foo.o
無事に足し算が実行できました
$ ./main
ret = 30
$ cat main.c
#include <stdio.h>
#include <stdint.h>
int32_t foo(int32_t, int32_t);
int main(void) {
int ret = foo(10, 20);
printf("ret = %d\n", ret);
return 0;
}
このmain.cをgccでコンパイルして(clangで作った)foo.oをリンクして実行ファイル生成
$ gcc -o main main.c foo.o
無事に足し算が実行できました
$ ./main
ret = 30
2023/08/02(水) 00:59:42.14ID:NJTTLLY6
clangとgccで上手くいった話は
rustcとgccにしても当然上手くいく
今度はRustで関数fooだけのfoo.rsを用意 (区別できるように掛け算に変えた)
$ cat foo.rs
#[no_mangle]
pub extern "C" fn foo(a: i32, b: i32) -> i32 {
a * b
}
念のためfoo.oを削除しておく
$ rm foo.o
そしてrustcでコンパイルしてオブジェクトファイル生成
$ rustc -O --emit obj --crate-type staticlib foo.rs
さっきと同様にオブジェクトファイルfoo.oが出来ている
$ ls foo.o
foo.o
再び全く同じくgccでmain.cをコンパイルして(rustcで作った)foo.oもリンクして実行ファイル生成
$ gcc -o main main.c foo.o
無事に掛け算が実行できました
$ ./main
ret = 200
つまりRustで書かれたコードとその生成オブジェクトファイルは
何の問題もなくgccでコンパイルしたC言語コードから呼び出せる
(もちろん逆向きもOK)
rustcとgccにしても当然上手くいく
今度はRustで関数fooだけのfoo.rsを用意 (区別できるように掛け算に変えた)
$ cat foo.rs
#[no_mangle]
pub extern "C" fn foo(a: i32, b: i32) -> i32 {
a * b
}
念のためfoo.oを削除しておく
$ rm foo.o
そしてrustcでコンパイルしてオブジェクトファイル生成
$ rustc -O --emit obj --crate-type staticlib foo.rs
さっきと同様にオブジェクトファイルfoo.oが出来ている
$ ls foo.o
foo.o
再び全く同じくgccでmain.cをコンパイルして(rustcで作った)foo.oもリンクして実行ファイル生成
$ gcc -o main main.c foo.o
無事に掛け算が実行できました
$ ./main
ret = 200
つまりRustで書かれたコードとその生成オブジェクトファイルは
何の問題もなくgccでコンパイルしたC言語コードから呼び出せる
(もちろん逆向きもOK)
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 日本の立場説明へ…外務省局長が北京到着 “台湾有事”首相答弁に中国反発 ★4 [煮卵★]
- 橋下徹氏「この喧嘩は日本の完敗」 台湾有事答弁めぐる外務省局長訪中で指摘「中国に怒られてご説明に伺った日本と見られる」 [muffin★]
- 【日本大使館】中国在留邦人は安全確保を [ぐれ★]
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 【野球】井端監督 大谷翔平、山本由伸らのWBCへの参加 「1日も早く返事ほしい」「待っててといっても、国内組が遅くなってしまう」★3 [冬月記者★]
- 習政権、高市首相への態度硬化 台湾有事発言で連日非難 中国 ★10 [ぐれ★]
- ホヨバゲーの日本版サービス終了をチラつかせるだけで日本人は中国に降伏せざるを得ないという現実 [523957489]
- あーーー喧嘩してえ
- 高市コイン、155円突破wwwwwwwwww [246620176]
- 焼き鳥屋で一番最初に食べる串
- 杉浦綾乃板って改名したほうがいいよな
- 高市早苗の中国問題、「オーバーツーリズムが解消されてウザい中国人が消えるから日本の勝ち」という風潮になってしまう [562983582]
