◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

C vs C++ vs Rust Part.3 ->画像>1枚


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/tech/1643289587/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

1デフォルトの名無しさん2022/01/27(木) 22:19:47.56ID:avZQ9Wm7
闘え
※前スレ
C++ vs Rust
http://2chb.net/r/tech/1619219089/
C vs C++ vs Rust Part.2
http://2chb.net/r/tech/1639539350/

2デフォルトの名無しさん2022/01/27(木) 22:28:23.63ID:4DQKoSsj
前スレまでのあらすじ

---
987 デフォルトの名無しさん sage 2022/01/27(木) 17:14:15.89 ID:hWkHkx2k
>>986
> だから専有機なら上限で用いる
「現在の主流」というのは、「専有機」での話?
それとも一般的な話?

994 デフォルトの名無しさん sage 2022/01/27(木) 17:52:30.63 ID:LojT3k5n
自分が理解できないと相手が敵かつ全て同一人物に見える病気のパターンかねw
皆普通に同じことを指している
何が理解できないのか素直に言ってごらん

995 デフォルトの名無しさん sage 2022/01/27(木) 17:55:13.00 ID:hWkHkx2k
>>994
>>987の質問に答えてから続けてね

3デフォルトの名無しさん2022/01/27(木) 22:58:22.92ID:37eem+FW
あらすじが全くわからんw

4デフォルトの名無しさん2022/01/27(木) 23:13:49.64ID:cK3g3Gve
彼はこの部分がわからなくて連投していたみたいだから横から補足説明しましょう

> 大雑把にI/O観点で二つに分けると
> 昔は同期I/Oでブロックされるからマルチスレッド
> 今は非同期プログラミングでスレッド数はシングルからCPUコア数が上限
> RustのFutureタスク、GoのGoルーチン、JavaScriptの非同期Promiseやコールバック
> いずれもプロセス内スケジューラがI/O多重化(select/epoll)やタイマーなど管理して非同期プログラミングを支えている

昔は自分でOSスレッドを立ち上げて使っていたのに対して
今は自分で立ち上げるのがOSスレッドではなくそれよりも粒度が細かく軽い非同期なタスクで
OSスレッドを立ち上げる役割はそれらタスクの非同期なスケジューリングをするランタイムで
そのスレッド立ち上げ個数は効率最大のためCPUコアスレッド総数と一致するのが望ましいため
GoやRustなどではデフォルト値がそうなっていますよってことですよね
もちろん個数を1個つまりシングルスレッドに設定しても動くところが決定的な違いですね

OSがスケジューリングしてくれるけど重くて大きくリソースを喰うOSスレッドを今は直接使わずに
> RustのFutureタスク、GoのGoルーチン、JavaScriptの非同期Promiseやコールバック
これらのもっと軽くて小さなタスクを使うことで何万も同時に処理できるようになったという話ですね

ちなみにRustでは昔と同じ状況にスレッドとタスクを1:1(=n:n)でも使えますし
シングルスレッドにして1:nでも使えますし上述の状況は汎用的なm:nになりますね

5デフォルトの名無しさん2022/01/27(木) 23:14:48.99ID:fMPJxSq8
明らかに間違ってることを自信ありげに語るのはいつものこと
その人達用の隔離スレだから

>>1

6デフォルトの名無しさん2022/01/27(木) 23:25:15.10ID:iujD8pk9
横から?w
本人だろ、お前w

7デフォルトの名無しさん2022/01/27(木) 23:31:40.86ID:m/Awlcjw
複製おじさんのいつもの自演です

8デフォルトの名無しさん2022/01/27(木) 23:34:30.76ID:iujD8pk9
次はgoogleで2件しかヒットしない、「プロセス内スケジューラ」については説明してくれw

9デフォルトの名無しさん2022/01/27(木) 23:49:40.45ID:cK3g3Gve
非同期タスク群のスケジューリングをするランタイム部分のことではないでしょうか
一般的にプロセスの中に1つだと各スレッドへタスクを割り振るコストが高くて
各スレッドの中に独立して1つずつだと暇なスレッドと多忙なスレッドが偏るデメリットがあり
GoでもRustでもそれらのスケジューリング問題を改善するために
各スレッド内に独立キューを持って効率的に処理しつつもグローバルキューも備えることで解決しているようですね

10デフォルトの名無しさん2022/01/28(金) 00:05:15.17ID:EpTP27or
複製おじはGoでもRustでもまともに非同期プログラミングやったことないんだな

11デフォルトの名無しさん2022/01/28(金) 00:14:38.44ID:9bCXgVDe
>>8
OSスレッドがOSによりスケジューリングされることに対する対比じゃね?
タスクは各プロセスの中にスケジューラーがある
Goは言語ランタイムの中だがRustは各自が好きなのを選んだり自作も可能

12デフォルトの名無しさん2022/01/28(金) 01:31:02.15ID:DUuAybqk
どうせRustは普及しないんじゃないかな、知らんけど。

13デフォルトの名無しさん2022/01/28(金) 08:21:58.40ID:OuJICsLX
rustはc++を食うことがあってもピュアcを食うことはなさそう

14デフォルトの名無しさん2022/01/28(金) 08:42:08.00ID:3x0JFp6u
Cは誤解を恐れずに言えばアセンブリ言語みたいなもんだからな

15デフォルトの名無しさん2022/01/28(金) 13:14:51.22ID:7T77Q24K
>>13
C++ 98以前は Cと似てるし、ライブラリも言語とは無関係に自由に作れたから大丈夫。C++11以後はダメ言語になった。

16デフォルトの名無しさん2022/01/28(金) 13:17:06.82ID:7T77Q24K
そもそも、CやC++が普及したのはTurboCのおかげ。
TurboCはライブラリが分かり易かった。
C++11以後、言語もSTLも両方腐っていてTurboCとは全く違うようになり、
人気もがた落ちになった。

17デフォルトの名無しさん2022/01/28(金) 15:22:28.01ID:ePoQjqFg
何頓珍漢な事言ってんだこのバカ

18デフォルトの名無しさん2022/01/28(金) 18:58:54.57ID:9bCXgVDe
>>8
OSによるプロセスやOSスレッドのスケジューラではなく
プロセスの中で動くタスクのためのスケジューラ
各言語によって言語機能として備えている場合と外部ライブラリによる場合がある

Rustではその中間の形態で言語機能としてはasync/awaitの枠組みのみ提供
さらに標準ライブラリとしてFutureやWakerなどの必要とする定義のみ提供
実際に動作するスケジューラは外部ライブラリで様々な提供がなされ自作もできる
その他はこのスライドの前半の解説など参照

Rustのasync/awaitとスケジューラの話
https://speakerdeck.com/osuke/rust-async-await

19デフォルトの名無しさん2022/01/28(金) 21:04:45.07ID:zI6nuxFY
前スレ946の三つのサイトから数値を入手して和を求める例を練習のためにやってみたんだが
httpのheader取得までとbody取得の2回awaitが入るのがなるほどと思った
あと文字列を数値に変換parseも当然必要だったのでawait部分がちょっと長い
#[async_std::main]
async fn main() -> surf::Result<()> {
let n1 = surf::get("https://httpbin.org/base64/MTEx";); // 111
let n2 = surf::get("https://httpbin.org/base64/MjIy";); // 222
let n3 = surf::get("https://httpbin.org/base64/MzMz";); // 333
let sum = n1.await?.body_string().await?.parse::<i32>()?
+ n2.await?.body_string().await?.parse::<i32>()?
+ n3.await?.body_string().await?.parse::<i32>()?;
assert_eq!(666, sum);
Ok(())
}
利用させてもらったテストサイトはURLで返す値など指定できるhttpbin.org
これで動いて値取得もできて合計値assertも通ったのだが実は落とし穴があることに気付いた

20デフォルトの名無しさん2022/01/28(金) 21:49:38.11ID:YDzvJ7+G
元のJSのコードもだけど
await連発すんなよw

21デフォルトの名無しさん2022/01/28(金) 22:11:12.59ID:zI6nuxFY
そのテストサイトにhttp返答を遅延させるdelay機能があるので試した時に露見した
同時に指定値を返せないようなので数値化と足し算の意味はないが遅延時間を知りたかった
let d1 = surf::get("https://httpbin.org/delay/4";); // 4秒
let d2 = surf::get("https://httpbin.org/delay/5";); // 5秒
let d3 = surf::get("https://httpbin.org/delay/3";); // 3秒
let sum = d1.await?.body_string().await?.parse::<i32>().unwrap_or(0)
+ d2.await?.body_string().await?.parse::<i32>().unwrap_or(0)
+ d3.await?.body_string().await?.parse::<i32>().unwrap_or(0);
結果は12秒かかってしまい期待と異なり直列に実行されていた
肝心なことを忘れていた

22デフォルトの名無しさん2022/01/28(金) 23:09:26.07ID:zI6nuxFY
JavaScriptではPromiseを返す関数を3つ呼べばそれで3つ並行に実行される
しかしRustでは並行に動くタスクを自分で明示的に起動しなければいけなかったのだ
よく考えればGoでも自分で明示的にgoと前置指定することで別goルーチンを起動している
Rustではそれがspawnでありgoと同じくそれによりスケジューラに登録されるようだ
use async_std::task::spawn;
let d1 = spawn(surf::get("https://httpbin.org/delay/4";)); // 4秒
let d2 = spawn(surf::get("https://httpbin.org/delay/5";)); // 5秒
let d3 = spawn(surf::get("https://httpbin.org/delay/3";)); // 3秒
このようにspawnを付けて以降は同じ実行をすると全体で結果5秒となり並行に実行された
言語自体に魔法の仕組みはなく自分で明示的にスケジューラに登録指定するのはわかりやすくて安心した
そのスケジューラも手作りできるらしく興味深い

23デフォルトの名無しさん2022/01/28(金) 23:23:01.28ID:JUEBwV02
自分でblock_on書かないとRustのasyncは身に付かない

24デフォルトの名無しさん2022/01/28(金) 23:49:49.26ID:zI6nuxFY
>>23
use async_std::task::{block_on, spawn};の時
このblock_onを使った
fn main() -> surf::Result<()> {
block_on(async {
let d1 = spawn(surf::get("https://httpbin.org/delay/4";));
// 略
})
}
の簡略版が>>19で書いた
#[async_std::main]
async fn main() -> surf::Result<()> {
let d1 = spawn(surf::get("https://httpbin.org/delay/4";));
// 略
}
ってことか
つまりasync { ... } という非同期ブロックをblock_onによりスケジューラに実行させているわけだ
当たり前だがspawnする以前に最初からスケジューラの掌の上で踊っていたのであった
じゃないと全体を並行に実行できないもんな

25デフォルトの名無しさん2022/01/29(土) 13:58:43.26ID:AW7V4mOd
Rustのasync/awaitはコンパイルされると単純なステートマシンになる
例えばasyncブロック内にfuture1.awaitとfuture2.awaitが順に呼び出されるとする
最初はfuture1をpollする状態でpending中はpendingを返す
そこでreadyになればfuture2をpollする状態へ遷移
そこでもreadyになれば全体としてreadyを返す状態へ遷移
結局スタックレスなコルーチンを実現しているだけなので非常に軽い

