C vs C++ vs Rust Part.2

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2021/12/15(水) 12:35:50.91ID:biBE4xC0
競え
※前スレ
C++ vs Rust
https://mevius.5ch.net/test/read.cgi/tech/1619219089/
2021/12/29(水) 13:20:17.30ID:2nRAq0Kh
javaだと
public interface Iterator<E>
ここにあるメソッドをiterator methodsと読んでる人居るね
まあ単にイテレータのメソッドってことなんだけど
2021/12/29(水) 13:36:57.67ID:uJWdQe45
>イテレータメソッドというのは多くの言語では一般的にはイテレータを返すメソッドのこと

ググってみたがほとんど用例が見つからん。
2021/12/29(水) 14:15:53.78ID:cOaqDcVM
ばっかもーん!それがイテレータだ!定義しろ〜!
みたいな
2021/12/29(水) 15:32:20.47ID:mnKs3jeD
>>284
いいわけが見つからず
必死に話題そらしを始めるに1000ペリカ
2021/12/29(水) 17:12:35.25ID:EOas9tnv
発信イテレータ<Item=オレオレ定義>
290デフォルトの名無しさん
垢版 |
2021/12/29(水) 21:23:30.19ID:4Vgx4jRv
たしかに「イテレータメソッド」だと「イテレータ生成メソッド」を意味する用例もあり曖昧さがある
「の」を入れて「イテレータのメソッド」とした方がいいだろう

(A) イテレータ
trait Iteratorを実装するもの
コード上で「impl Iterator for 各イテレータが返す型」となって現れる
各イテレータが返す型は通常structでありimpl Iterator<Item=T>を満たす
メソッドとしてnext()を持ちこれがOption<T>を返す

(B) イテレータのメソッド
イテレータのメソッドとして機能するもの
コード上では「impl 宣言用トレイト for Iterator」の中で現れる
イテレータの各メソッドが返す型は任意でありfor_each()のように無しも可
対象イテレータのnext()を利用する側となる
291デフォルトの名無しさん
垢版 |
2021/12/29(水) 21:25:05.27ID:4Vgx4jRv
// 例: イテレータ CountUp
struct CountUp(isize);
impl Iterator for CountUp {
type Item = isize;
fn next(&mut self) -> Option<isize> {
self.0 += 1;
Some(self.0)
}
}

// 例: イテレータのメソッド average()
trait AverageMethod {
fn average(&mut self) -> isize;
}
impl<I: Iterator<Item=isize>> AverageMethod for I {
fn average(&mut self) -> isize {
let mut len = 0;
let mut sum = 0;
while let Some(n) = self.next() {
len += 1;
sum += n;
}
sum / len
}
}

