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/26(日) 23:11:50.20ID:Tvo9Wvhs
そう書いていたら謎が解けた

>>235
> 1億/2 + 1億/3 + 1億/5 + 1億/7 + 1億/11 + … + 1億/9973 = 約2.5億の足し算で原理的には済むはず

これは1億✕(1/2 + 1/3 + 1/5 + 1/7 + 1/11 + … )だから括弧内は素数の逆数の和でlog log N
1億がNだから足し算の回数はO(N log log N)なのか
2021/12/26(日) 23:46:34.73ID:L9HJqboW
>>239
素数かどうかを調べるのは>>236が書いているように足し算だけで可能です
必要となる足し算の数は>>241が書いているようにO(N log log N)です
足し算平均2.5回は1億まで素数を列挙した時の話であって>>240が書いているようにNに対してわずかですが増えていきます
2021/12/27(月) 00:18:24.10ID:OK/wNcge
>>242
C言語でいいから加算で素数を求めるアルゴリズム書いてくれない?
2021/12/27(月) 08:37:12.33ID:vZ39sN8j
このスレで出てきているテレーターがよくわからんのだけど、wikipediaの定義と違うんかいな?
ttps://ja.m.wikipedia.org/wiki/%E3%82%A4%E3%83%86%E3%83%AC%E3%83%BC%E3%82%BF
2021/12/27(月) 09:31:03.72ID:2XZCOhTP
>>244
その日本語wikiは怪しいので英語のwikiを見るといい
2021/12/27(月) 13:29:55.23ID:ZyPtB7dw
100回繰り返すのと1億回繰り返すのとどっちがマヌケに見えるか、億という言葉を使えば賢く見えるのか?
億回繰り返さないと理解できないのか、汚コードRust相談室と化したC vs C++ vs Rustスレに未来はあるのか
2021/12/27(月) 14:18:09.83ID:Btn3kp2t
隔離スレに未来などあるわけあるか
2021/12/27(月) 18:22:06.83ID:/o/Y1bP3
>>244
実際のコード例で体験していくと理解が早い

例えばこの計算をしたいとする
>>235
> 素数でなければ1万以下の素数が約数として必ずあるから順に最大素数9973まで調べるだけでよい
> 1億/2 + 1億/3 + 1億/5 + 1億/7 + 1億/11 + … + 1億/9973 = 約2.5億の足し算で原理的には済むはず

コードは>>176の素数生成イテレータも使って以下のイテレータ4つの連鎖で求まる

let result: i32 = 素数生成::<i32>()
 .take_while(|&p| p < 10000)
 .map(|p| 100000000 / p)
 .sum();

途中のtake_while()は条件を満たす間だけ取るイテレータでこの場合は「1万未満」が条件
map()は変換するイテレータで「素数pを1億/p」へ変換している
最後にsum()で流れてきた1億/pを「全て足して」目的を達成

このように個々の単機能イテレータを複数組み合わせて連鎖させることでプログラミングできる
2021/12/27(月) 21:02:50.96ID:/sRDJTH0
まーたイテレータの定義をよくわかってないやつがヘンテコな説明しちゃう
2021/12/27(月) 22:13:30.95ID:h+0xE8z4
ヘンテコなとこに気がつけなかったんだけど、どのへん?
251デフォルトの名無しさん
垢版 |
2021/12/27(月) 23:21:22.61ID:N7w3YVE+
今どきの言語のイテレータは>>248で合っている
しかしC++のイテレータは低レベルでポインタを抽象化したものと考えたほうがいいので注意
C++にもようやくmap()に相当するものが入ったが他言語とは異なりtransform()という名前など使いにくい
今どきのプログラミングしたいなら素直にRustを使ったほうが便利
2021/12/27(月) 23:38:31.34ID:0wmEJTQl
>>250
イテレータとは何かを分かってない
用語の使い方見れば一目瞭然でしょ