26デフォルトの名無しさん2022/01/29(土) 22:23:27.99ID:12259hRt
起動も切替もスレッドより軽くてリソースも喰わないなら
非同期タスクの欠点は何だ?

27デフォルトの名無しさん2022/01/29(土) 23:26:45.54ID:7irU+4ae
Rustの場合軽量タスクはプリエンプティブじゃないので、変なコーディングすると特定のタスクが実行され続けて、他のタスクがいつまでも実行されないことがある
あとは、OSのスレッドじゃないからスレッドの属性や権限をタスク単位で異なる物にすることはできないとか

28デフォルトの名無しさん2022/01/29(土) 23:44:38.93ID:AW7V4mOd
>>27
前者は間違えて同期ブロッキングする関数を呼んでブロックしてしまった場合
および長時間ずっと全く非同期関数を呼ばずに計算し続けるか暴走する場合
これらはバグならfixで解決
バグでないなら非同期タスク実行スレッドとは別に専用スレッドを用意して実行できるスケジューラもあるのでそれを利用

29デフォルトの名無しさん2022/01/30(日) 00:54:30.09ID:zeCbxF6p
>>28
同じ処理でも入力内容次第で変わるからそんな簡単にいかないよ

30デフォルトの名無しさん2022/01/30(日) 01:16:02.14ID:iWlFH2We
async-stdならgoみたいにタスクが一定時間経っても制御返してくれないときに勝手にスレッド起こしてくれるんじゃなかったっけ

31デフォルトの名無しさん2022/01/30(日) 18:58:15.77ID:9ei8l7Ku
>>29
入出力が行なわれたらタスクのスイッチングが発生するので
意図的にブロッキングするものを呼んでブロックしているケースを除くと
いつまでもタスクが切り替わらないのは演算のみを延々と続けるケースのみになる
対応策としては自分で定期的に手放すか以下の方法で回避

>>30
それは様々な問題点で中止
結局tokioもasync_stdもそのような特殊ケースはspawn()の代わりにspawn_blocking()することで
タスクのスイッチングに影響が出ないように別スレッドで実行させる方針
その場合は結局スレッドを自分で起動して同期ブロッキングで使う昔からの方法と実質同じだが
そのような特殊なケースも含めて統一的にタスクを扱える

32デフォルトの名無しさん2022/01/30(日) 20:50:10.05ID:dly2JmLT
>>31
延々と演算を続ける意図はなかったのに結果としてそうなる場合があるということ
それを最初から想定できてyieldを挟めるなら問題ないのだが現実はそうはなっていない
https://tokio.rs/blog/2020-04-preemption

33デフォルトの名無しさん2022/01/30(日) 21:57:34.87ID:C4ZQL08k
そのbudget方式は戻ってこないとペナルティ与えられないから本質的な解決になっていない
yield相当をコンパイラが上手く挟むのも無理だからプログラマーが自らすればいい

34デフォルトの名無しさん2022/01/30(日) 22:13:02.89ID:46YJeJfB
歴史から学ばない人

35デフォルトの名無しさん2022/01/31(月) 00:52:40.26ID:wgfsi16C
歴史ってのがマルチタスクOSにおける cooperative vs preemptive の話だとするなら前提が違いすぎない?
任意のアプリケーションが動く可能性のあるOSと自身のプログラムのルーチンが実行されるアプリとではスケジューラに求められる制約条件は違って然るべきかと

36デフォルトの名無しさん2022/01/31(月) 07:30:22.38ID:qlFEomu1
シングルスレッドかつcooperativeなJavaScriptがNode.jsを含めて成功しているように問題なく動作する
同期ブロッキングを完全排除してしまえばタスク切り替えが起きない場合すなわちスケジューラに戻らない場合は
入出力もなくループでメモリ上演算を繰り返している場合となる
そのような場合でもループ内で自分で定期的にスケジューラへ制御を戻してやればよい
そのためにRustではtask::yield_now()がある

37デフォルトの名無しさん2022/01/31(月) 10:15:42.24ID:O/M0tTc6
イベントループがハングアップした時の対処とか考えたことないでしょ?
バグだからfixすればいいじゃ能がない
歴史に学ぶといいよ

38デフォルトの名無しさん2022/01/31(月) 10:24:59.23ID:qlFEomu1
>>37
GoやJavaScriptなどは言語内蔵だが問題が起きたことはない
Rustは言語から切り離されているが同様
いずれもそれらのランタイムの製作者以外がその部分のコードを触ることはなくバグが発生しようがない

39デフォルトの名無しさん2022/01/31(月) 10:27:00.53ID:/Hwves02
>>37
> イベントループがハングアップした時の対処とか考えたことないでしょ?
そういうのは上位で対処(タイムアウトでプロセス再起動とか)することもあるからケースバイケースでしかない

40デフォルトの名無しさん2022/01/31(月) 10:46:15.49ID:5QuAHu0k
イベントループがハングアップするってなに?
epoll_waitをブロッキングで使う場合でもタイムアウト設定すればハングアップなんてしないでしょ?

41デフォルトの名無しさん2022/01/31(月) 11:35:28.84ID:BNlzdeLS
タイムアウト設定忘れみたいなバグの話でしょ
そんなに引っ張る話でもないと思う

42デフォルトの名無しさん2022/01/31(月) 12:52:34.54ID:qlFEomu1
>>41
それは万が一あるとしても非同期スケジューラランタイム実装者の管轄
その利用者である一般プログラマーが引き起こすバグではないため関係ない

43デフォルトの名無しさん2022/01/31(月) 13:02:21.71ID:dnOSCP4X
> epoll_waitをブロッキングで使う場合でもタイムアウト設定すればハングアップなんてしないでしょ?
の話だぞ?

44デフォルトの名無しさん2022/01/31(月) 13:17:00.70ID:wgfsi16C
歴史って言葉持ち出してるんだしそんなしょうもない話じゃなくてもっと有名なエピソードなんじゃないの

45デフォルトの名無しさん2022/01/31(月) 13:24:49.76ID:HGCqFbKg
「Rustのタスクの欠点は?」

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

「プログラマーが注意すればいいだけだから問題ない」

46デフォルトの名無しさん2022/01/31(月) 13:35:30.64ID:qlFEomu1
そりゃepollやselect相当を自分で使っていてミスをすればイベントループがハングアップするのは当たり前
しかし非同期タスクのイベントループは非同期スケジューラの中にあって自分でepollやselectを扱わなくてよくなった
だから自分のミスでイベントループがハングアップすることはなくなった
それ以前の歴史では色々あったが状況が変わった

47デフォルトの名無しさん2022/01/31(月) 13:51:12.77ID:dnOSCP4X
はいはい、理想的な環境で羨ましいですね

これでいいかな?w

48デフォルトの名無しさん2022/01/31(月) 14:52:14.32ID:QZLkrRiL
メモリ開放忘れみたいなバグの話でしょ
そんなに引っ張る話でもないと思う

49デフォルトの名無しさん2022/01/31(月) 14:57:56.44ID:wgfsi16C
バグ耐性高めるためにタスクをプリエンプティブにしたいならすれば良いのでは
プログラマーのスタンスに合わせて適切な物を選べるよう選択肢は用意されてると思うが
何について言い争ってるのかよくわからない

50デフォルトの名無しさん2022/01/31(月) 15:37:58.82ID:UHXhumHV
GoやNode.jsが上手くいってる主因は非同期並行プログラミングのしやすさ
両者は方向性が真逆だけどそこが共通点で時代の要請
逆にC++が振るわないのは非同期並行プログラミングのしにくさ
その状況でRustが登場して非同期並行プログラミングのしやすい環境も装備されたという流れ

51デフォルトの名無しさん2022/01/31(月) 18:03:53.30ID:dLpRlGxR
>>49
タスクはプリエンプティブにはできないよ
スレッド使えって言ってるの?

52デフォルトの名無しさん2022/01/31(月) 18:33:21.76ID:fs07R1AL
>>51
そうじゃね?

53デフォルトの名無しさん2022/01/31(月) 18:56:25.41ID:UHXhumHV
Node.jsもプリエンプティブではないけど困っていない
タスクがプリエンプティブではないことを欠点だと主張する人は
欠点だという具体的な例を挙げてから主張すべき

54デフォルトの名無しさん2022/01/31(月) 19:02:29.41ID:wgfsi16C
>>51
そうだよ
ここで言うタスクはtokioやasync-stdの用語のタスクのことね
spawn_blockingでタスク生成すれば専用スレッドが割り当てられるので特定のタスク選んでプリエンプティブにできる (OSにタスクスイッチの制御を委譲できる)

55デフォルトの名無しさん2022/01/31(月) 19:03:44.27ID:wgfsi16C
>>53
spawn_blockingみたいなAPIが用意されてるのはプリエンプティブなタスクの需要はあるんじゃないの
そこを否定する意味が分からない

56デフォルトの名無しさん2022/01/31(月) 19:28:57.02ID:UHXhumHV
>>54
それはレイヤーが違う
まずOSスレッドは何をしようが常にプリエンプティブ
だからOSスレッド上で動いているタスクも途中で一時中断されたり再開されたりしうる
だからといってタスクをプリエンプティブだと言わないのはタスクの階層で話をしているため
タスクスケジューラに制御を戻さない限り他のタスクに切り替わらないため「プリエンプティブではない」と言われる

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

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

>>55
その意見は成立していない

57デフォルトの名無しさん2022/01/31(月) 19:56:01.95ID:wgfsi16C
>>56
確かにプリエンプティブという用語を使ったのは適切ではなかったかもね
タスクがスレッドを占有するか他タスクと共有するか選択できると言い換えればよいかな

58デフォルトの名無しさん2022/01/31(月) 21:28:17.75ID:L8OnQfxN
>>54
最初からspawn_blockingで呼ぶべきだと誰もがわかるような処理だけじゃないよ

Goと同じでRustもそのうちプリエンプティブなスケジューラが作れるような機構を用意すると思うけどね

59デフォルトの名無しさん2022/01/31(月) 22:11:33.46ID:qlFEomu1
>>58
preemptiveは必要ない
シングルスレッドかつcooperativeなJavaScriptがNode.jsを含めて問題なく動作し成功している

60デフォルトの名無しさん2022/01/31(月) 22:59:08.63ID:UPbAych9
Rustってデータ競合を許さない、ってあたりが並列処理とめちゃくちゃ相性良いように見えるけど、
まだそういうスケジューラとか非同期ランタイムらへんの仕組みがちっとも枯れてないんだね
将来のデファクトがどうなりそうか、ってのはある程度見えてきてるのかな?

61デフォルトの名無しさん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/

62デフォルトの名無しさん2022/01/31(月) 23:16:15.33ID:UHXhumHV
>>61
それはすぐに廃止された
そして現在tokioもasync-stdもプリエンプティブを許すコードは存在しない

63デフォルトの名無しさん2022/01/31(月) 23:18:46.34ID:9ggC0jgK
>>62
知ってるよ
問題認識の話をしてるんじゃん

64デフォルトの名無しさん2022/01/31(月) 23:21:44.46ID:9ggC0jgK
Node.jsはタスク単位で高い信頼性が求められるシステムでは使われない
イベントループがブロックしたら他のタスクを道連れにしてプロセス丸ごと再起動する以外に対処法がないから
それもexecution managerできちんとモニタリングしてればの話

