C vs C++ vs Rust Part.3

■ このスレッドは過去ログ倉庫に格納されています
2022/01/27(木) 22:19:47.56ID:avZQ9Wm7
闘え
※前スレ
C++ vs Rust
https://mevius.5ch.net/test/read.cgi/tech/1619219089/
C vs C++ vs Rust Part.2
https://mevius.5ch.net/test/read.cgi/tech/1639539350/
2022/01/31(月) 12:52:34.54ID:qlFEomu1
>>41
それは万が一あるとしても非同期スケジューラランタイム実装者の管轄
その利用者である一般プログラマーが引き起こすバグではないため関係ない
2022/01/31(月) 13:02:21.71ID:dnOSCP4X
> epoll_waitをブロッキングで使う場合でもタイムアウト設定すればハングアップなんてしないでしょ?
の話だぞ?
2022/01/31(月) 13:17:00.70ID:wgfsi16C
歴史って言葉持ち出してるんだしそんなしょうもない話じゃなくてもっと有名なエピソードなんじゃないの
2022/01/31(月) 13:24:49.76ID:HGCqFbKg
「Rustのタスクの欠点は?」

「プリエンプティブじゃないところ」

「プログラマーが注意すればいいだけだから問題ない」
2022/01/31(月) 13:35:30.64ID:qlFEomu1
そりゃepollやselect相当を自分で使っていてミスをすればイベントループがハングアップするのは当たり前
しかし非同期タスクのイベントループは非同期スケジューラの中にあって自分でepollやselectを扱わなくてよくなった
だから自分のミスでイベントループがハングアップすることはなくなった
それ以前の歴史では色々あったが状況が変わった
2022/01/31(月) 13:51:12.77ID:dnOSCP4X
はいはい、理想的な環境で羨ましいですね

これでいいかな?w
2022/01/31(月) 14:52:14.32ID:QZLkrRiL
メモリ開放忘れみたいなバグの話でしょ
そんなに引っ張る話でもないと思う
2022/01/31(月) 14:57:56.44ID:wgfsi16C
バグ耐性高めるためにタスクをプリエンプティブにしたいならすれば良いのでは
プログラマーのスタンスに合わせて適切な物を選べるよう選択肢は用意されてると思うが
何について言い争ってるのかよくわからない
2022/01/31(月) 15:37:58.82ID:UHXhumHV
GoやNode.jsが上手くいってる主因は非同期並行プログラミングのしやすさ
両者は方向性が真逆だけどそこが共通点で時代の要請
逆にC++が振るわないのは非同期並行プログラミングのしにくさ
その状況でRustが登場して非同期並行プログラミングのしやすい環境も装備されたという流れ
2022/01/31(月) 18:03:53.30ID:dLpRlGxR
>>49
タスクはプリエンプティブにはできないよ
スレッド使えって言ってるの?
2022/01/31(月) 18:33:21.76ID:fs07R1AL
>>51
そうじゃね?
2022/01/31(月) 18:56:25.41ID:UHXhumHV
Node.jsもプリエンプティブではないけど困っていない
タスクがプリエンプティブではないことを欠点だと主張する人は
欠点だという具体的な例を挙げてから主張すべき
2022/01/31(月) 19:02:29.41ID:wgfsi16C
>>51
そうだよ
ここで言うタスクはtokioやasync-stdの用語のタスクのことね
spawn_blockingでタスク生成すれば専用スレッドが割り当てられるので特定のタスク選んでプリエンプティブにできる (OSにタスクスイッチの制御を委譲できる)
2022/01/31(月) 19:03:44.27ID:wgfsi16C
>>53
spawn_blockingみたいなAPIが用意されてるのはプリエンプティブなタスクの需要はあるんじゃないの
そこを否定する意味が分からない
2022/01/31(月) 19:28:57.02ID:UHXhumHV
>>54
それはレイヤーが違う
まずOSスレッドは何をしようが常にプリエンプティブ
だからOSスレッド上で動いているタスクも途中で一時中断されたり再開されたりしうる
だからといってタスクをプリエンプティブだと言わないのはタスクの階層で話をしているため
タスクスケジューラに制御を戻さない限り他のタスクに切り替わらないため「プリエンプティブではない」と言われる