fn main() {
let a = CountUp(0).take(99).average();
assert_eq!(a, 50);
}
2021/12/30(木) 00:04:05.78ID:MoU6yrVg
反応がないとうんこしたと流してない。不安に襲われるような感じ
2021/12/30(木) 14:31:45.54ID:Qz6d/gAR
>>291のイテレーターとメソッドをCやC++で実装することも可能ですか?
どんな感じのコードになりますか?
2021/12/30(木) 22:06:33.40ID:uQWTVZvM
Rustを勧めるとだけ言っておく
2021/12/31(金) 05:37:35.76ID:FgwbS9xc
ここにいるRust屋はC/C++が書けないってことがはっきりしている
2021/12/31(金) 06:22:24.67ID:0hDlQtG+
単純にC++が不得手な分野が多すぎ
Rustだと楽に書けるからこのスレに書かれているコードがRustばかりになっている
プログラミング言語としての優劣の違い
2021/12/31(金) 07:44:51.93ID:M33hR7ol
Rustだと楽にかける分野ってメモリ安全性関連以外ない気がする
2021/12/31(金) 07:51:10.24ID:FgwbS9xc
Rustはイテレータ作れる文法用意されててスゴイ言語ってことか
まあトイプログラム作るのに秀でた言語いじって喜んでるレベルじゃ
あらゆる分野のアプリケーションが書かれてきたC++の実績は理解できないだろうな
せいぜい不得意なことと言えばスクリプト言語で代用される分野くらいだろ
2021/12/31(金) 08:08:48.60ID:tc6fCfYn
>>297
パターンマッチがハマるプログラムは書きやすいと思う
言語処理系とか
2021/12/31(金) 08:23:51.96ID:M33hR7ol
>>299
なるほど
でもそれってc/c++でもenumと構造体か共用体組み合わせればできるよね?
2021/12/31(金) 08:33:21.86ID:BI8sFyN6
>>297
マルチスレッドは楽だと思うけどな
というかC++が辛すぎる
2021/12/31(金) 09:32:24.05ID:Lhm1MIug
>>300
できるできないの話じゃなく
どちらが楽にできるかの話をしてたんじゃないの?
2021/12/31(金) 10:43:31.43ID:faZP1uCu
C++20 からコルーチンが入ってジェネレータは割と書きやすくなったよ
とはいえイテレータのほうが従来通りのポインタ的用法に引きずられてるからなんともだけど
https://cpprefjp.github.io/lang/cpp20/coroutines.html
2021/12/31(金) 11:38:15.61ID:tc6fCfYn
>>300
c++でもできるけどenumの値とunionのvariantの組み合わせはプラグラマが意識しないといけない
rustだとmatch式のcond部分に値を書けばrust-analyzerがすべてのarmのスケルトンを作ってくれるから
穴埋めしていくだけで処理が書けて楽
2021/12/31(金) 12:10:32.68ID:M33hR7ol
>>304
まあrustの方がc++よりパターンマッチング楽なのは認めるよ間違いない
2021/12/31(金) 21:01:38.85ID:7OQCq2Au
C++と比べてRustだとメモリ安全にできるから、スレッドセーフなコードも誰でも書けるよ
そういったメモリ安全関連の利点がなきゃ存在意義のない言語だよね

書いたコードが高速に動作するかどうか、とかはまた別の話だけど
2021/12/31(金) 21:30:26.51ID:Cc3nB8ek
>>301
マルチスレッドの並列処理だけでなくシングルスレッドマルチタスクの並行処理も便利かつ安全に書けるところも

>>304
match式だけでなくletやif letでのデストラクチャリング&マッチングがある点も
一方でC++は多重構造の分解分配もダメでif letも値付きenumもないからほとんど何も出来ない
308デフォルトの名無しさん
垢版 |
2021/12/31(金) 21:55:39.97ID:2Zk/vij+
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1371r3.pdf
パターンマッチング構文が提案されてる。
2021/12/31(金) 21:55:45.65ID:0hDlQtG+
>>298
C++で書けることは全てRustで書ける
C++が優位な点は過去実績しかない
これは両方やればはっきりと認識できる
そのスクリプト言語的な記述や利便性がRustにあるという認識は正しい
かゆいところにも手が届くスクリプト言語という側面もある
310デフォルトの名無しさん
垢版 |
2021/12/31(金) 22:00:54.10ID:2Zk/vij+
Rustはスクリプト言語なのか。
2021/12/31(金) 22:02:16.06ID:tc6fCfYn
>>306
CやC++と同等の性能特性を持つ言語の選択肢は限られてるから安全性以外の理由でRustが採用されることもあると思うよ
2021/12/31(金) 22:03:31.93ID:XhcmshbG
Rustって循環参照安全に書けないんじゃなかったけ?
2021/12/31(金) 22:11:10.66ID:Cc3nB8ek
>>308
構文のアーム「=>」や後置のifガードなどRustのmatch式の後追いパクリw
それが仮に導入できても要である値付きenum(=タグ付き共用体)を持たないC++では活用に限界

>>312
曖昧すぎてどういう状況で何が書けないとの主張かわからないけど
C/C++で安全に書けることはRustでも安全に書ける
つまりRustで安全に書ける範囲の方が完全に広い
2021/12/31(金) 22:18:59.59ID:tc6fCfYn
>>313
C/C++にはRustでいうところの安全(⇔unsafe)はないから "C/C++で安全に書ける物" が何を意味するかわからない