JSやNodeとRustとはポジショニングが違う

65デフォルトの名無しさん2022/01/31(月) 23:28:55.88ID:qlFEomu1
>>64
イベントループがブロックすることはない
何を言いたいのか意味不明

66デフォルトの名無しさん2022/01/31(月) 23:47:16.39ID:UHXhumHV
>>64
Node.jsまで否定し始めるとは発狂もほどほどに

67デフォルトの名無しさん2022/02/01(火) 01:18:54.05ID:NlOJHFhB
>>58
rustでプリエンプティブなタスクって実装できるのかね
goみたいなシグナルでスイッチする仕組みは使えない気がするが

68デフォルトの名無しさん2022/02/01(火) 09:02:19.73ID:YxH4csZd
昔は標準で出来たのに「そういうのはライブラリでやればいい」って嘯きながら削除して、そのあと一生それが出来る標準ライブラリが登場しないいつものRust

69デフォルトの名無しさん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もサポートし現在の軽く便利な環境となった

70デフォルトの名無しさん2022/02/01(火) 15:14:51.45ID:7ZSm+F9e
あと5年寝かせれば使えるようになるかな

71デフォルトの名無しさん2022/02/01(火) 15:26:14.30ID:0bEAn4zq
別に今でもasync-stdを使えばええんちゃうか?

72デフォルトの名無しさん2022/02/01(火) 15:54:32.70ID:aP+3H5wQ
>>69
ユーザーランドでプリエンプティブなタスク実現するという話なんだけど
具体的にどのライブラリがサポートしてるの?

73デフォルトの名無しさん2022/02/01(火) 16:14:56.52ID:fJKShZ3h
>>71
async_stdでのプリエンプティブな試みは軽さの方針等に合わず、組み込まれないままで終わった

>>72
上記の後継がasync_stdから独立していてsmolscaleとなっている

74デフォルトの名無しさん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の話題一色になってしまってる感じ

76デフォルトの名無しさん2022/02/02(水) 00:32:45.41ID:Bknypv+c
C++が落ち目なのはまっとうなエンジニアの間では共通認識だろ

77デフォルトの名無しさん2022/02/02(水) 02:30:31.45ID:YscELMZC
変な拡張し杉てワケワカになってきてるよな

78デフォルトの名無しさん2022/02/02(水) 11:27:34.63ID:jvlsF+ng
変な拡張を使わなければ良いだけでは? 使いこなせないのを使えなとは言わない。

79デフォルトの名無しさん2022/02/02(水) 14:23:10.98ID:X76n4047
RustがGo位の位置にたどり着くのは、あと何年かかるかね

80デフォルトの名無しさん2022/02/02(水) 15:00:57.22ID:O+j3A95O
GoはWebとかのアプリケーションでカジュアルに使われるようになってきたから、使う人数もかなり多くなってきたけど、
Rustはそういうポジションにつくことないだろうから、現在のGoほどの人気になることはないんじゃない?
RustはC/C++のシェアを塗り替えていく程度だろうけど、そういう低レイヤーでは最強言語になりそう

81デフォルトの名無しさん2022/02/02(水) 15:03:25.91ID:6tF6MeYL
RustがTIOBE Indexに出てくるのはいつなんだろう?w
C vs C++ vs Rust Part.3 ->画像>1枚

82デフォルトの名無しさん2022/02/02(水) 22:30:37.00ID:yDHN0aKU
言語機能としてはC++が完敗だから
過去遺産しか誇るものがない

83デフォルトの名無しさん2022/02/02(水) 22:35:52.80ID:/PkFuWcg
何言ってんだこのバカ

84デフォルトの名無しさん2022/02/02(水) 22:46:31.08ID:J71gX0gE
シェアもユーザー数も過去遺産と言われてしまえばそうだが
そんなことは興味がないのでC++での非同期並行プログラミングについても語って欲しい

85デフォルトの名無しさん2022/02/03(木) 16:11:01.01ID:VWdjVpzZ
C++の非同期っていうとstd::asyncとか?

86デフォルトの名無しさん2022/02/03(木) 17:48:17.26ID:rBa0lj+C
>>81
今26位で、Kotlin, Lua, Scalaとかより上なんだが

87デフォルトの名無しさん2022/02/03(木) 17:52:10.90ID:6/rx3Wgr
>>86
COBOLより下なんかwwwww

88デフォルトの名無しさん2022/02/03(木) 18:30:47.00ID:VWdjVpzZ
KotlinやScalaは結局流行らずJavaで十分だし
Luaも一時期熱狂したけど記法や環境が多くの人の好みに合わずPerlのように嫌われてる
RustもC/C++で十分という認識が強くて普及せずに一部の通好みに終わる可能性がある
Rustは有力企業もプッシュしてるけど三つの言語の流行らない特徴を全て備えてる
そうこうしてるうちにRustより優れた言語がぽっとでて席巻する未来だってある

89デフォルトの名無しさん2022/02/03(木) 18:38:00.04ID:I6DodtQJ
流行るの閾値高くない?
何位以上になったら満足なんだ

90デフォルトの名無しさん2022/02/03(木) 18:48:22.27ID:Y+zgwr9T
普通にTop10じゃね?

91デフォルトの名無しさん2022/02/03(木) 18:51:38.73ID:OQgvAcI9
しかしTop10のVisualBasicやアセンブリが流行ってるとか言われてもあまり納得感はないな…

92デフォルトの名無しさん2022/02/03(木) 19:08:22.03ID:Ajxf7YAY
TIOBEってトレンドを計測してるわけじゃなくて、あくまで検索エンジンで検索結果のヒット数が多かったランキングだからな
CとかVBみたいに昔から一定の人気を保ち続けてるような言語がランキング高くなりやすいんじゃないかな

93デフォルトの名無しさん2022/02/03(木) 19:24:04.62ID:I6DodtQJ
GitHub上の活動に基づいたランキングの方がプログラマ間の流行を知るには良いのかな
https://madnight.github.io/githut/#/pull_requests/2021/4

94デフォルトの名無しさん2022/02/03(木) 19:40:42.80ID:NxnOaIbO
せやな
TIOBEはJavaScriptとアセンブラが隣の順位に並んでるとかおかしすぎるやろ

95デフォルトの名無しさん2022/02/03(木) 21:31:55.43ID:8HqROgrm
>>88
Scalaも当時は熱狂的なファンがいたよなw

96デフォルトの名無しさん2022/02/03(木) 21:44:00.20ID:OJ3iv254
ScalaはJVMベースだという点以外は特に悪いところは無いと思うんだが

97デフォルトの名無しさん2022/02/03(木) 23:27:45.66ID:VxNIdQ9k
コラッツ関数を上手く実装できないかな

98デフォルトの名無しさん2022/02/04(金) 00:31:37.55ID:tMDf8XuC
>>93
githubはアマチュアプログラマも沢山混じってる。
日経の調査ではプロのプログラマで最も使われている言語はC/C++だとされている。
なお、githubでも、CとC++を合算すると、9.82%、Rustは 0.694%で、
14.1倍の差がある。

99デフォルトの名無しさん2022/02/04(金) 00:34:29.27ID:uF1Qc9S6
>>98
C vs C++でもあるんだから足したらだめでしょ

100デフォルトの名無しさん2022/02/04(金) 00:35:47.48ID:tMDf8XuC
>>91
VisualBasicは結構使われているのではなかろうか。Excelなどで。
アセンブリは、基礎的なライブラリを作る人や組み込み、OS、BIOS
を作ったり、グラフィックや数値計算の高速化を行う場合に必要な場合がある。

101デフォルトの名無しさん2022/02/04(金) 00:36:35.60ID:tMDf8XuC
>>99
Cにクラスを入れたものとしてC++を使っている人は多いはず。
MFCなどもそう。

102デフォルトの名無しさん2022/02/04(金) 00:44:19.25ID:uF1Qc9S6
>>101
いやいや、スレタイ通りこのスレではCとC++は対立する物として区別すべき

103デフォルトの名無しさん2022/02/04(金) 00:45:03.38ID:zhkygWhI
今どき言語マウントするやつは
メンタルも技術力もアマチュア

104デフォルトの名無しさん2022/02/04(金) 00:47:42.81ID:tMDf8XuC
C++はCを基礎にしてるくせに、Cに歯向かって宿主を殺してしまう寄生虫みたいな
ことになってるからな。

105デフォルトの名無しさん2022/02/04(金) 05:41:15.73ID:3M0ClPfa
いまのc++の拡張がな
autoとラムダとdecltypeくらいでやめときゃいいのにあとでボツになりそうな仕様までモリモリに盛りやがって下手したらobjective-cみたいになりそう
なのにいまだにpropertyも実装されてないとか

106デフォルトの名無しさん2022/02/04(金) 06:48:54.05ID:GRC0hKFU
conceptsは許せる

107デフォルトの名無しさん2022/02/04(金) 08:29:55.22ID:rPvrWkyY
>>105
それほどへんなもの追加されてるか?
右辺値参照、constexpr、可変引数テンプレートは必要だしな

108デフォルトの名無しさん2022/02/04(金) 08:53:37.86ID:O81zVfQh
色々理解できない機能が増えて辛いんだろw

109デフォルトの名無しさん2022/02/04(金) 09:58:17.78ID:nTZc+xED
conceptはむしろ必須だろうよ

110デフォルトの名無しさん2022/02/04(金) 10:06:51.33ID:xcjLhLWs
C++11移行では、変数定義で、
TYPE a = b;
の形式が非推奨で、
TYPE a{b};
が推奨になった。
これは、C/C++の今までの伝統を全否定している。
C++11以後は、宿主を殺すウイルス的な存在に成り下がった一例。

111デフォルトの名無しさん2022/02/04(金) 11:28:12.62ID:i2fLUlAL

112デフォルトの名無しさん2022/02/04(金) 11:33:17.83ID:O81zVfQh
>>110 みたいな爺さんは書き方変わるだけでアタフタw

113デフォルトの名無しさん2022/02/04(金) 12:53:41.07ID:6YwPoRaj
>>110
TYPE a{b};
↑これって何がうれしいの?
c++よく知らんので教えてほしい

114デフォルトの名無しさん2022/02/04(金) 12:55:43.71ID:m8EcUnam
コンパイラ都合じゃね?知らんけど

115デフォルトの名無しさん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が駄目な部分の一つ。

116デフォルトの名無しさん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が駄目な部分の一つ。

117デフォルトの名無しさん2022/02/04(金) 14:40:30.04ID:MGyBlJhW
ふーん、レガシー言語は大変だね

118デフォルトの名無しさん2022/02/04(金) 14:44:09.08ID:vKz9Nbsj
Rustはもっと最悪に汚い。
C++の最大の欠点は、仕様が難しいことに有るが、
Rustはさらに仕様が難しい。
よって、RustはC++をさらに悪くしたと言えて、改良には全くなってない。

119デフォルトの名無しさん2022/02/04(金) 14:54:48.13ID:WO7o5PWJ
ふーん、レガシー脳は大変だね