次にspawn_blockingで起動されるのもタスクの一つ
だからタスクスケジューラが管理するスレッドの中で動く
それがspawnだと一つのスレッドに対するキューに複数のタスクが割り当てられる
一方でspawn_blockingは一つのスレッドに対するキューにそのタスクのみが割り当てられる
それだけの違いであり両者ともにタスクスケジューラの管理下にあるタスクである
もちろん動作中も終了後もタスクとして同じ扱い

つまりspawn_blockingはプリエンプティブにするものではない
同じタスクでありスタックレスなコルーチンであることも同じ

>>55
その意見は成立していない
2022/01/31(月) 19:56:01.95ID:wgfsi16C
>>56
確かにプリエンプティブという用語を使ったのは適切ではなかったかもね
タスクがスレッドを占有するか他タスクと共有するか選択できると言い換えればよいかな
2022/01/31(月) 21:28:17.75ID:L8OnQfxN
>>54
最初からspawn_blockingで呼ぶべきだと誰もがわかるような処理だけじゃないよ

Goと同じでRustもそのうちプリエンプティブなスケジューラが作れるような機構を用意すると思うけどね
2022/01/31(月) 22:11:33.46ID:qlFEomu1
>>58
preemptiveは必要ない
シングルスレッドかつcooperativeなJavaScriptがNode.jsを含めて問題なく動作し成功している
2022/01/31(月) 22:59:08.63ID:UPbAych9
Rustってデータ競合を許さない、ってあたりが並列処理とめちゃくちゃ相性良いように見えるけど、
まだそういうスケジューラとか非同期ランタイムらへんの仕組みがちっとも枯れてないんだね
将来のデファクトがどうなりそうか、ってのはある程度見えてきてるのかな?
2022/01/31(月) 23:10:00.73ID:9ggC0jgK
>>59
tokioの開発者もasync-stdの開発者もそうは考えてない

a major source of bugs and performance issues in concurrent programs: accidental blocking.
https://async.rs/blog/stop-worrying-about-blocking-the-new-async-std-runtime/
2022/01/31(月) 23:16:15.33ID:UHXhumHV
>>61
それはすぐに廃止された
そして現在tokioもasync-stdもプリエンプティブを許すコードは存在しない
2022/01/31(月) 23:18:46.34ID:9ggC0jgK
>>62
知ってるよ
問題認識の話をしてるんじゃん
2022/01/31(月) 23:21:44.46ID:9ggC0jgK
Node.jsはタスク単位で高い信頼性が求められるシステムでは使われない
イベントループがブロックしたら他のタスクを道連れにしてプロセス丸ごと再起動する以外に対処法がないから
それもexecution managerできちんとモニタリングしてればの話

JSやNodeとRustとはポジショニングが違う
2022/01/31(月) 23:28:55.88ID:qlFEomu1
>>64
イベントループがブロックすることはない
何を言いたいのか意味不明
2022/01/31(月) 23:47:16.39ID:UHXhumHV
>>64
Node.jsまで否定し始めるとは発狂もほどほどに
2022/02/01(火) 01:18:54.05ID:NlOJHFhB
>>58
rustでプリエンプティブなタスクって実装できるのかね
goみたいなシグナルでスイッチする仕組みは使えない気がするが
68デフォルトの名無しさん
垢版 |
2022/02/01(火) 09:02:19.73ID:YxH4csZd
昔は標準で出来たのに「そういうのはライブラリでやればいい」って嘯きながら削除して、そのあと一生それが出来る標準ライブラリが登場しないいつものRust
2022/02/01(火) 14:23:13.43ID:fJKShZ3h
>>67
Cで実装できることはRustでも実装できる
もちろんRustにもプリエンプティブなスケジューラは存在する
Rustで書かれたプリエンプティブなリアルタイムOSもある