分かってない人が書いた説明を読むよりもある程度査読されてる英語のwikiや各言語のリファレンス見たほうがいい
2021/12/27(月) 23:39:05.80ID:pyO9ra+c
この文中に>>入れる自作自演の同一人物の基地外Rustのくせはほんと気持ち悪い。また引用で > 使う
2021/12/27(月) 23:41:50.94ID:OK/wNcge
伝統的には値を生成するものはジェネレータと呼ぶわな
2021/12/27(月) 23:46:27.40ID:Bqcwp6fR
>>253
はちみつ病だからスルーしてさしあげろ
256デフォルトの名無しさん
垢版 |
2021/12/27(月) 23:49:02.66ID:N7w3YVE+
>>254
それは観点が違うな
値を生成するものであってもイテレータとして機能するものと機能しないものがある
つまり重要な点はイテレータとして機能するか否かのみ
Rustの1..nやこのスレの素数生成はイテレータとして機能しているから明白にイテレータ
2021/12/28(火) 01:27:16.67ID:iF4hooVM
ジェネレータはみんなイテレータだから
2021/12/28(火) 10:31:13.05ID:wyc7do74
やっぱり頭がおかしいよ、1..nはRange { start: 1, end: n }と同じ。Rust公式でもイテレータじゃなく
単にRangeと言っているだけなのに、それが機能するかという観点ならfor inが無ければ機能しないから
イテレータじゃない。collect()がイテレータをコレクションに変換するように、for inで(暗黙)変換されるだけ。
こいつ、あちこちで暴れてる
2021/12/28(火) 11:06:40.72ID:We8KhoPF
RangeはIterator実装してるからrustの定義ではイテレータではあるのでは
2021/12/28(火) 11:57:32.05ID:c+MbZA8y
汚コード厨まだ居るのか
2021/12/28(火) 12:05:42.28ID:SY7gTV8u
>>258
君もイテレータがわかってないお仲間さんなので仲良く勉強しとけ
2021/12/28(火) 12:13:02.75ID:SY7gTV8u
プログラミング初心者でもないのにイテレータを理解してないやつがRustスレに多いのはなぜ?
2021/12/28(火) 12:16:44.18ID:F00FUyP7
ここ本スレではなく隔離スレ
スレ民の目的はただの冷やかし
2021/12/28(火) 14:55:22.51ID:uwqQYFJJ
"仲介イテレータ"
約 2 件 (0.26 秒)

すげー、全世界で、このスレにしかその言葉は存在しない
2021/12/28(火) 15:25:43.05ID:c+MbZA8y
厨怪イッテレータ
2021/12/28(火) 15:44:45.74ID:WXYqKfV2
>>262
一番レスの多い自演厨が理解してないから、そう見えるだけ
2021/12/28(火) 16:37:20.65ID:a2iPSFXu
イテレータには狭義のイテレータと広義のイテレータがある
広義のイテレータは狭義のイテレータとイテレータメソッドを合わせたものである

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

(B) イテレータメソッド
Rustで言えば上述イテレータ(狭義)のメソッドとなるもの
コード上では「impl 宣言用トレイト for Iterator」の中で現れる
各イテレータメソッドが返す型は任意でありfor_each()のように無しもある
対象となったイテレータ(狭義)のnext()を利用する側となる

>>195
| (1) 発信イテレータ … >>174で示しました素数生成、レンジ(0..n)、配列やVecに対するiter()などチェーンでは先頭に来るもの
| (2) 仲介イテレータ … map()、filter()、enumerate()などチェーンでは中間に来るもの
| (3) 受信イテレータ … find()、fold()、collect()などチェーンでは最後に来るもの

その分類で言えば
(1) = (A) かつ not (B) = イテレータ(狭義)だが イテレータメソッドではない
(2) = (A) かつ (B) = イテレータ(狭義)であり イテレータメソッドでもある
(3) = not (A) かつ (B) = イテレータメソッドだが イテレータ(狭義)ではない
2021/12/28(火) 17:20:35.84ID:UIm7WL46
>>267
>広義のイテレータは狭義のイテレータとイテレータメソッドを合わせたものである
この定義のソースはどこ?
2021/12/28(火) 18:00:29.58ID:p0MyQfYl
素数生成君と仲介イテレータ君は同一人物だったのか
どおりで
2021/12/28(火) 22:24:23.54ID:ndrZKvgW
>>267
> Rustで言えばtrait Iteratorを実装するもの
これは無理矢理名前をつけるとすれば Iteratee と呼ぶべきでイテレーターではないのでは
2021/12/28(火) 22:25:36.06ID:t/L66bQ2
こいつ何度間違っても全く反省しないなww
良い子は鵜呑みにしないで自分で調べようね
272デフォルトの名無しさん
垢版 |
2021/12/28(火) 22:28:28.38ID:t/L66bQ2
あ、>>270のことじゃないからね
2021/12/28(火) 22:35:42.94ID:t/L66bQ2
>>270
詫びがてら説明しておくがイテレータは数えあげる人のこと