120デフォルトの名無しさん2022/02/04(金) 14:59:52.64ID:vKz9Nbsj
>>119
馬鹿は黙ってろ。

121デフォルトの名無しさん2022/02/04(金) 15:11:33.72ID:dFWqGnrm
つまり仕様が簡単な方が良いということ?

122デフォルトの名無しさん2022/02/04(金) 15:17:49.19ID:wTfQ05na
>>119
ばーかw

123デフォルトの名無しさん2022/02/04(金) 16:13:01.17ID:sAwXze1R
効きすぎだろwww

124デフォルトの名無しさん2022/02/04(金) 16:23:37.19ID:J8iEhnuL
c++は(ランタイム速度落とさなくても)できらぁ!ってなったらとりあえず入れるからな。
ある意味とてもガキくさいがそれはそれでありなポジションに到達してる気はする。

125デフォルトの名無しさん2022/02/04(金) 20:04:05.51ID:JLdS+NWr
そんな凄いんだったらもっと普及してるよねRust
でも現実はブビにもコボルにも負けてる泡沫言語

126デフォルトの名無しさん2022/02/04(金) 20:40:31.16ID:b3SZZj/4
単純に新しい言語だから累積となるユーザ数でまだ不利なだけ
2019年11月のasync導入で非同期プログラミングがまともに使えるようになってまだ2年余り
Linux OSのようにC++を頑なに拒否していたプロジェクトでもRustは受け入れられたように
C++に未来はないがRustには未来がある

127デフォルトの名無しさん2022/02/04(金) 20:44:24.76ID:JLdS+NWr
最後間違い
C++に未来はないがRustも未来はない

128デフォルトの名無しさん2022/02/04(金) 20:49:40.24ID:jGBmcDmC
日本は先進国の技術トレンドから5年以上遅れてるからね

129デフォルトの名無しさん2022/02/04(金) 20:53:24.16ID:rIsLZ1dN
C++erはレガシー脳が多いから

いい意味でのレガシーね
オリンピックレガシーみたいなw

130デフォルトの名無しさん2022/02/04(金) 20:54:41.42ID:aq7ZCAbr
C++はあんなみすぼらしいラムダ式用意して哀れやわ
貧乏の家の子が自家製ボタモチもって突っ立ってるようやわ

131デフォルトの名無しさん2022/02/04(金) 21:01:52.67ID:JLdS+NWr
Rustやってる奴は現状アーリーアダプターで普及するにしてもまだ年月掛かると思う
んでその間にまた新しい言語が開発されみんなそっちに移って行くと

132デフォルトの名無しさん2022/02/04(金) 21:06:34.54ID:3IKuZnie
新しい言語はどんな問題解決してくれるんだろうな
動的型付けが復権するんだろうか

133デフォルトの名無しさん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/

134デフォルトの名無しさん2022/02/04(金) 22:59:18.87ID:ckxp+S+3
>>131
それならそれで無駄にはならない気がするが
考え方は継承されるだろうし

135デフォルトの名無しさん2022/02/05(土) 01:30:11.76ID:6GVIsHGT
SNS見てる限り、若い人でも人気は Rust より C/C++ の圧勝。

136デフォルトの名無しさん2022/02/05(土) 02:39:36.18ID:ye9/tceq
大学の課題とかはまあC/C++よね

137デフォルトの名無しさん2022/02/05(土) 06:15:36.04ID:LYyRCemg
>>133
RustはVisual studioでデフォルトで選択できるようになったら普及するだろうな

138デフォルトの名無しさん2022/02/05(土) 09:06:42.96ID:E0droKIF
北京五輪と東京五輪の開会式をプログラミングで例えるとどうなるやろ?

139デフォルトの名無しさん2022/02/05(土) 16:44:42.87ID:bofW+oE9
そのまま普通に
東京五輪 Rust
北京五輪 C++

140デフォルトの名無しさん2022/02/05(土) 17:35:54.33ID:O/WKZnIq
東京五輪 FAMILY-BASIC

1411382022/02/06(日) 17:01:26.43ID:LMR3oS4I
ちょっとセンシティブな話だったか
与太話と思ってスルーしてくれ
すまんかった

142デフォルトの名無しさん2022/02/10(木) 11:18:14.49ID:sUV8whwi
>>139
Rustってそんな酷い言語だったんだ
手出さなくて良かったわ〜

143デフォルトの名無しさん2022/02/10(木) 11:25:47.65ID:ylUFM8HS
Rust 拝金主義
C++ ハイキング

144デフォルトの名無しさん2022/02/10(木) 20:10:06.55ID:9RAaYAUg
RustはC,C++を駆逐すると思う。アレに拘泥する理由はない。

145デフォルトの名無しさん2022/02/10(木) 21:00:13.02ID:ylUFM8HS
HighKingの至高の頂に座居するC++に勝てると本気で思っているのかね

146デフォルトの名無しさん2022/02/10(木) 21:47:05.33ID:o2ECnsWv
>>144
過去資産があるから駆逐まではいかないかな。
でももっと利用されるだろう。
けど非同期のやつとかの分断をどうにかして欲しい。

147デフォルトの名無しさん2022/02/10(木) 21:50:08.15ID:dDg7TD3H
ジワジワと侵食して気が付いたらいつの間にか利用していたって広がり方するんだろうな

148デフォルトの名無しさん2022/02/10(木) 21:51:34.38ID:9RAaYAUg
>>116
これ見てクソ言語だなって思わないヤツいるのかね。

149デフォルトの名無しさん2022/02/10(木) 21:53:35.73ID:LnXBonLg
>>116
なんでこんな言語が使われるようになったんや?

150デフォルトの名無しさん2022/02/10(木) 23:38:10.62ID:o2ECnsWv
>>149
使われるようになったんじゃなく、既に使われてた言語を過去との互換性を崩さずに 変更しようとして/変更して そうなったんだよ。
その変化は今なお止まってないんよ。

151デフォルトの名無しさん2022/02/10(木) 23:40:02.53ID:TPkaON1O

152デフォルトの名無しさん2022/02/11(金) 01:30:20.07ID:ieudecgp
>>149
C++が最初に使われ始めたころは、T a{b}のような記法はなく、
C++11で登場した。
使われ始めたころのC++はCの後継として丁度良いと思われるようなもので
あって、>>116のような変な仕様は入ってなかった。
最初は良かったが、後を突いていくと時々「え?」と思うような仕様が入り込み、
C++11で如実になった。
・templateの仕様も「え?」と思うことが多いものだった。
 Stroustrap氏によれば、高速化に重点を置いて導入されたものらしいから、
 分かり易さは犠牲になっているようだが、それにしても分かりにくいことが多い。
・C++にはライブラリが無かったので、C++11で導入されたが、それが
 賛否の分かれるもので、恐らく6割くらいの人には質が悪く感じるものであった。

153デフォルトの名無しさん2022/02/11(金) 07:42:26.56ID:KbgZfaat
www.mercari.com/jp/search/?keyword=hr400p
こういう安い中古チューナ買って、Coinyをスカパープレミアム放送のICカード化して、
スカパープレミアムのチャンネル全部見れるし、USB HDDに録画フリー。
【avoCADO】 Coiny card Part4【仮想通貨】
http://2chb.net/r/avi/1640762750/

154デフォルトの名無しさん2022/02/11(金) 11:09:11.39ID:X1ujBpuJ
C++は必要な機能だけ使ってれば問題ないことが多いが、
コンパイルエラーメッセージがやばすぎる
まともな言語とは言えない

155デフォルトの名無しさん2022/02/11(金) 11:36:27.12ID:08JP5jFO
アレは読むんじゃない
詠むんだ

156デフォルトの名無しさん2022/02/11(金) 11:39:59.37ID:MSfgatap
>>154
逆にRustのコンパイラのエラーメッセージは手厚く至れり尽くせりで感度もの

157デフォルトの名無しさん2022/02/12(土) 01:52:06.05ID:ct0ZlJaB
>>154
C++は、学者がtemplateメタプログラミング関連などの理論的な正しさを
見せびらかしているだけの様な気がするよ。
「ほら、これでメタプログラミングができるだろ、俺の理論の正しさがわかったか」
みたいに。

158デフォルトの名無しさん2022/02/12(土) 01:53:21.86ID:ct0ZlJaB
ただ、だからといってRustがその代わりになるということではない。
RustはRustでC++以上に問題を入れ込んでしまった。
これもまた机上の空論の様な言語。

159デフォルトの名無しさん2022/02/12(土) 09:46:16.21ID:nCAwro3+
>>158
机上の空論でない言語は何よ?

160デフォルトの名無しさん2022/02/12(土) 10:21:13.78ID:ZjQpgox3
アセンブラとC言語
使わないけどFORTRANとCOBOLもそうかな

161デフォルトの名無しさん2022/02/12(土) 10:44:19.07ID:lHDa3hl7
>>160
ADAは?

162デフォルトの名無しさん2022/02/12(土) 11:06:25.45ID:4ZF6L5uh
>>159
横やけど
俺もC言語だと思ってる。

163デフォルトの名無しさん2022/02/12(土) 11:24:57.04ID:ZjQpgox3
>>161
Ada は(少なくとも出た当時は)けっこう机上の空論ぽい機能てんこ盛りだった

164デフォルトの名無しさん2022/02/12(土) 11:27:00.51ID:nCAwro3+
Cは貧弱すぎだろう。いまさらmallocとか書く気もおきん。

165デフォルトの名無しさん2022/02/12(土) 12:03:28.21ID:yRIrPLWC
>>158
C++の問題よりはマシだろ

166デフォルトの名無しさん2022/02/12(土) 12:07:09.85ID:XghCcbPA
前にこれをC++スレかどっかで発言したら結構叩かれたけど
C++って結局はテンプレートが言語の真ん中にあるよな
他の言語色々やった上であらためてC++見ると俺にはそう見える
一応マルチパラダイム言語だからC++しかやったことない人は
テンプレートだけをフォーカスされるのは不服っぽいけど

167デフォルトの名無しさん2022/02/12(土) 12:08:32.56ID:v8ccrYYP
テンプレートは強力だよな

168デフォルトの名無しさん2022/02/12(土) 12:12:41.52ID:XghCcbPA
Cではちょっとしんどいです
いろんなコンテナ使いたいです
そんとき型をパラメータ化したいです
ハゲ「テンプレートでみんな幸せ」
C++er「やったぜ」

C++規格の関係者「いろいろ仕様につっこんだぜ!」
C++er「あっはい」

169デフォルトの名無しさん2022/02/12(土) 12:42:37.24ID:Wnw3K02J
>>166
概ね同意
テンプレートは便利だけど使いすぎてワケワカメってなりがち

170デフォルトの名無しさん2022/02/12(土) 13:44:38.22ID:v8+/CWv5
Rustでバブルソート書いてみたがすげー書きやすいな
食わず嫌いだったかもしれん
コンパイルエラーがめっちゃわかりやすい

171デフォルトの名無しさん2022/02/12(土) 13:57:38.37ID:w2XePdCb
ほんとかよw

172デフォルトの名無しさん2022/02/12(土) 14:50:46.51ID:wXyEGH3A
バブルソートw

173デフォルトの名無しさん2022/02/12(土) 15:04:29.49ID:kx8mtXuQ
バブルソートw
笑うとこかよ