>>68
Rust標準にプリエンプティブなタスクであるグリーンスレッドがあったのは
Rust 1.0が正式リリース(2015年)となる以前Rust 〜0.9 の試行している時代
しかし重厚となりベアメタルもターゲットとするRustでは不適なため放棄
例えばGoの方法だと巨大なランタイムや個別スタックが必要など

そのためRust標準ではスタックレスで軽いタスクを提供
さらに加えてasync/awaitもサポートし現在の軽く便利な環境となった
2022/02/01(火) 15:14:51.45ID:7ZSm+F9e
あと5年寝かせれば使えるようになるかな
2022/02/01(火) 15:26:14.30ID:0bEAn4zq
別に今でもasync-stdを使えばええんちゃうか?
2022/02/01(火) 15:54:32.70ID:aP+3H5wQ
>>69
ユーザーランドでプリエンプティブなタスク実現するという話なんだけど
具体的にどのライブラリがサポートしてるの?
2022/02/01(火) 16:14:56.52ID:fJKShZ3h
>>71
async_stdでのプリエンプティブな試みは軽さの方針等に合わず、組み込まれないままで終わった

>>72
上記の後継がasync_stdから独立していてsmolscaleとなっている
2022/02/01(火) 17:44:48.05ID:IGt6++7z
>>72
lunaticってのがWASM限定だけどプリエンプティブ実現してるらしいよ
WASM以外はコンパイラのサポートがないと無理