「次くれ」→ 「はい、どうぞ」
「次くれ」→ 「はい、どうぞ」
「次くれ」→ 「もうありません」

数えあげる対象物を数えあげる人自身が持ってる場合もあれば持ってない場合もある
impl Iteratorしてるのがイテレータなのは間違いない
2021/12/28(火) 22:49:58.47ID:a2iPSFXu
>>270
君の中ではそうなのかもしれないが
世間では>>267の(A)をイテレータと呼んでいる
そしてイテレータパターンでもnext()を持つものをイテレータと呼んでいる
したがって>>267の説明で正しい
2021/12/28(火) 23:41:11.95ID:c9bIiubz
出典もなしに能書き垂れるのやめろ
2021/12/28(火) 23:52:38.14ID:a2iPSFXu
デザインパターンの一つであるイテレータパターンの説明図 (wikipediaより)
https://upload.wikimedia.org/wikipedia/commons/c/c5/W3sDesign_Iterator_Design_Pattern_UML.jpg
next()を持つものがイテレータ
つまり>>267の定義で合っている
2021/12/28(火) 23:56:51.47ID:OoEjLphs
視野が狭く思い込んだら多くの人が警告しているのに完全に無視し「定義」だの仲介だの創造だの自分勝手に講釈を垂れる
2021/12/28(火) 23:59:15.51ID:a2iPSFXu
Rust公式Bookでも同じ

https://doc.rust-jp.rs/book-ja/ch13-02-iterators.html
全てのイテレータは、標準ライブラリで定義されているIteratorというトレイトを実装しています。
Iteratorトレイトを実装するには、Item型も定義する必要があり、
そして、このItem型がnextメソッドの戻り値の型に使われています。
イテレータに対して直接nextメソッドを呼び出すこともできます。
2021/12/29(水) 01:29:32.54ID:R7H13gAM
じゃ>>248が間違ってたんだね

素数生成イテレータ
take_while()イテレータ
map()イテレータ
sum()イテレータ
4つの単機能イテレータの連鎖で求まるだっけ?
2021/12/29(水) 02:02:16.54ID:8RYkbehC
>>267に照らし合わせると
上3つが狭義のイテレータ
下3つがイテレータメソッド(広義のイテレータ)
って感じかね
間違ってるとまでは言えまい
2021/12/29(水) 03:47:51.11ID:L3UdfSEZ
イテレーターの定義はIteratorを実装してる型で良いと思うがそれがどう C vs C++ vs Rust に繋がるのか
2021/12/29(水) 09:34:00.36ID:/J/UmHDr
>>280
そりゃ間違ってた本人の言い訳定義だからな
御本人さんよ
2021/12/29(水) 12:27:51.74ID:EOkSZQC4
イテレータメソッドというのは多くの言語では一般的にはイテレータを返すメソッドのこと
Java, C#, C++, JavaScript, Python, Ruby, Scala等々

RustではIterator Trait’s Methodsの意味で
“iterator methods”という言葉が使われるがこれは訳すなら”イテレータのメソッド”

Rustに限った話でもIterator Traitの個別メソッドを
”イテレータ”と呼んでるのはnext()を除いて聞いたことがないので
広義のイテレータを定義してるソースがあるなら提示してもらいたい
2021/12/29(水) 13:18:44.91ID:gOOeSowg
>>283
必死こいて言い訳のソースを調査中だから期待して待っててね
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
ドライバにクラスは必要ないからでは?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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