174デフォルトの名無しさん2022/02/12(土) 15:45:26.65ID:yRIrPLWC
確かにエラーは笑っちゃうくらい親切だわな

175デフォルトの名無しさん2022/02/12(土) 16:16:36.29ID:zOhO24og
rustのエラー報告は全てのプログラミング言語で最高の親切さだと思う
他の言語がサボりすぎなんだよな
rust書くと他の言語かけなくなる

176デフォルトの名無しさん2022/02/12(土) 16:54:42.98ID:zd9UI5Og
そんなバブルソートバカにせんでもよかろうに
大学一年で最初の方に習うし、初めての言語触るにはまあまあ良い題材では

177デフォルトの名無しさん2022/02/12(土) 17:44:36.13ID:91xKDv7O
少しいじってcombソートにしたらクイックソートにもひけをとらないしな。

178デフォルトの名無しさん2022/02/12(土) 17:55:38.68ID:nCAwro3+
Rustで双方向リストをマージソートでソートするとかだとめんどくさいことになる気がする

179デフォルトの名無しさん2022/02/12(土) 18:09:42.02ID:REfvKUVO
バブルソートがすげー書きやすいってどのへんが?
逆にそんなもん書きにくい言語なんてあるの?
fn main() {
let mut v = vec![8, 4, 3, 7, 6, 5, 2, 1];
let bsort = |v: &mut Vec<i32>| for i in 0..v.len() {
for j in 1..v.len() - i {
if v[j] < v[j - 1] {
v.swap(j, j - 1)
}
}
};
bsort(&mut v);
println!("{:?}", &v);
}
↑書いてみた
細かいところは日本語版wikipediaに準拠

180デフォルトの名無しさん2022/02/12(土) 18:12:12.77ID:/iL1/Dd6
ソートの話はどうでもよくて要点はRustに対してのこの部分だと受け取ったが

>>170
> 食わず嫌いだったかもしれん
> コンパイルエラーがめっちゃわかりやすい

181デフォルトの名無しさん2022/02/12(土) 18:34:19.97ID:v8ccrYYP
>>180
同意

182デフォルトの名無しさん2022/02/12(土) 19:15:40.31ID:1IxSArcj
バブルソートは理解が難しいわりに現実に使われんのがな。
それだったらクイックソートをだな。

183デフォルトの名無しさん2022/02/12(土) 19:50:02.51ID:ZjQpgox3
>>182
> バブルソートは理解が難しい
えっ?

184デフォルトの名無しさん2022/02/12(土) 19:53:57.23ID:772ADf0k
>>183
頭の良さは人それぞれなんだから馬鹿にしない

185デフォルトの名無しさん2022/02/12(土) 21:02:43.90ID:kBzBXJs5
ダブルアレイは原理が簡単にもかかわらず、十分バグが取れるまでずいぶん時間がかかった。

186デフォルトの名無しさん2022/02/12(土) 23:07:39.79ID:wXyEGH3A
CPU時間をたらふく使うバブリーなソートだよな

187デフォルトの名無しさん2022/02/12(土) 23:55:25.98ID:x20bdFcp
>>180
Rustはコンパイラが出すエラーメッセージが詳しすぎて解決案まで示唆してくれたり親切すぎる
他のコンパイラ言語だけでなくインタプリタ言語まで広げても一番親切なプログラミング言語システムだと断言できる

188デフォルトの名無しさん2022/02/12(土) 23:56:38.45ID:zNyDeBid
まあC++にテンプレートないならそこまで使わんわな

189デフォルトの名無しさん2022/02/13(日) 01:14:02.16ID:z8C8/2EV
Stroustrup氏の脳内では、テンプレートの目標が高速化であるということなのが
問題の始まりの気がする。

190デフォルトの名無しさん2022/02/13(日) 01:20:30.65ID:z8C8/2EV
マクロ=高速化用途で使われているもの
という見方が如何にも実用プログラムを書いたことの少ない学者だと思う。

191デフォルトの名無しさん2022/02/13(日) 09:42:52.30ID:LKJBNTq1
C++からテンプレート取ったらなにも残らない

192デフォルトの名無しさん2022/02/13(日) 09:51:25.60ID:0Lo3ZZ1+
いや残るだろ

193デフォルトの名無しさん2022/02/13(日) 10:12:41.48ID:jQxqAel+
STLなくなっちゃう

194デフォルトの名無しさん2022/02/13(日) 10:25:11.79ID:yoBtg/nD
>>186
その代わりメモリーは使わないから貧乏な俺でも使える

195デフォルトの名無しさん2022/02/14(月) 23:17:34.32ID:T9mSH3bb
>>179
そういうことではなく
おそらく>>170が言いたいのはコンパイラが出すエラーがめっちゃ親切なことだろう
こっちで書き換わってるからここにmutを付けなさいとか
ここで所有権が移動したのに後で使用してるからここに&を付けなさいとか
これをuse宣言するのを忘れてますよとか
この変数は宣言されず使われていますがこの変数名のスペルミスではありませんかとか
といった簡単なものから
複雑な借用関係をちゃんと登場人物たちをはっきりさせてあっちとそっちがこれこれでマズいのでこうしてみたらどうかなど
こんなにきめ細かく親切なエラーを出すコンパイラ&インタプリタは他の言語と比べてもトップではないか

196デフォルトの名無しさん2022/02/15(火) 00:19:44.75ID:kCmeQXW/
>>151
デマは辞めようね

197デフォルトの名無しさん2022/02/15(火) 00:24:28.01ID:tssMbTRA
>>195
同意

198デフォルトの名無しさん2022/02/15(火) 07:23:31.22ID:A9ZkwK3T
>>195
そこは目から鱗だよな
ここまでできるなら、他の言語も頑張れよと言いたくなる

199デフォルトの名無しさん2022/02/15(火) 07:51:21.06ID:aaenmMxg
言語として所有権の概念がないからその辺りの指摘はしないけどVS2022のC#も結構色々提案してくれるぞ