>>73
async-stdがやろうとしてたのはプリエンプティブではないよ
75デフォルトの名無しさん
垢版 |
2022/02/01(火) 23:44:18.44ID:rLXhSAw+
話題になってる分野だとC++が惨敗すぎて
Rustの話題一色になってしまってる感じ
2022/02/02(水) 00:32:45.41ID:Bknypv+c
C++が落ち目なのはまっとうなエンジニアの間では共通認識だろ
2022/02/02(水) 02:30:31.45ID:YscELMZC
変な拡張し杉てワケワカになってきてるよな
78デフォルトの名無しさん
垢版 |
2022/02/02(水) 11:27:34.63ID:jvlsF+ng
変な拡張を使わなければ良いだけでは? 使いこなせないのを使えなとは言わない。
2022/02/02(水) 14:23:10.98ID:X76n4047
RustがGo位の位置にたどり着くのは、あと何年かかるかね
2022/02/02(水) 15:00:57.22ID:O+j3A95O
GoはWebとかのアプリケーションでカジュアルに使われるようになってきたから、使う人数もかなり多くなってきたけど、
Rustはそういうポジションにつくことないだろうから、現在のGoほどの人気になることはないんじゃない?
RustはC/C++のシェアを塗り替えていく程度だろうけど、そういう低レイヤーでは最強言語になりそう
2022/02/02(水) 15:03:25.91ID:6tF6MeYL
RustがTIOBE Indexに出てくるのはいつなんだろう?w
https://i.imgur.com/DNijd0h.jpg
2022/02/02(水) 22:30:37.00ID:yDHN0aKU
言語機能としてはC++が完敗だから
過去遺産しか誇るものがない
2022/02/02(水) 22:35:52.80ID:/PkFuWcg
何言ってんだこのバカ
2022/02/02(水) 22:46:31.08ID:J71gX0gE
シェアもユーザー数も過去遺産と言われてしまえばそうだが
そんなことは興味がないのでC++での非同期並行プログラミングについても語って欲しい
2022/02/03(木) 16:11:01.01ID:VWdjVpzZ
C++の非同期っていうとstd::asyncとか?
2022/02/03(木) 17:48:17.26ID:rBa0lj+C
>>81
今26位で、Kotlin, Lua, Scalaとかより上なんだが
2022/02/03(木) 17:52:10.90ID:6/rx3Wgr
>>86
COBOLより下なんかwwwww
2022/02/03(木) 18:30:47.00ID:VWdjVpzZ
KotlinやScalaは結局流行らずJavaで十分だし
Luaも一時期熱狂したけど記法や環境が多くの人の好みに合わずPerlのように嫌われてる
RustもC/C++で十分という認識が強くて普及せずに一部の通好みに終わる可能性がある
Rustは有力企業もプッシュしてるけど三つの言語の流行らない特徴を全て備えてる
そうこうしてるうちにRustより優れた言語がぽっとでて席巻する未来だってある
2022/02/03(木) 18:38:00.04ID:I6DodtQJ
流行るの閾値高くない?
何位以上になったら満足なんだ
2022/02/03(木) 18:48:22.27ID:Y+zgwr9T
普通にTop10じゃね?
2022/02/03(木) 18:51:38.73ID:OQgvAcI9
しかしTop10のVisualBasicやアセンブリが流行ってるとか言われてもあまり納得感はないな…
2022/02/03(木) 19:08:22.03ID:Ajxf7YAY
TIOBEってトレンドを計測してるわけじゃなくて、あくまで検索エンジンで検索結果のヒット数が多かったランキングだからな
CとかVBみたいに昔から一定の人気を保ち続けてるような言語がランキング高くなりやすいんじゃないかな
2022/02/03(木) 19:24:04.62ID:I6DodtQJ
GitHub上の活動に基づいたランキングの方がプログラマ間の流行を知るには良いのかな
https://madnight.github.io/githut/#/pull_requests/2021/4
2022/02/03(木) 19:40:42.80ID:NxnOaIbO
せやな
TIOBEはJavaScriptとアセンブラが隣の順位に並んでるとかおかしすぎるやろ
2022/02/03(木) 21:31:55.43ID:8HqROgrm
>>88
Scalaも当時は熱狂的なファンがいたよなw
2022/02/03(木) 21:44:00.20ID:OJ3iv254
ScalaはJVMベースだという点以外は特に悪いところは無いと思うんだが
2022/02/03(木) 23:27:45.66ID:VxNIdQ9k
コラッツ関数を上手く実装できないかな
2022/02/04(金) 00:31:37.55ID:tMDf8XuC
>>93
githubはアマチュアプログラマも沢山混じってる。
日経の調査ではプロのプログラマで最も使われている言語はC/C++だとされている。
なお、githubでも、CとC++を合算すると、9.82%、Rustは 0.694%で、
14.1倍の差がある。
2022/02/04(金) 00:34:29.27ID:uF1Qc9S6
>>98
C vs C++でもあるんだから足したらだめでしょ
2022/02/04(金) 00:35:47.48ID:tMDf8XuC
>>91
VisualBasicは結構使われているのではなかろうか。Excelなどで。
アセンブリは、基礎的なライブラリを作る人や組み込み、OS、BIOS
を作ったり、グラフィックや数値計算の高速化を行う場合に必要な場合がある。
2022/02/04(金) 00:36:35.60ID:tMDf8XuC
>>99
Cにクラスを入れたものとしてC++を使っている人は多いはず。
MFCなどもそう。
2022/02/04(金) 00:44:19.25ID:uF1Qc9S6
>>101
いやいや、スレタイ通りこのスレではCとC++は対立する物として区別すべき
2022/02/04(金) 00:45:03.38ID:zhkygWhI
今どき言語マウントするやつは
メンタルも技術力もアマチュア
2022/02/04(金) 00:47:42.81ID:tMDf8XuC
C++はCを基礎にしてるくせに、Cに歯向かって宿主を殺してしまう寄生虫みたいな
ことになってるからな。
2022/02/04(金) 05:41:15.73ID:3M0ClPfa
いまのc++の拡張がな
autoとラムダとdecltypeくらいでやめときゃいいのにあとでボツになりそうな仕様までモリモリに盛りやがって下手したらobjective-cみたいになりそう
なのにいまだにpropertyも実装されてないとか
2022/02/04(金) 06:48:54.05ID:GRC0hKFU
conceptsは許せる
2022/02/04(金) 08:29:55.22ID:rPvrWkyY
>>105
それほどへんなもの追加されてるか?
右辺値参照、constexpr、可変引数テンプレートは必要だしな
2022/02/04(金) 08:53:37.86ID:O81zVfQh
色々理解できない機能が増えて辛いんだろw
109デフォルトの名無しさん
垢版 |
2022/02/04(金) 09:58:17.78ID:nTZc+xED
conceptはむしろ必須だろうよ
2022/02/04(金) 10:06:51.33ID:xcjLhLWs
C++11移行では、変数定義で、
TYPE a = b;
の形式が非推奨で、
TYPE a{b};
が推奨になった。
これは、C/C++の今までの伝統を全否定している。
C++11以後は、宿主を殺すウイルス的な存在に成り下がった一例。
2022/02/04(金) 11:28:12.62ID:i2fLUlAL
http://hp.vector.co.jp/authors/VA000092/jokes/strup.html
すこ
2022/02/04(金) 11:33:17.83ID:O81zVfQh
>>110 みたいな爺さんは書き方変わるだけでアタフタw
2022/02/04(金) 12:53:41.07ID:6YwPoRaj
>>110
TYPE a{b};
↑これって何がうれしいの?
c++よく知らんので教えてほしい
2022/02/04(金) 12:55:43.71ID:m8EcUnam
コンパイラ都合じゃね?知らんけど
2022/02/04(金) 14:18:18.78ID:vKz9Nbsj
>>113
オブジェクトの定義に対して初期化子を与えると、オブジェクトの初期値を
決定することになるが、初期化子には次の4種類ある :
T a{b};
T a={b};
T a = v;
T a(v);
・このうち、あらゆる局面で利用できるのは、最初の T a{b}の形式のみ
 (なおこの形式はC++11で新しく導入された。)。