そもそも >>309 の "C++で書けること" や "Rustで書けること" ってどう定義されるの?
2021/12/31(金) 22:24:28.60ID:tc6fCfYn
>>312
循環参照は安全に書けるよ
https://doc.rust-jp.rs/book-ja/ch15-06-reference-cycles.html
2022/01/01(土) 00:53:57.74ID:xczakg94
Rustのmatch式はScalaの後追いパクリw
2022/01/01(土) 01:00:44.48ID:193tzZ58
ML系のパクりだよ
https://doc.rust-lang.org/reference/influences.html
2022/01/01(土) 01:12:03.78ID:jvk1ETyF
プログラミング言語としての比較結果は明瞭

適用可能な範囲は同じかつ最速
いずれもGCがなく低レベル操作も可能
Rust = C++ = C

したがって勝負は他の点
コード記述が楽に簡潔に書けるか
Rust > C++ > C

安全なコードを書けるか保証できるか
Rust > C++ > C
2022/01/01(土) 01:22:01.85ID:193tzZ58
>>318
> いずれもGCがなく低レベル操作も可能
これはRustはnightly使うこと前提?
低レベルな機能についてはまだまだunstableなものが多いので少なくともstableなRustではC/C++でできること (処理系依存なものも含む) がすべてできるとは言えないのでは
https://doc.rust-lang.org/stable/unstable-book/

新たな(pre-)RFCも日々提案されてるし現状で十分とあぐらをかくべきではないと思う
320デフォルトの名無しさん
垢版 |
2022/01/01(土) 01:33:41.15ID:KzNGE8bI
ということは、RustはC++よりJavaと比較する言語なのでは?
2022/01/01(土) 01:41:42.07ID:193tzZ58
>>309
> C++で書けることは全てRustで書ける
を念頭に置いた話で "全て" は言い過ぎ、C++でないとできないこともあるだろうと言いたかった

CやC++の低レベル操作は Rust でも "だいたい" できて大抵のユースケースでは困らない
と言うのが正確だと思う

Java は GC あり VM 言語だから低レベル操作の観点でのRustとの類似度で言ったらCやC++の方が近い
322デフォルトの名無しさん
垢版 |
2022/01/01(土) 01:44:00.63ID:KzNGE8bI
メモリーの安全性を強調する言語と言えばJavaが筆頭に挙げられるのでは?
Javaは実行時最適化を行うのでC++より速いと主張されます。
この点もRustと酷似している。
323デフォルトの名無しさん
垢版 |
2022/01/01(土) 01:45:59.28ID:KzNGE8bI
JavaもRustもC++と比較した優位性を主張するのですが、JavaとRustならどちらが優れているのでしょう?
2022/01/01(土) 01:46:52.68ID:jvk1ETyF
>>319
勘違いしてないか?
それらのほとんどは既に別の手段でコードを書くことができるが更に利便性を高めようと検討されている機能だぞ
C++で言えば>>308提案のマッチングは現在できないがそれが無くとも別の手段でコードは書ける話

>>320
C++とRustは適用可能な範囲が同じ
Rustの記述性能が高いという違いしかない

>>322
Javaはガベージコレクションがあり適用可能な範囲が狭い
さらにヌルポインタ例外もありJavaはメモリ安全ではない
325デフォルトの名無しさん
垢版 |
2022/01/01(土) 01:50:45.71ID:KzNGE8bI
Javaは組み込みにも使われ、それどころかpico javaというJavaを効率よく実行できる組み込み用プロセッサのアーキテクチャ迄あるんですよ。
完全にRustと一致するじゃないですか。
実績を考えたらRustを完全に包含しています。
なぜJavaとの比較を嫌がるのですか?
326デフォルトの名無しさん
垢版 |
2022/01/01(土) 01:51:16.51ID:KzNGE8bI
もしかしてRustはJavaに負けているのですか?
2022/01/01(土) 02:00:04.72ID:LNkbwGBY
GCがあってデータ競合も起きないマルチパラダイム言語で、C,C++以上の爆速で動く処理系があるとするならそら優秀だろうと思うわ