200デフォルトの名無しさん2022/02/15(火) 09:28:59.50ID:CNcLOkDE
このながれでこれを言う意味なんてないけど
わかるやつだけわかってくれたらいいんだけど
Rustのコンパイラ昔は酷かったよな
無慈悲なボローチェッカと戦ってたよな(´;ω;`)

201デフォルトの名無しさん2022/02/15(火) 09:42:41.51ID:qxt1mofg
まだメジャーバージョン1だしそりゃまあ

202デフォルトの名無しさん2022/02/15(火) 11:48:06.88ID:je481k6i
>>200
コンパイラというよりもnon lexical lifetimeが入る前の言語仕様の制約が厳しくて辛かったんじゃないかな

>>201
コンパイラのバージョンがsemverにしたがってるうちはメジャーバージョンアップしないんじゃないかな
基本的に過去との互換性は崩さないし、必要ならエディションで非互換な変更もできるようにしているので、
メジャーバージョンアップしてまで互換性崩したい理由がなさそう

203デフォルトの名無しさん2022/02/16(水) 19:19:14.27ID:lHwbgihf
どこかでPython 2 -> 3みたいなことが起こるかもよ

204デフォルトの名無しさん2022/02/16(水) 20:18:02.36ID:oWbPDf/g
>>203
Rustは後発言語なだけあって
今どきのプログラミング言語の成功部分を洗練して採り入れてる
だから互換性のないバージョンアップをする時はRustより新しい言語が新たに成功してそれをRustも採り入れたくなったが互換性を維持したままでは出来ない時が来てから

205デフォルトの名無しさん2022/02/17(木) 03:10:03.97ID:reqFguXW
RustとかNimは第何世代の言語なん?

206デフォルトの名無しさん2022/02/17(木) 11:44:19.88ID:RuZDOzbq
>>205
第4世代の高水準言語の仲間じゃね?

207デフォルトの名無しさん2022/02/17(木) 23:40:19.82ID:W9idHeI8
>>202
そのnon lexical lifetimeが入る前の言語仕様の制約が厳しい件なのかどうか教えて
このリンクリストの実装でpush_back()のコードがlifetimeでコンパイルエラーとなる話
https://qnighy.hat
enablog.com/entry/2017/05/06/070000
今このコードをコンパイルすると問題なく通って実行もできてしまう
Rustのコンパイラはどんどん賢くなって制約が無くなっていってるんだな

208デフォルトの名無しさん2022/02/18(金) 00:44:32.85ID:yXo12zTr
Rustって普及するんすか

209デフォルトの名無しさん2022/02/18(金) 00:54:27.33ID:WX40LAaF
>>195
エラーメッセージの親切さで言うとVC#がトップだと思ってるけどそれ以上?
C++でハマったときの沼の深さは異常だからそんな親切なら乗り換えたくなってきたな

210デフォルトの名無しさん2022/02/18(金) 00:57:20.21ID:Dn+7AFaS
rustのコンパイる中ってみんな何してんの?

211デフォルトの名無しさん2022/02/18(金) 01:32:33.29ID:7ZNuwX6P
>>207
push_backの例はまさにNLLでコンパイル通るようになるコードだね

212デフォルトの名無しさん2022/02/18(金) 02:16:48.89ID:0USC0+1K
C++のTMPのエラーメッセージとRustのジェネリックのエラーメッセージ
C++のはもはや意味不明だがRustのはまだ人間が読める

213デフォルトの名無しさん2022/02/18(金) 15:09:52.72ID:6v8ahY7t
あまりに親切すぎるメッセージなので、それならそういう風に変更したものをコンパイルしてみて、「こう変更したらコンパイルできました」となればいいなぁ

とRebuildの宮川さんが言ってました

214デフォルトの名無しさん2022/02/18(金) 15:36:44.00ID:7ZNuwX6P
cargo check --fix である程度は勝手に修正してくれるんだっけ

215デフォルトの名無しさん2022/02/19(土) 08:57:52.80ID:AlOKsuc0
>>209
C#も親切だけど、Rustはそれ以上だよ
これらに比べると、C++のは情報が無いも同然

216デフォルトの名無しさん2022/02/19(土) 09:04:29.27ID:59REwZPX
何言ってんだこのバカ

217デフォルトの名無しさん2022/02/19(土) 09:05:12.66ID:Wd6uYUeM
C++でハマるのはむしろコンパイル通ったあとだからw
みんなそれはご存知だとは思うけどw

218デフォルトの名無しさん2022/02/19(土) 09:12:00.22ID:l5YLFJyt
Rustはコンパイルが通ればメモリ問題や競合問題が起きず、プログラム自体に専念できるのがいいよな
そしてコンパイラが出すエラーが親切に手取り足取りしてくれて、すぐ修整できてコンパイルも通しやすい

219デフォルトの名無しさん2022/02/19(土) 09:37:18.64ID:AG6SdX6W
>>218
つくづく考えた奴は天才だとおもうわ
逆になんでいままででてこなかったんだろうとも思う
Linuxつくるのもいはいけどそれをつくる道具を作るのが先でもよかったような
linuxを全部rustで書き直したrust-linuxみたいなのを作る奴もそのうち出てきそう

220デフォルトの名無しさん2022/02/19(土) 10:49:58.66ID:lpo/y5Sw
>>219
書き直したとして、1日でビルドできたらいいね

221デフォルトの名無しさん2022/02/19(土) 11:06:51.15ID:UkMRjGML
Rustの考え方の基になったCycloneが目指してたのがまさにそれだね

222デフォルトの名無しさん2022/02/19(土) 11:25:52.64ID:x/upE6G9
>>219
> Linuxつくるのもいはいけどそれをつくる道具を作るのが先でもよかったような
GNUって言うかストールマンはその考えでしょ

> linuxを全部rustで書き直したrust-linuxみたいなのを作る奴もそのうち出てきそう
言い出しっぺの法則ヨロ

223デフォルトの名無しさん2022/02/19(土) 11:45:04.32ID:AG6SdX6W
>>222
いや、マジで俺がやってもいいぞ
誰もやってなかったら俺が次のLinusになれるってことか
むしろお前らは絶対に真似しないでほしい

224デフォルトの名無しさん2022/02/19(土) 12:04:13.57ID:ukdLXHKY
rustのコンパイルが遅いのは依存ライブラリやジェネリスクの実体化によりコード量が多くなっているからで
コンパイラ自体は並列化とか頑張ってて高速という話を聞くけど実際のところCやC++と比較してどうなんだろうね
ヘッダファイル周りの枷がある分CやC++が優位とも簡単には言えない気がする

225デフォルトの名無しさん2022/02/19(土) 12:21:08.88ID:ZWczq9Ua
>>223
真似はしないから一つだけ聞いてみたい
どこから書き直し始める?

226デフォルトの名無しさん2022/02/19(土) 12:59:28.88ID:NbUDuEDT
コンパイラの並列化で
数十コアも効率良く使えるなら
実質的にコンパイル時間は無視できる

227デフォルトの名無しさん2022/02/19(土) 13:06:40.37ID:AG6SdX6W
>>225
main()かな

228デフォルトの名無しさん2022/02/19(土) 13:33:27.92ID:6TS2kFRN
>>227
無理無理w

229デフォルトの名無しさん2022/02/19(土) 14:08:34.48ID:AG6SdX6W
>>228
まあそれは冗談でも「rust os 自作」でググるといろいろでてくるからそれを参考にやってみるわ
rustでOS作ってる先達者が結構いるみたいだからそれを参考にLinuxカーネルの移植をがんばってみるわ

230デフォルトの名無しさん2022/02/19(土) 14:33:33.28ID:ZWczq9Ua
>>227>>229
まあそんなんだろうと思ってたけど、せめてリーナスがなぜLinuxを作ろうと思ったか、どんな哲学で設計したかぐらいは読んでみると良いと思う
タダで読める情報はいくらでもある

231デフォルトの名無しさん2022/02/19(土) 14:47:00.85ID:AG6SdX6W
>>230
「それがぼくには楽しかったから 全世界を巻き込んだリナックス革命の真実」は読んだけどそれじゃだめかな?

232デフォルトの名無しさん2022/02/19(土) 14:48:10.94ID:xNWdpb+t
現時点で2200万行もあるから、完全に移植しようとしたら毎日1万行のコードを移植し続けたとしても、6年はかかるね
そんな爆速で順調に行くわけないし、よっぽどの天才でもなければ1人では生涯に終えるのは無理かな

省ける部分を省くとしたら、何万行になるのかな?

233デフォルトの名無しさん2022/02/19(土) 15:29:14.09ID:AlOKsuc0
>>224
C/C++に比べたら速いよ
でも、C#に比べたらC/C++と同列に遅い、という程度

234デフォルトの名無しさん2022/02/19(土) 15:51:49.27ID:6TS2kFRN
rust触ったことないからわからないけどC/C++よりコンパイル速いわけないじゃん

235デフォルトの名無しさん2022/02/19(土) 16:17:48.81ID:x/upE6G9
Rustのコンパイルが遅いようです。なぜですか?
https://prev.rust-lang.org/ja-JP/faq.html#why-is-rustc-slow

236デフォルトの名無しさん2022/02/19(土) 16:25:04.60ID:oF6CN3LV
>>233
CとC++を一緒にすんな

237デフォルトの名無しさん2022/02/19(土) 16:28:39.65ID:lVeS0ElI
>>235
それ4〜5年前の古い情報
URLにprevとありそのトップページに2018年12月6日とあるように昔のページを残してある

238デフォルトの名無しさん2022/02/19(土) 16:53:58.55ID:V3h8uUoV
>>237
で、これより新しい情報あるの?

239デフォルトの名無しさん2022/02/19(土) 18:57:21.37ID:ukdLXHKY
フルビルドと差分ビルドで区別して議論しないと比較難しいね
あと差分ビルドについてもバイナリ生成までするのかソースのチェックで十分なのかでまた変わってきそう

240デフォルトの名無しさん2022/02/19(土) 21:09:06.50ID:tV1lc2OB
Rustって普及するんすか

241デフォルトの名無しさん2022/02/19(土) 21:24:23.44ID:kSnJ/KwP
いいえ、あなたには必要ありません

242デフォルトの名無しさん2022/02/19(土) 22:54:34.42ID:zY+XWPI2
流行る言語は登場から10年くらいでウワーっと大流行するんだが、Rustにはそんな気配はないから
精々Goとかと同じような感じにしかならんやろなー。

243デフォルトの名無しさん2022/02/19(土) 23:26:45.94ID:lVeS0ElI
>>240
新規案件がC++ではなくRustになっていきつつあるように
じわじわと着実に置き換わっていくのだろう
一方的にC/C++が喰われていくのが止まる理由も見つからん

244デフォルトの名無しさん2022/02/20(日) 02:10:18.88ID:5KrZlkth
Rustの案件なんてないよ

245デフォルトの名無しさん2022/02/20(日) 02:51:48.98ID:Q+YkyZIv
>>242
goレベルでも十分流行ってると言えると思うんだけど

246デフォルトの名無しさん2022/02/20(日) 06:11:08.95ID:rMSJWNa2
>>240
VisualStudioの新規プロジェクトの作成でデフォルトで選べるようになれば普及するだろうね

247デフォルトの名無しさん2022/02/20(日) 09:55:15.25ID:c+ifp9sQ
>>246
C++もVC++が出てから一気にCを喰い始めたしな
なんだかんだWindowsの影響力はめちゃくちゃ大きい

248デフォルトの名無しさん2022/02/20(日) 11:25:19.25ID:Q+YkyZIv
当時と今とじゃデスクトップアプリの置かれてる状況が全然違うと思うけど

249デフォルトの名無しさん2022/02/20(日) 12:09:19.72ID:28EWOJnb
何をもって普及とするかといえば、まだにVB書いてるやつもおるし、組み込みではRustなんて考えられないし、フロントエンドは
JS/TS/Nodeでほぼ不動。そうなるとJava/C#、Railsなどのビジネス系エンタープライズだが、メニーコア用のGoとかのほうが
敷居が低い分だけ人を確保しやすい。言語的な優劣では普及は進まない

当然、高スループットが求められる大企業のエリートでは使われるだろうけど、日本の中小企業で使われるとか想像ができない。
奇々怪々C++は食われていくだろうけど、マイクロコントローラなどでCが食われるなんて無い。データ分析はPythonとかJuliaとか
ビックデータはHadoop・Spark(JavaやPython)だろう

だが当然ながら*nix系は一歩先を進んでるRustだが、ちんまいコマンドラインのプログラムとか、デバイスドライバだとかそういう
分野でしか使えない(使われない)と思う。あとは自動運転なんかのプログラムならRustが使われてたりするが、そういう
技術者はPythonも使えるし、Juliaなんかもすぐ覚えられる。スマホアプリ系もRustなんてありえない

あと残るのはデスクトップアプリケーションとか、これも今はElectron系とかがあるのでネイティブで書く意味があまりない

250デフォルトの名無しさん2022/02/20(日) 12:14:16.60ID:RjCQdBpa
普及なんてしなくていいんだよそもそも
それを必要とするやつの手に届いたら十分なんだよ
C++でやってた分野の一部でもRustで書き換わって
それでメンテする連中がラクできることになって
一方でユーザ側にも恩恵はあるだろうしそういうのでいいんだよ
ド素人のアマチュアプログラマに届く必要はないんだよ

251デフォルトの名無しさん2022/02/20(日) 12:26:24.06ID:TEB+ikpz
普及しなくていいし、してもらいたくない
なぜならうちの会社が業界でトップを維持してる秘密だから
他社のウエブサービスより圧倒的に早くセキュアなのはずばりRustをつかってるから。
その前はLispを使ってた。
だから真似してもらいたくない。
まあ、真似できないたまろうけどw

252デフォルトの名無しさん2022/02/20(日) 12:34:20.56ID:Q+YkyZIv
>>249
これrustに限らず、現状がそのまま続いて新たな言語で置き換わることはないだろうとしか言ってないよね

253デフォルトの名無しさん2022/02/20(日) 12:48:19.88ID:RjCQdBpa
>>251
そういうことやね
それを必要としてるやつはコッソリ一人で握り込んで
それを優位に役立てていくだけのことだから

254デフォルトの名無しさん2022/02/20(日) 12:53:50.15ID:pLBa4/kQ
>>249
組み込みはrust向きなとこなんじゃないのかね。組み込み業界のことは一切知らんからアレだけど。

255デフォルトの名無しさん2022/02/20(日) 13:19:37.41ID:5KrZlkth
Rustが組込向きかどうかはともかく、LinusはC++に対してはCの問題を何一つ解決せず、事態を悪化させるだけと言っていて、Rustについてはドライバを書けるようにするところまでは実際にやってきているらしいよ

256デフォルトの名無しさん2022/02/20(日) 13:40:02.09ID:QnKhevyf
>>249
組み込み以外にミドルウェアらへんでも使われるようになると思う
OS、RDBMS、Webサーバとか

ミドルウェアよりも上位レイヤーのアプリケーションだけで見ると、GCがある言語でもだいたい十分そうだし、Rustは目立たなそう

257デフォルトの名無しさん2022/02/20(日) 13:49:36.22ID:NF24OHT2
rustはc++よりbetter cしてるから徐々に市民権得るだろうな

258デフォルトの名無しさん2022/02/20(日) 14:01:22.11ID:uUEkIMOM
>>251
> 他社のウエブサービスより圧倒的に早くセキュアなのはずばりRustをつかってるから。
おお、なるほど

> その前はLispを使ってた。
ズコーッw

作り話はもっとうまく作れ

259デフォルトの名無しさん2022/02/20(日) 14:21:18.20ID:xQDNRCh/
Rustってクロージャの再代入できない?
null許容することになるから出来ないようにしてる?

260デフォルトの名無しさん2022/02/20(日) 14:31:26.55ID:Q+YkyZIv
型が同じなら再代入可能だけどクロージャはそれぞれ別の型を持つので単純には代入どきない
Box<dyn Fn()>などに変換すればできる

261デフォルトの名無しさん2022/02/20(日) 16:38:17.59ID:xcGmkjoA
>>249
ゲーム系のWASMとか

262デフォルトの名無しさん2022/02/20(日) 18:49:49.78ID:xQDNRCh/
>>260
ふーんそうなの
Box調べてみるわ

263デフォルトの名無しさん2022/02/20(日) 19:16:43.92ID:eM0QoFz6
Lispってセキュアなコード書くのPythonより難しくないか

264デフォルトの名無しさん2022/02/20(日) 22:26:50.09ID:uSEnVnLU
こちらのまわりではスクリプト言語で書かれていた物の高速化でRustへ移行が多いな
レスポンスの意味での高速化もあればリソースとしてのCPUタイム激減もある
使用メモリも激減するためクラウドでもオンプレでも費用支出が激減し桁が変わる場合もある

265デフォルトの名無しさん2022/02/21(月) 08:03:12.70ID:J/Dh0skf
>>255
さすがにc++03とかと比較されても……

266デフォルトの名無しさん2022/02/21(月) 08:27:27.48ID:JVbzDyQT
よく知らんのだけど、カーネル書くのに抽象化って必要なの?
もしいらないんだとしたらC++がカーネル書くのになんのメリットもないと考える気持ちもわかる気がする
Rustの場合は安全性がついてくるので抽象化がなくても使う価値がある

267デフォルトの名無しさん2022/02/21(月) 08:42:47.98ID:OCv9XetQ
Rustのオブジェクトシステムって実際C++のそれと比べたら遥かにわかりやすいよな
traitって概念ほんまありがてえわ

268デフォルトの名無しさん2022/02/21(月) 08:51:29.17ID:NpsKB2au

269デフォルトの名無しさん2022/02/21(月) 08:57:14.48ID:qHKOEqJY
>>266
パッと思い浮かぶのはファイルシステムと仮想ボリュームぐらいだけど、C++がメリットになるとは思えんな

270デフォルトの名無しさん2022/02/21(月) 12:01:24.19ID:L89iNs1x
>>264
DiscordがGoで作られてたバックエンドの一部をRustで書き直したらめちゃくちゃコスト下がったってニュースあったな
C++がRustに置き換わるってよりスクリプト言語やGC言語で作られたものが置き換わっていくのがまず先だろう

271デフォルトの名無しさん2022/02/21(月) 12:15:00.96ID:NpsKB2au
どうでもいいけど、このスレ個人の思い込みと間違いだらけに見えるな

272デフォルトの名無しさん2022/02/21(月) 12:25:54.59ID:R0Wvqlvm
>>270
それは今でも粛々と置き換わってるだろう
Rustが使われるのは、スクリプトやGC言語ではパフォーマンスなどが得られない分野なんだろうと思う

273デフォルトの名無しさん2022/02/21(月) 12:29:39.29ID:/1Q8PAGZ
DiscordがRustに移行した当時のGoは大分ウンコだったけど、今ではわりとマシになっちゃったよ

274デフォルトの名無しさん2022/02/21(月) 12:50:01.46ID:hkBHJMBS
Goってもうジェネリック入った?

275デフォルトの名無しさん2022/02/21(月) 12:51:46.86ID:Vy+crfrM
>>271
隔離スレに多くを求めすぎ

276デフォルトの名無しさん2022/02/21(月) 13:09:04.30ID:NpsKB2au
なんでこうなっちゃったんだろうね。一部の馬鹿が日本をどんどんダメにしてる気がする。もっとちゃんと比較できるよう上手く使えばいいのに。

277デフォルトの名無しさん2022/02/21(月) 13:20:49.36ID:/1Q8PAGZ
>>274
ああ、おれが言いたかったのはGCの停止時間がマシになったよ、ってことだけだよ
言語機能は大して変わってない
でもGenericsは今月中のリリースが予定されてる1.18に載るはず

278デフォルトの名無しさん2022/02/21(月) 13:41:53.53ID:Jx3FjySw
昔マイコンBASICって雑誌があってだな

279デフォルトの名無しさん2022/02/21(月) 14:41:23.11ID:RtL8dE4+
GCがある言語のパフォーマンスが悪いというのは思い込み

280デフォルトの名無しさん2022/02/21(月) 15:52:49.19ID:8WYOAA82
>>279
トータルのパフォーマンスが問題じゃないんだ、予期せず処理が詰まったり急に負荷があがったりするのが問題なんだ。
まぁ今時のGCはストップザワールドは起きないだろうけど。

281デフォルトの名無しさん2022/02/21(月) 17:02:58.71ID:RtL8dE4+
>>280
GCが動いて困る場合は、現状でもC++かCなどで実装されているはず
なので、パフォーマンスを向上させる目的でGCあり言語をRustで置き換えるというのは、あまりないと思われる

282デフォルトの名無しさん2022/02/21(月) 17:03:00.28ID:dkDp5UUZ
>>278
俺はIO派。その前は月間マイコン。

283デフォルトの名無しさん2022/02/21(月) 17:06:01.87ID:dkDp5UUZ
>>281
あるよ。いま、うちがやってる移植プロジェクトはその案件。
他社がそんな考えだから今の所引く手あまた。一社独占。大阪にもう1社あるってうわさだけど。。。
客が数十件待ってる状態。年収軽く3本いくわw

284デフォルトの名無しさん2022/02/21(月) 17:10:20.58ID:RtL8dE4+
まぁ、GCの弊害がわからず採用して実稼働に入って困ったような技術要素選定バグの場合は、言語置き換え対象としてRustが選ばれるケースはあると思う

285デフォルトの名無しさん2022/02/21(月) 17:12:56.49ID:RtL8dE4+
>>283
GCの問題じゃなくてパフォーマンスの問題でリプレースなの?
元言語何?

286デフォルトの名無しさん2022/02/21(月) 17:16:52.14ID:RtL8dE4+
年収3本って3000万ってことか?
内容から、フリーランスでRustへのリプレースを専門でやってる感じだが、個人特定されかねないぞw

287デフォルトの名無しさん2022/02/21(月) 17:17:29.45ID:k9jZTatR
>>283
レアだから現在のcobolみたいなもんか

288デフォルトの名無しさん2022/02/21(月) 17:18:15.19ID:Gf4lGfIx
聞いてもない年収語るような奴の相手すんなよ…

289デフォルトの名無しさん2022/02/21(月) 17:46:13.57ID:hWQuQvUr
Rustに置き換える理由はパフォーマンスより保守性とか堅牢性だと思う
開発者が少ない現状だと単純に保守性向上のためだけに外注するようなケースは少なそうだけど
今のシステムが不安定で改修もままならないからRustで作り直すってケースなら結構ありそう

290デフォルトの名無しさん2022/02/21(月) 17:56:15.16ID:9wSZ8YP/
トヨタなんかの車載システムはCとRustで開発してるとか聞いたことあるが

291デフォルトの名無しさん2022/02/21(月) 17:58:36.91ID:H7trbIGN
車でストップザワールドはまずいわな

292デフォルトの名無しさん2022/02/21(月) 18:02:07.18ID:LC1rF3os
>>281
今までGCありスクリプト言語をRustへ置き換えたり置き換えつつある
GCの有無は条件ではないのだけど速さ省メモリに安全性と書きやすさ等でRustとなった

293デフォルトの名無しさん2022/02/21(月) 18:07:56.53ID:NpsKB2au
9割嘘

294デフォルトの名無しさん2022/02/21(月) 18:30:22.78ID:Vy+crfrM
>>284
サービスの立ち上げ期にGC影響も見越してカリカリにチューニングするってのは早すぎる最適化なんじゃないのかね
rustで他の言語と同じくらいの早さでサービス作れる人材がそろってるなら良いが

295デフォルトの名無しさん2022/02/21(月) 18:32:07.53ID:kwaQcaho
スクリプトからの置き換えとして、VMを配布したくない(JVM/.NETが除外)、それなりに言語機能が欲しい(Goが除外)となるとRustくらいしか残らんのだよな
逆にそれらを許容できるなら別にRustじゃなくていいんだが

296デフォルトの名無しさん2022/02/21(月) 18:34:26.10ID:shT+MRih
Firefoxがいまだに勝てないのに速さとか言われてもな、省メモリならEdgeだし、自分たちがしたいだけでしょ

297デフォルトの名無しさん2022/02/21(月) 18:43:26.39ID:NpsKB2au
VMとかgoとかスレ違い
なんでC/C++/RustでGCとか出てきてんだよ
ム板ならGCの話をするならスレ立てて簡易実装くらい出して、有無の差異、モデルの差異、各言語の比較をしてほしい
前提の違う話を複数絡めて盛りすぎ
※明らかな嘘は論外

298デフォルトの名無しさん2022/02/21(月) 18:50:49.00ID:lBTJyZA6
うちはNode.jsからの移行先がRustになった
JavaScriptよりプログラミングしやすくなった

299デフォルトの名無しさん2022/02/21(月) 22:12:40.35ID:TSmsigpa
C vs C++ vs RustなんてRust圧勝で勝負ついてるんだから話すことなくない?

300デフォルトの名無しさん2022/02/21(月) 22:17:05.24ID:Gf4lGfIx
だったら黙ってれば?

301デフォルトの名無しさん2022/02/22(火) 00:25:06.07ID:5VMYN97O
>>300
なんだよ偉そうに

302デフォルトの名無しさん2022/02/22(火) 07:36:54.62ID:3cXa2TFM
>>299
言語機能としては圧勝なんだが、人やソフトなどの開発環境が惨敗だから困るんだよな

303デフォルトの名無しさん2022/02/22(火) 09:09:32.46ID:5VMYN97O
>>302
今一人勝ちのJavaだってそうなるまでに20年かかったんだから今判断しても意味なくね?

304デフォルトの名無しさん2022/02/22(火) 10:17:05.86ID:5VMYN97O
>>258
Lispとかいたらズコーってされたけど適材適所だと思うぞ
ルンバがLispで書かれているのは知ってるよね?
強力なメタプログラミング機能とインタラクティブな開発が必要なら採用してみてもいいのでは?

305デフォルトの名無しさん2022/02/22(火) 10:34:56.38ID:AiPUeoxY
>>304
セキュアなWebサービスはどうしたんだよw

306デフォルトの名無しさん2022/02/22(火) 11:24:36.79ID:FcgRLtLU
rustに置き換えようとして担当が逃げ出したプロジェクトがかなりあるわ。。これからその地獄がはじまる。

307デフォルトの名無しさん2022/02/22(火) 11:47:19.90ID:5VMYN97O
>>306
うちにもってきてよ。やってあげる。

308デフォルトの名無しさん2022/02/22(火) 12:20:08.49ID:kvixU8HR
どうしたらLispでセキュアなwebサービス作れるん

309デフォルトの名無しさん2022/02/22(火) 12:37:25.61ID:5VMYN97O
>>308
作れないからRustにしたんだよ

310デフォルトの名無しさん2022/02/22(火) 12:41:08.18ID:fFHtSmjB
Lispだろうと多言語だろうと新しめの通信とかSSLとかのライブラリを探すとこからスタートじゃない?

311デフォルトの名無しさん2022/02/22(火) 13:10:26.52ID:gqoJFVcX
Javaは言語登場から10年くらいで多くの人が利用してたし開発環境も続々でとような。

312デフォルトの名無しさん2022/02/22(火) 13:12:29.23ID:G6nBeheJ
明らかな嘘だけになったなw

313デフォルトの名無しさん2022/02/22(火) 13:38:49.42ID:FcgRLtLU
>>307
好きなの、残らず持ってってええぞ
http://jp.indeed.com/Rust%E9%96%A2%E9%80%A3%E3%81%AE%E6%B1%82%E4%BA%BA

314デフォルトの名無しさん2022/02/22(火) 21:22:01.94ID:y2qiytj8
>>306
置き換え元のコードが酷かったんじゃね。C++のコードとかだいたい酷いし。

315デフォルトの名無しさん2022/02/22(火) 21:38:20.03ID:Uj7UhjXB
現役プロダクトのコードを別言語に置き換えるのってrustに限らず大変なのでは
全面的な置き換えはプロダクト全体の再開発に等しい
特定の担当に押しつけるのではなくチーム全体で徐々に新規部分から置き換えた方が成功率高そう

316デフォルトの名無しさん2022/02/22(火) 21:54:32.13ID:B2H8wIkZ
>>314
> C++のコードとかだいたい酷いし。

×だいたい酷い
○すべてが酷い
◎すべてがゲロ以下に酷い

317デフォルトの名無しさん2022/02/22(火) 21:55:58.40ID:WirMN8li
一般的にコードを『置き換える』という気構えだと失敗
少なくとも移植先の言語に合わせて何らかの内部設計のし直しからが最低限のスタート
目的が効率アップにあるなら並行や並列が設計として入ってくるだろうし
目的がGC無くしてメモリ省力化だけであってもデータ構造の見直しは必須など

318デフォルトの名無しさん2022/02/22(火) 22:33:06.33ID:dVa/srT8
ねえねえ
ベクタの特定のターゲットの添え字を返すfind(v, target)を作ったとして、
ターゲットが見つからなかった場合のエラー処理はどうするのが良いと思う?
C/C++だと返り値を整数にして-1だったら見つからなかった、と言う感じが多いと思うんだけど
Result<usize, &str>とかにしてエラー内容を表す文字列を返しちゃう?

319デフォルトの名無しさん2022/02/22(火) 22:36:39.92ID:Uj7UhjXB
>>318
標準ライブラリの関数を使う

320デフォルトの名無しさん2022/02/22(火) 23:06:43.66ID:WirMN8li
>>318
まずRustではそういうのはベクタに対して実装せずにスライスに対して実装する
次にRustではそういったものにはResultではなくOptionを返す
最後にそのような機能は標準ライブラリを使えば色んな意味で間違いがない

321デフォルトの名無しさん2022/02/23(水) 00:15:24.41ID:3kJCLKpV
>>319
>>318
あ〜Optionなんてのがあるのね・・・

322デフォルトの名無しさん2022/02/23(水) 09:54:11.97ID:vCUIsgzX

323デフォルトの名無しさん2022/02/23(水) 10:10:32.07ID:kNrPH1ZT
>>98
しかしC言語技術者は求人市場では圧倒的に不足していると言われてる
どこにいるんだか

324デフォルトの名無しさん2022/02/23(水) 12:37:36.24ID:a0AIymqn
「CやRustが他の言語よりもエネルギー効率に優れていることに驚きはない。衝撃的なのは、その違いの大きさだ。CとRustを広範に採用すれば、控えめに見積もってもコンピュートに使用されるエネルギーの量を50%削減できる可能性がある」とMiller氏は述べ、その根拠として、C、GoogleのGo、Lua、Python、Ruby、Fortranなどをはじめとする複数の言語のエネルギー効率を相対的に示した研究結果を紹介している。
https://news.yahoo.co.jp/articles/399e10841c9a9b776ac5ac3e8402f75da93d17ef

325デフォルトの名無しさん2022/02/23(水) 12:44:28.80ID:vCUIsgzX
>>324
同記事の引用
『プログラムをRustで書き換えることで、サービスは10倍速くなり、レイテンシーも大幅に短縮された。サーバーの数を減らすことができたので、結果的にエネルギー消費量も減少した。

 「エネルギー効率の高い言語はRustだけではなく、昔からあるC言語もエネルギー効率は高い。しかしRustは安全性を犠牲にすることなく、省エネ化を実現した初めてのメインストリームのプログラミング言語だ。CやC++で書かれたプログラムが抱える深刻なセキュリティ脆弱性の70%は、メモリー安全性の問題に起因している。それに対して、Rustは安全性の問題を抱えていると感じることなく、エネルギー効率を高められる」とMiller氏は言う。

 しかし、Rustにも習得の難しさをはじめとする課題はある。

 経験豊富なエンジニアでも、Rustを使いこなすまでには、この分野に詳しい専門家のサポートを受けながら、3〜6カ月の学習期間が必要だとMiller氏とLerche氏は言う。「Rustの習得を、野菜嫌いの克服に例えるエンジニアもいる。使いこなせるようになれば好きになる人が多いが、多くのエンジニアはそうなる前に見切りをつけたり、あきらめたりする。Rustは持続可能性とセキュリティに影響する可能性があるが、その力を発揮するためにはまず、ブロッコリーをブラウニーに変えなければならない』

326デフォルトの名無しさん2022/02/23(水) 14:27:22.03ID:1qABUjpC
コンピューターのエネルギー効率が高い代わりに人間の効率が下がるんですがそれは

327デフォルトの名無しさん2022/02/23(水) 14:41:11.80ID:lP5I9oG+
コンパイル時にめっちゃエネルギー使ってる
Tier 1のプラットフォームの最新数バージョンくらいはバイナリ配布する仕組みがcargoに必要

328デフォルトの名無しさん2022/02/23(水) 14:42:22.66ID:0x8HcgAm
>>326
まぁ作ったあとの稼働と運用考えたら総じてプラスになるでしょ。ならない?

329デフォルトの名無しさん2022/02/23(水) 15:38:19.82ID:5Q12euAa
>>326
一定規模超えたら一気に効率上がるぞ

330デフォルトの名無しさん2022/02/23(水) 16:55:23.95ID:+3d31FNr
>>326
これよく言われるけど言語による生産性の差って定量的にデータ集められてるのかな

331デフォルトの名無しさん2022/02/23(水) 17:27:51.83ID:1qABUjpC
メンテナンスフェーズに入ったとしても、人件費より電気代の方が高くなるようなことってなかなかなくね?
そんな大成功を納めたサービスってどれくらいあるんだろうな

332デフォルトの名無しさん2022/02/23(水) 17:29:51.77ID:Q7pYnx45
>>329
そうそう。
昔はJavaでやろうとしても人材不足でリプレースできなかったけど今は余裕で集められるもんな


lud20220223173607
このスレへの固定リンク: http://5chb.net/r/tech/1643289587/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  

このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ


全掲示板一覧 この掲示板へ 人気スレ | Youtube 動画 >50 >100 >200 >300 >500 >1000枚 新着画像

 ↓「C vs C++ vs Rust Part.3 ->画像>1枚 」を見た人も見ています:
C vs C++ vs Rust Part.2
【sop】Manchester United vs Borussia Dortmund [無断転載禁止]
ヒプノシスマイク DivisionRapBattle RuletheStage どついたれ本舗 VS BusterBros!!!CinemaEdit
XCode VS Visual Studio for Mac
【ブンデス第7節】 1. FC Koln vs FC Ingolstadt 04 [無断転載禁止]
【jsports4】Manchester United vs Manchester City
【sop】Southampton vs Leicester City [無断転載禁止]
【sop】Leicester City vs Manchester City [無断転載禁止]
【sop】Manchester United vs Leicester City [無断転載禁止]
<蓮舫 VS 蓮舫>蓮舫A「聞かれてないから言ってないは不誠実じゃないですか!」 →蓮舫B「聞かれたとおりにお答えしただけ」 [Felis silvestris catus★]
伊藤詩織 VS 山口敬之の裁判、高裁で伊藤詩織の主張の事実認定のレベルからやり直しか 山口敬之に光明 傍聴人がネットで明かす [Felis silvestris catus★]
steamで人気のシミュレータゲームでTレックス20匹 vs ニワトリ10,000匹が生死をかけたバトル [無断転載禁止]
exist trace VS Aldious
NIRVANA VS STONEROSES
【空】日向坂46 vs STU48【海】
MySQL vs PostgreSQL Part2
Keity vs Master K 玉川 対 小宮
MLB AllStarGame AL vs NL 3
MLB AllStarGame AL vs NL 14
【ネット】Bochum vs Stuttgart [無断転載禁止]
Fate/stay night vs 魔術士オーフェン
機動戦士ガンダム EXTREME VS FULL BOOST 家庭版
Fireworks vs Photoshop illustrator
Sheff. United vs Leicester [無断転載禁止]
▶ StreetFighter VS hololive #1121
【sop】Liverpool vs. ManchesterUnited
MariaDB(MySQLは今だけ) vs PostgreSQL Part3
ガンダム EXTREME VS FULL BOOSTは何故衰退したのか
【ネット】 Newcastle United vs Liverpool
Savage Garden vs Westlife どっちが好き?
STU48 vs ババババンビのツーマンライブ開催
【PS3】機動戦士ガンダム EXTREME VS FULL BOOST156
【PS3】機動戦士ガンダム EXTREME VS FULL BOOST155
2007年4月時点での Oracle vs MYSQL vs PostgreSQL
フリーVSTプラグイン Instruments & Effects 9
フリーVSTプラグイン Instruments & Effects 5
フリーVSTプラグイン Instruments & Effects 8
【PS3】機動戦士ガンダム EXTREME VS FULL BOOST232
【PS3】機動戦士ガンダム EXTREME VS FULL BOOST235 [無断転載禁止]
【高速感想】VALORANT Masters ZETA vs DRX part2984
【高速感想】VALORANT Masters ZETA vs DRX part2985
Nintendo Direct 2022.9.13 vs State of Play2022.9.14
欅坂46 『月曜日の朝、スカートを切られた』 VS ももクロ 『BLAST!』 [無断転載禁止]
【対決】SHOWROOMイベント NMB鵜野みずき vs STU瀧野由美子 勝つのはもちろん・・・
【PS3】機動戦士ガンダム EXTREME VS FULL BOOST236 &#169;2ch.net・
【NVIDIA vs AMD】Nintendo Switch 2 vs Steam Deck 性能比較スレ【次世代機代理戦争】
【嫌儲Steam部】ベトコン「『カウガール vs しいたけ』の世界にケンモメンが農業で助けに行く牧場物語を作ったぞ」
PIT vs CHC
ATL vs CHC
PIT vs CHC ★3
PIT vs CHC ★2
NIPPON vs HINOMARU
Ruby VS PHP 仁義なき戦い
Java/C++ VS C# どっちが好きか教えて
【sop】Schalke 04 vs Borussia Dortmund
【sop】Werder Bremen vs Borussia Dortmund
Visual Studio Code / VSCode Part13
Visual Studio Code / VSCode Part14
Visual Studio Code / VSCode Part7
Visual Studio Code / VSCode Part5
Visual Studio Code / VSCode Part10
【sop】Leicester City vs. Tottenham
【SOP】Liverpool vs Leicester City
【SOP】Borussia Dortmund vs Real Madrid
17:37:32 up 11 days, 18:41, 0 users, load average: 12.37, 11.06, 10.20

in 2.2623159885406 sec @2.2623159885406@0b7 on 012507