・一番大きな理由はこの形式は「縮小変換を許さないから」とされる。

ただし、ややこしいのが、Tの部分を autoにした場合は、T a{b}の形式は
落とし穴がされるので使うべきではないとされている。
なぜなら:
auto z1{99]; // z1は initializer_list<int>型になってしまう。
auto z2 = 99; // z2は、int型。

ところが、Tが具体的な型の場合には、T a{b} が推奨される:
int x1{99}; // 推奨される書き方。
int x1 = 99; // 縮小変換があるので推奨されない書き方。

全く一貫性が無く、C++11が駄目な部分の一つ。
2022/02/04(金) 14:21:57.65ID:vKz9Nbsj
>>115
[誤字訂正版]

オブジェクトの定義に対して初期化子を与えると、オブジェクトの初期値を
決定することになるが、初期化子には次の4種類ある :
T a{b};
T a={b};
T a = b;
T a(b);
・このうち、あらゆる局面で利用できるのは、最初の T a{b}の形式のみ
 (なおこの形式はC++11で新しく導入された。)。
・一番大きな理由はこの形式は「縮小変換を許さないから」とされる。

ただし、ややこしいのが、Tの部分を autoにした場合は、T a{b}の形式は
落とし穴が有るので使うべきではないとされている。
なぜなら:
auto z1{99]; // z1は initializer_list<int>型になってしまう。
auto z2 = 99; // z2は、int型。

ところが、Tが具体的な型の場合には、T a{b} が推奨される:
int x1{99}; // 推奨される書き方。
int x1 = 99; // 縮小変換があるので推奨されない書き方。