Javaは実際にはそんなに爆速じゃないだろうし、データ競合の対策がしやすい言語とも思えんけど
328デフォルトの名無しさん
垢版 |
2022/01/01(土) 02:05:29.52ID:KzNGE8bI
活気があったころは、C++と比較して20倍速いと主張するサイトもありましたよ。
まさに爆速です。
Rustと似ています。
329デフォルトの名無しさん
垢版 |
2022/01/01(土) 02:07:14.76ID:KzNGE8bI
安全性という観点では、RustはHaskellと似ているように思います。
熱心なHaskellユーザーはコンパイルが終わればバグが無いことを保証されると主張します。
Rustと全く同じです。
2022/01/01(土) 02:10:16.54ID:jvk1ETyF
Javaを含めるとこうなる

安全なコードを書けるか保証できるか
Rust > Java > C++ > C

Javaはヌルポインタによる参照でエラー例外が実行時に起き得る
Rustはそれさえも起きない
したがって速さだけでなくメモリ安全の点でも Rust > Java が確定済
Javaが勝てる点がない
そのためJavaを捨ててRustへ移行するプロジェクトもある
331デフォルトの名無しさん
垢版 |
2022/01/01(土) 02:11:02.91ID:KzNGE8bI
Haskellもまた、C++と比較して優位性が主張されることの多い言語のひとつです。
しかし、JavaやRustと比較されることは一切在りません。
Java、Rust、Haskellでは、どれが最も優れているのでしょう?
332デフォルトの名無しさん
垢版 |
2022/01/01(土) 02:13:26.08ID:KzNGE8bI
でもRustはJavaより遅いですよね?
Javaは実行時最適化によりC++より20倍速いことがbenchmarkで判明していますよ。
10年以上も前に。
333デフォルトの名無しさん
垢版 |
2022/01/01(土) 02:15:29.86ID:KzNGE8bI
C++を改良したD言語もあります。
DとRustならどちらが優れているのでしょう?
334デフォルトの名無しさん
垢版 |
2022/01/01(土) 02:16:49.60ID:KzNGE8bI
出自からして、D言語もまたC++と比較して優位性が述べられる言語のひとつです。
しかし、RustやHaskellと比較されることは在りませんね。
どちらが優れているのでしょう?
2022/01/01(土) 02:25:43.18ID:jvk1ETyF
まずは決定的な違いを勉強しなさい
GCのない言語 Rust C++ C
GCのある言語 Java D C# Go Haskell Python Ruby JavaScript ...
336デフォルトの名無しさん
垢版 |
2022/01/01(土) 02:31:24.00ID:KzNGE8bI
>>335
GCの有無で何が変わりますか?
JavaやRuby、Pythonは組み込みにも使われますし、宇宙にだって行きます。
Rustよりずっと広範囲に使われています。
Rustで作られた実用的なソフトウェアはFirefoxしかないじゃないですか。
しかも、そのFirefoxだって熱心な信者以外誰も使わない。
それと比較したら、これらの言語は実用的に使われています。
GCが在ろうとなかろうと。
2022/01/01(土) 02:32:19.06ID:193tzZ58
>>324
大体代替手段があるのはそうだと思います
例えばnaked functionやglobal_asmは別途asmなりCなりからオブジェクトファイル生成してリンクするという代替手段があります (これがありならC-FFIできる言語は皆同等になってしまいますが...)

もともと C++ でできることは "全て" できるというかなり強い主張をされてた人がいたのでそれは言い過ぎじゃないかと言いたかっただけです