全く一貫性が無く、C++11が駄目な部分の一つ。
2022/02/04(金) 14:40:30.04ID:MGyBlJhW
ふーん、レガシー言語は大変だね
2022/02/04(金) 14:44:09.08ID:vKz9Nbsj
Rustはもっと最悪に汚い。
C++の最大の欠点は、仕様が難しいことに有るが、
Rustはさらに仕様が難しい。
よって、RustはC++をさらに悪くしたと言えて、改良には全くなってない。
2022/02/04(金) 14:54:48.13ID:WO7o5PWJ
ふーん、レガシー脳は大変だね
2022/02/04(金) 14:59:52.64ID:vKz9Nbsj
>>119
馬鹿は黙ってろ。
2022/02/04(金) 15:11:33.72ID:dFWqGnrm
つまり仕様が簡単な方が良いということ?
2022/02/04(金) 15:17:49.19ID:wTfQ05na
>>119
ばーかw
2022/02/04(金) 16:13:01.17ID:sAwXze1R
効きすぎだろwww
2022/02/04(金) 16:23:37.19ID:J8iEhnuL
c++は(ランタイム速度落とさなくても)できらぁ!ってなったらとりあえず入れるからな。
ある意味とてもガキくさいがそれはそれでありなポジションに到達してる気はする。
2022/02/04(金) 20:04:05.51ID:JLdS+NWr
そんな凄いんだったらもっと普及してるよねRust
でも現実はブビにもコボルにも負けてる泡沫言語
2022/02/04(金) 20:40:31.16ID:b3SZZj/4
単純に新しい言語だから累積となるユーザ数でまだ不利なだけ
2019年11月のasync導入で非同期プログラミングがまともに使えるようになってまだ2年余り
Linux OSのようにC++を頑なに拒否していたプロジェクトでもRustは受け入れられたように
C++に未来はないがRustには未来がある
2022/02/04(金) 20:44:24.76ID:JLdS+NWr
最後間違い
C++に未来はないがRustも未来はない
2022/02/04(金) 20:49:40.24ID:jGBmcDmC
日本は先進国の技術トレンドから5年以上遅れてるからね
2022/02/04(金) 20:53:24.16ID:rIsLZ1dN
C++erはレガシー脳が多いから

いい意味でのレガシーね
オリンピックレガシーみたいなw
2022/02/04(金) 20:54:41.42ID:aq7ZCAbr
C++はあんなみすぼらしいラムダ式用意して哀れやわ
貧乏の家の子が自家製ボタモチもって突っ立ってるようやわ
2022/02/04(金) 21:01:52.67ID:JLdS+NWr
Rustやってる奴は現状アーリーアダプターで普及するにしてもまだ年月掛かると思う
んでその間にまた新しい言語が開発されみんなそっちに移って行くと
2022/02/04(金) 21:06:34.54ID:3IKuZnie
新しい言語はどんな問題解決してくれるんだろうな
動的型付けが復権するんだろうか
2022/02/04(金) 21:15:25.28ID:V2NB9pIC
>>131
アーリーアダプターは数年前の時期
今は大手IT各社GAFAMがRustに本腰

プログラミング言語「Rust」のための「Rust Foundation」設立 -- AWS(Amazon)、Microsoft、Google、Mozilla、Huaweiが創設
https://japan.zdnet.com/article/35166267/
Facebook(現Meta)が「Rust Foundation」に参加
https://japan.zdnet.com/article/35170192/
2022/02/04(金) 22:59:18.87ID:ckxp+S+3
>>131
それならそれで無駄にはならない気がするが
考え方は継承されるだろうし
2022/02/05(土) 01:30:11.76ID:6GVIsHGT
SNS見てる限り、若い人でも人気は Rust より C/C++ の圧勝。
2022/02/05(土) 02:39:36.18ID:ye9/tceq
大学の課題とかはまあC/C++よね
2022/02/05(土) 06:15:36.04ID:LYyRCemg
>>133
RustはVisual studioでデフォルトで選択できるようになったら普及するだろうな
2022/02/05(土) 09:06:42.96ID:E0droKIF
北京五輪と東京五輪の開会式をプログラミングで例えるとどうなるやろ?
2022/02/05(土) 16:44:42.87ID:bofW+oE9
そのまま普通に
東京五輪 Rust
北京五輪 C++
2022/02/05(土) 17:35:54.33ID:O/WKZnIq
東京五輪 FAMILY-BASIC
141138
垢版 |
2022/02/06(日) 17:01:26.43ID:LMR3oS4I
ちょっとセンシティブな話だったか
与太話と思ってスルーしてくれ
すまんかった
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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