>>332
ご参考まで
https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/java.html
他の言語との比較もありますよ
2022/01/01(土) 02:33:17.91ID:LNkbwGBY
Rustのポジションに取って変わりたいなら、RustみたいにLinuxのKernelコードに取り込まれていってくれるとわかりやすいんだけどね
なぜC++を含む他の言語はLinux Kernelに採用されないのか、って考えると差が明瞭になってきそうだ
339デフォルトの名無しさん
垢版 |
2022/01/01(土) 02:34:00.98ID:KzNGE8bI
Firefoxのバグの多さを考えても、Rustはバグを生産する言語のように思います。
340デフォルトの名無しさん
垢版 |
2022/01/01(土) 02:35:06.26ID:KzNGE8bI
>>338
ドライバにクラスは必要ないからでは?
2022/01/01(土) 02:39:59.20ID:jvk1ETyF
>>336
RubyやPythonは遅すぎ&メモリ食い過ぎで話にならない
例えばクックパッド社はRubyで書かれていたのをRustへ置き換えて経費節減に成功している
2022/01/01(土) 02:42:24.09ID:193tzZ58
そういえば Windows 10にRust使う話ってどうなったんだろうか

>>336
以下の記事にメモリ安全な既存の言語ではだめでCやC++やRustでないといけない理由
それらの中でもRustが良いとされる理由が書かれていますよ
https://msrc-blog.microsoft.com/2019/07/22/why-rust-for-safe-systems-programming/
2022/01/01(土) 02:57:17.29ID:193tzZ58
>>339
FirefoxについてC++コードをRustに書き換えたらセキュリティに関わる脆弱性数がどうなるか分析した記事がありました
https://hacks.mozilla.org/2019/02/rewriting-a-browser-component-in-rust/
結論としては完璧ではないけどRustの方がバグを減らせるということのようです

MS ResearchやGoogleのAndroidチームも類似の調査をやっていてRust採用は効果有りと判断しているみたいです
344デフォルトの名無しさん
垢版 |
2022/01/01(土) 04:08:48.59ID:KzNGE8bI
JavaやHaskellも多くの人がC++より優れていると分析しています。
速く容易で安全なのです。
全ての点でC++を上回っています。
では、それらの言語を比較した場合、どれが最も優れているのでしょう?
345デフォルトの名無しさん
垢版 |
2022/01/01(土) 04:11:14.25ID:KzNGE8bI
ほとんどすべての言語がC++より優れていると主張します。
という事は、C++はもっとも劣った言語のひとつなのです。
Rustはもっとも劣った言語より優れていると主張しますが、優れた言語、例えばJavaやHaskellと比較したら、かなり劣っているのでは?
2022/01/01(土) 07:34:43.36ID:JYrmLBPV
多くの人がRustとC++と比較している
比較するなら優れたもの同士を突き合わせるはずだ
なのにJavaやHaskellは影も形もないつまり論外ってことだ
全ての言語がC++に対して優位性を主張するのも
C++が最も現実的で優れた言語だと認めているからであって
わざわざ劣っているものと比較する必要なんてないからだ
2022/01/01(土) 09:08:27.19ID:193tzZ58
>>344
JavaやHaskellがC++より常に高速というのは明確に誤りです
https://benchmarksgame-team.pages.debian.net/benchmarksgame/index.html

ではC++がこれらの言語より優れているかというとそうではありません
言語にはそれぞれ得手不得手があります
唯一絶対の尺度で優劣を決めようとするのではなく、ある特定の用途に対してどの言語が適しているかという観点で議論した方が生産的かと思います
348デフォルトの名無しさん
垢版 |
2022/01/01(土) 09:44:43.30ID:a+oD+kQK
スレタイ読め。
2022/01/01(土) 10:50:55.11ID:E1HNnq3M
いつもの人の自作自演
2022/01/01(土) 19:02:54.41ID:n4zdCVCH
GitHub・Cookpad などは、遅いRuby on Rails から、Go・Rust などへ移行している

2021年10月には、GitHubのコピーのGitLab が上場し、時価総額は約1.9兆円!
こんな大きい時価総額でも、Railsを使い続ける宣言をしている

基本、Railsは中小ベンチャーが、高品質なサービスを作るツール。
2億レコード・取引先が2万社みたいな規模でも、問題ないと言ってた

他には、組み込みのmruby の本も出た。
Webで使えるmrubyシステムプログラミング入門、近藤宇智朗、2020/11

宇宙開発などの組み込み用、MicroPython, Lua, Squirrel の代替になる。
Ubuntu 18.04, C99 対応

人工衛星イザナギ・イザナミで、使っている
351デフォルトの名無しさん
垢版 |
2022/01/01(土) 21:35:42.72ID:1mMbmyWc
C++もJavaも実行時にnull pointerによる参照が起きる可能性があるためどちらも安全性に劣るよね
Rustではenum Option使用でnull pointerによる参照が絶対に起きないことをコンパイル時点で保証した上で
コンパイル後は最適化でOptionがNoneの時にnull pointerを使うという二段構えにより
Rustはコストをかけずに無駄なく安全性の保証を実現しているところに感動した
2022/01/01(土) 21:45:09.34ID:s+QWpk3m
null安全ぐらいはモダン言語なら当たり前の機能なので、もはやメリットとは感じないわ
例えばTypeScript、Swift、Kotlin、Haskellとか
2022/01/01(土) 21:56:26.71ID:jvk1ETyF
C++とJavaが前近代的でダメな言語なだけだよな
354デフォルトの名無しさん
垢版 |
2022/01/01(土) 21:59:01.05ID:KzNGE8bI
Javaは速度を追求した言語だから。
355デフォルトの名無しさん
垢版 |
2022/01/01(土) 22:39:11.50ID:KzNGE8bI
Haskellは安全性と並列化を追求した言語です。
356デフォルトの名無しさん
垢版 |
2022/01/01(土) 22:58:31.22ID:1mMbmyWc
RustはHaskellの長所である型クラスをトレイトとトレイト境界で採り入れていたり
HaskellのMaybeモナドやEitherモナドを採り入れてRustの型の核としているところにも感動した
2022/01/01(土) 23:02:32.16ID:15i3uJ8f
システムプログラミングでCに代替となれるほどRustがイケてるのは、
null安全やメモリ安全はモダンな言語だから当然として、データ競合が起きないことも保証しつつ、実行速度もCに劣らなくて、
それでいてRustと多少のアセンブラだけ使えば、OSや組み込みソフトウェアも普通に記述できるほどフットプリントの小さい低レベルな言語だから
358デフォルトの名無しさん
垢版 |
2022/01/01(土) 23:08:54.95ID:KzNGE8bI
システムプログラミングにはJavaのほうが向いています。
単純に速いからです。
Javaは宇宙でさえ使われる安全で実績のある言語です。
しかも速い。
実行時最適化を行わない言語では無理な速さです。
359デフォルトの名無しさん
垢版 |
2022/01/01(土) 23:23:23.09ID:KzNGE8bI
結局RustはHaskellの真似をするだけの偽物言語にすぎません。
Haskellの並列性、安全保証を移植するには、結局Haskellになるしかないのです。
RustはいずれHaskellになるでしょう。
その時もまだRustと呼び続けるのでしょうか。
2022/01/01(土) 23:45:51.79ID:L78WNXLf
>>358
ねー、>>347 無視しないでよー
2022/01/02(日) 01:31:01.49ID:uZMhOgW6
rustのnull安全?はクリティカルコンテキストでも保証されるんか?
362デフォルトの名無しさん
垢版 |
2022/01/02(日) 02:22:18.22ID:TQn3/Mee
もちろんです。
2022/01/02(日) 08:42:35.10ID:/2Hc/nxf
現状でRustの欠陥は指摘なしなのか
まあ優れた言語だから主流になるとも限らんけど
ここはRust礼賛が多くて参考にならんな
2022/01/02(日) 08:43:38.07ID:i5Las0bb
>>360
キチの相手するならメールかなんかでやってくれ
2022/01/02(日) 12:04:39.89ID:7Z2MEM4u
キチの相手するスレやぞ
366デフォルトの名無しさん
垢版 |
2022/01/02(日) 14:18:19.00ID:TQn3/Mee
良いという人だって使ったことないんだから、欠点なんか出てこないよ。
2022/01/02(日) 14:52:25.82ID:gJq1EeIU
>>361
クリティカルセクションのこと?
2022/01/02(日) 19:27:00.77ID:ryp06yJk
int型(32ビット)でyy/MM/dd/HH/mmの形で日時を実装しているプログラムは、2022年1月1日0時0分(2201010001)に32ビットの最大値(2147483647)を越えてしまい、エラーが発生する。そういう実装をしているMicrosoft Exchangeでは既に問題が発生中。
みんな仕事始めになって気づいて大騒ぎに
2022/01/02(日) 19:33:55.23ID:3fzUeLHI
DosDateTime爆死確認w
2022/01/02(日) 20:28:27.33ID:yz2mFgPr
>>367
ハードウェア割り込みの割り込みコンテキストのつもりで書いた
社内独自用語なんだと思う
そこは気にせんでくれ
2022/01/02(日) 21:12:20.77ID:l2HAFLEV
>>361
Rustのポインタ(参照)および実体にはnull/nil/undefined等が一切ない
そのためnull問題が起きることはなく所謂null安全が保証されている

nullになる可能性がある場合は汎用のオプション型であるenum Option<T>型を用いる
このOption<T>はenumとしてSome(T)とNoneの二値を取り型Tは任意な型
つまり所謂NullはenumのNoneで表現され型Tとは異なるためnull問題が起きようがない

これで効率やコストはどうなるのか?
null(RustではNone)が使われない時は型Tのまま扱うので従来と同じ
null(RustではNone)が使われうる時は型Option<T>として扱う
型Option<T>から型Tを使うにはNoneでない確認が必要だがこれこそ必須な確認コスト
ポインタ(参照)の場合は値がnullすなわち0になることがないためコンパイル後はNoneが0で表現される最適化となる
つまり結果的にはC/C++と同じになるのだがRustは上述のようにコンパイル時点でnull安全を保証できる点で異なる
372デフォルトの名無しさん
垢版 |
2022/01/02(日) 22:09:32.73ID:TQn3/Mee
Javaのほうが安全。
373デフォルトの名無しさん
垢版 |
2022/01/02(日) 22:11:45.12ID:TQn3/Mee
ぬるぽ例外が発生するから安全じゃないとか言う書き込みがあった。
これはウソ。
ないほうが良いならCはヌルポを検出できないから安全って事になる。
Javaは検出して例外を発生させるから安全なのです。
キチガイに騙されるな。
2022/01/02(日) 22:18:47.48ID:i8dUNFkB
>ないほうが良いならCはヌルポを検出できないから安全って事になる。

発生したことを検出できないことと発生しないことを意図的に混同している
375デフォルトの名無しさん
垢版 |
2022/01/02(日) 23:11:16.20ID:TQn3/Mee
Firefoxの惨状を見れば全然安全でないことがわかるのに。
なぜ安全と言い張るのか。
2022/01/02(日) 23:20:08.47ID:Uu3cvt4h
CもC++もJavaも実行時にヌルポ発生するからいずれもダメ
Rustは実行時にヌルポ発生しないことが保証されているから安全
377デフォルトの名無しさん
垢版 |
2022/01/02(日) 23:22:44.87ID:TQn3/Mee
RustアンチがRustを称賛してるのではないか。
2022/01/03(月) 05:19:23.74ID:Tjf/rOJw
その可能性高いかも
2022/01/03(月) 06:00:15.35ID:V/HN/Yqp
学会が自らキチガイを演出する手口に栗卒
2022/01/03(月) 16:10:29.79ID:mJ9yMonw
RustはC++と同じ匂いがする
2022/01/03(月) 17:15:54.33ID:20WoIOil
このようにRustをやってる奴は性格が捻じ曲がってる
2022/01/03(月) 17:22:00.01ID:4XbgYwR9
rustってc++より難解だよな
こんな言語が流行るとは思わない
2022/01/03(月) 17:25:50.42ID:ZyFGqp6z
他の言語と比べればめちゃくちゃ難解だし、Rustコミュニティでもどうすれば簡単になるのかいろいろ議論されている
2022/01/03(月) 17:32:24.16ID:20WoIOil
ワイじゃないけど必死に褒めてるのにアンチだとか、ウジ沸いてる
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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