闘え
※前スレ
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/
探検
C vs C++ vs Rust Part.3
■ このスレッドは過去ログ倉庫に格納されています
2022/01/27(木) 22:19:47.56ID:avZQ9Wm7
2022/01/28(金) 08:42:08.00ID:3x0JFp6u
Cは誤解を恐れずに言えばアセンブリ言語みたいなもんだからな
2022/01/28(金) 13:14:51.22ID:7T77Q24K
>>13
C++ 98以前は Cと似てるし、ライブラリも言語とは無関係に自由に作れたから大丈夫。C++11以後はダメ言語になった。
C++ 98以前は Cと似てるし、ライブラリも言語とは無関係に自由に作れたから大丈夫。C++11以後はダメ言語になった。
2022/01/28(金) 13:17:06.82ID:7T77Q24K
そもそも、CやC++が普及したのはTurboCのおかげ。
TurboCはライブラリが分かり易かった。
C++11以後、言語もSTLも両方腐っていてTurboCとは全く違うようになり、
人気もがた落ちになった。
TurboCはライブラリが分かり易かった。
C++11以後、言語もSTLも両方腐っていてTurboCとは全く違うようになり、
人気もがた落ちになった。
2022/01/28(金) 15:22:28.01ID:ePoQjqFg
何頓珍漢な事言ってんだこのバカ
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
OSによるプロセスやOSスレッドのスケジューラではなく
プロセスの中で動くタスクのためのスケジューラ
各言語によって言語機能として備えている場合と外部ライブラリによる場合がある
Rustではその中間の形態で言語機能としてはasync/awaitの枠組みのみ提供
さらに標準ライブラリとしてFutureやWakerなどの必要とする定義のみ提供
実際に動作するスケジューラは外部ライブラリで様々な提供がなされ自作もできる
その他はこのスライドの前半の解説など参照
Rustのasync/awaitとスケジューラの話
https://speakerdeck.com/osuke/rust-async-await
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も通ったのだが実は落とし穴があることに気付いた
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も通ったのだが実は落とし穴があることに気付いた
2022/01/28(金) 21:49:38.11ID:YDzvJ7+G
元のJSのコードもだけど
await連発すんなよw
await連発すんなよw
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秒かかってしまい期待と異なり直列に実行されていた
肝心なことを忘れていた
同時に指定値を返せないようなので数値化と足し算の意味はないが遅延時間を知りたかった
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秒かかってしまい期待と異なり直列に実行されていた
肝心なことを忘れていた
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秒となり並行に実行された
言語自体に魔法の仕組みはなく自分で明示的にスケジューラに登録指定するのはわかりやすくて安心した
そのスケジューラも手作りできるらしく興味深い
しかし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秒となり並行に実行された
言語自体に魔法の仕組みはなく自分で明示的にスケジューラに登録指定するのはわかりやすくて安心した
そのスケジューラも手作りできるらしく興味深い
2022/01/28(金) 23:23:01.28ID:JUEBwV02
自分でblock_on書かないとRustのasyncは身に付かない
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する以前に最初からスケジューラの掌の上で踊っていたのであった
じゃないと全体を並行に実行できないもんな
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する以前に最初からスケジューラの掌の上で踊っていたのであった
じゃないと全体を並行に実行できないもんな
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を返す状態へ遷移
結局スタックレスなコルーチンを実現しているだけなので非常に軽い
例えばasyncブロック内にfuture1.awaitとfuture2.awaitが順に呼び出されるとする
最初はfuture1をpollする状態でpending中はpendingを返す
そこでreadyになればfuture2をpollする状態へ遷移
そこでもreadyになれば全体としてreadyを返す状態へ遷移
結局スタックレスなコルーチンを実現しているだけなので非常に軽い
26デフォルトの名無しさん
2022/01/29(土) 22:23:27.99ID:12259hRt 起動も切替もスレッドより軽くてリソースも喰わないなら
非同期タスクの欠点は何だ?
非同期タスクの欠点は何だ?
2022/01/29(土) 23:26:45.54ID:7irU+4ae
Rustの場合軽量タスクはプリエンプティブじゃないので、変なコーディングすると特定のタスクが実行され続けて、他のタスクがいつまでも実行されないことがある
あとは、OSのスレッドじゃないからスレッドの属性や権限をタスク単位で異なる物にすることはできないとか
あとは、OSのスレッドじゃないからスレッドの属性や権限をタスク単位で異なる物にすることはできないとか
2022/01/29(土) 23:44:38.93ID:AW7V4mOd
>>27
前者は間違えて同期ブロッキングする関数を呼んでブロックしてしまった場合
および長時間ずっと全く非同期関数を呼ばずに計算し続けるか暴走する場合
これらはバグならfixで解決
バグでないなら非同期タスク実行スレッドとは別に専用スレッドを用意して実行できるスケジューラもあるのでそれを利用
前者は間違えて同期ブロッキングする関数を呼んでブロックしてしまった場合
および長時間ずっと全く非同期関数を呼ばずに計算し続けるか暴走する場合
これらはバグならfixで解決
バグでないなら非同期タスク実行スレッドとは別に専用スレッドを用意して実行できるスケジューラもあるのでそれを利用
2022/01/30(日) 00:54:30.09ID:zeCbxF6p
>>28
同じ処理でも入力内容次第で変わるからそんな簡単にいかないよ
同じ処理でも入力内容次第で変わるからそんな簡単にいかないよ
2022/01/30(日) 01:16:02.14ID:iWlFH2We
async-stdならgoみたいにタスクが一定時間経っても制御返してくれないときに勝手にスレッド起こしてくれるんじゃなかったっけ
2022/01/30(日) 18:58:15.77ID:9ei8l7Ku
>>29
入出力が行なわれたらタスクのスイッチングが発生するので
意図的にブロッキングするものを呼んでブロックしているケースを除くと
いつまでもタスクが切り替わらないのは演算のみを延々と続けるケースのみになる
対応策としては自分で定期的に手放すか以下の方法で回避
>>30
それは様々な問題点で中止
結局tokioもasync_stdもそのような特殊ケースはspawn()の代わりにspawn_blocking()することで
タスクのスイッチングに影響が出ないように別スレッドで実行させる方針
その場合は結局スレッドを自分で起動して同期ブロッキングで使う昔からの方法と実質同じだが
そのような特殊なケースも含めて統一的にタスクを扱える
入出力が行なわれたらタスクのスイッチングが発生するので
意図的にブロッキングするものを呼んでブロックしているケースを除くと
いつまでもタスクが切り替わらないのは演算のみを延々と続けるケースのみになる
対応策としては自分で定期的に手放すか以下の方法で回避
>>30
それは様々な問題点で中止
結局tokioもasync_stdもそのような特殊ケースはspawn()の代わりにspawn_blocking()することで
タスクのスイッチングに影響が出ないように別スレッドで実行させる方針
その場合は結局スレッドを自分で起動して同期ブロッキングで使う昔からの方法と実質同じだが
そのような特殊なケースも含めて統一的にタスクを扱える
2022/01/30(日) 20:50:10.05ID:dly2JmLT
>>31
延々と演算を続ける意図はなかったのに結果としてそうなる場合があるということ
それを最初から想定できてyieldを挟めるなら問題ないのだが現実はそうはなっていない
https://tokio.rs/blog/2020-04-preemption
延々と演算を続ける意図はなかったのに結果としてそうなる場合があるということ
それを最初から想定できてyieldを挟めるなら問題ないのだが現実はそうはなっていない
https://tokio.rs/blog/2020-04-preemption
2022/01/30(日) 21:57:34.87ID:C4ZQL08k
そのbudget方式は戻ってこないとペナルティ与えられないから本質的な解決になっていない
yield相当をコンパイラが上手く挟むのも無理だからプログラマーが自らすればいい
yield相当をコンパイラが上手く挟むのも無理だからプログラマーが自らすればいい
2022/01/30(日) 22:13:02.89ID:46YJeJfB
歴史から学ばない人
2022/01/31(月) 00:52:40.26ID:wgfsi16C
歴史ってのがマルチタスクOSにおける cooperative vs preemptive の話だとするなら前提が違いすぎない?
任意のアプリケーションが動く可能性のあるOSと自身のプログラムのルーチンが実行されるアプリとではスケジューラに求められる制約条件は違って然るべきかと
任意のアプリケーションが動く可能性のあるOSと自身のプログラムのルーチンが実行されるアプリとではスケジューラに求められる制約条件は違って然るべきかと
2022/01/31(月) 07:30:22.38ID:qlFEomu1
シングルスレッドかつcooperativeなJavaScriptがNode.jsを含めて成功しているように問題なく動作する
同期ブロッキングを完全排除してしまえばタスク切り替えが起きない場合すなわちスケジューラに戻らない場合は
入出力もなくループでメモリ上演算を繰り返している場合となる
そのような場合でもループ内で自分で定期的にスケジューラへ制御を戻してやればよい
そのためにRustではtask::yield_now()がある
同期ブロッキングを完全排除してしまえばタスク切り替えが起きない場合すなわちスケジューラに戻らない場合は
入出力もなくループでメモリ上演算を繰り返している場合となる
そのような場合でもループ内で自分で定期的にスケジューラへ制御を戻してやればよい
そのためにRustではtask::yield_now()がある
2022/01/31(月) 10:15:42.24ID:O/M0tTc6
イベントループがハングアップした時の対処とか考えたことないでしょ?
バグだからfixすればいいじゃ能がない
歴史に学ぶといいよ
バグだからfixすればいいじゃ能がない
歴史に学ぶといいよ
2022/01/31(月) 10:24:59.23ID:qlFEomu1
>>37
GoやJavaScriptなどは言語内蔵だが問題が起きたことはない
Rustは言語から切り離されているが同様
いずれもそれらのランタイムの製作者以外がその部分のコードを触ることはなくバグが発生しようがない
GoやJavaScriptなどは言語内蔵だが問題が起きたことはない
Rustは言語から切り離されているが同様
いずれもそれらのランタイムの製作者以外がその部分のコードを触ることはなくバグが発生しようがない
2022/01/31(月) 10:27:00.53ID:/Hwves02
2022/01/31(月) 10:46:15.49ID:5QuAHu0k
イベントループがハングアップするってなに?
epoll_waitをブロッキングで使う場合でもタイムアウト設定すればハングアップなんてしないでしょ?
epoll_waitをブロッキングで使う場合でもタイムアウト設定すればハングアップなんてしないでしょ?
2022/01/31(月) 11:35:28.84ID:BNlzdeLS
タイムアウト設定忘れみたいなバグの話でしょ
そんなに引っ張る話でもないと思う
そんなに引っ張る話でもないと思う
2022/01/31(月) 12:52:34.54ID:qlFEomu1
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を扱わなくてよくなった
だから自分のミスでイベントループがハングアップすることはなくなった
それ以前の歴史では色々あったが状況が変わった
しかし非同期タスクのイベントループは非同期スケジューラの中にあって自分でepollやselectを扱わなくてよくなった
だから自分のミスでイベントループがハングアップすることはなくなった
それ以前の歴史では色々あったが状況が変わった
2022/01/31(月) 13:51:12.77ID:dnOSCP4X
はいはい、理想的な環境で羨ましいですね
これでいいかな?w
これでいいかな?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が登場して非同期並行プログラミングのしやすい環境も装備されたという流れ
両者は方向性が真逆だけどそこが共通点で時代の要請
逆にC++が振るわないのは非同期並行プログラミングのしにくさ
その状況でRustが登場して非同期並行プログラミングのしやすい環境も装備されたという流れ
2022/01/31(月) 18:03:53.30ID:dLpRlGxR
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にタスクスイッチの制御を委譲できる)
そうだよ
ここで言うタスクはtokioやasync-stdの用語のタスクのことね
spawn_blockingでタスク生成すれば専用スレッドが割り当てられるので特定のタスク選んでプリエンプティブにできる (OSにタスクスイッチの制御を委譲できる)
2022/01/31(月) 19:03:44.27ID:wgfsi16C
2022/01/31(月) 19:28:57.02ID:UHXhumHV
>>54
それはレイヤーが違う
まずOSスレッドは何をしようが常にプリエンプティブ
だからOSスレッド上で動いているタスクも途中で一時中断されたり再開されたりしうる
だからといってタスクをプリエンプティブだと言わないのはタスクの階層で話をしているため
タスクスケジューラに制御を戻さない限り他のタスクに切り替わらないため「プリエンプティブではない」と言われる
次にspawn_blockingで起動されるのもタスクの一つ
だからタスクスケジューラが管理するスレッドの中で動く
それがspawnだと一つのスレッドに対するキューに複数のタスクが割り当てられる
一方でspawn_blockingは一つのスレッドに対するキューにそのタスクのみが割り当てられる
それだけの違いであり両者ともにタスクスケジューラの管理下にあるタスクである
もちろん動作中も終了後もタスクとして同じ扱い
つまりspawn_blockingはプリエンプティブにするものではない
同じタスクでありスタックレスなコルーチンであることも同じ
>>55
その意見は成立していない
それはレイヤーが違う
まずOSスレッドは何をしようが常にプリエンプティブ
だからOSスレッド上で動いているタスクも途中で一時中断されたり再開されたりしうる
だからといってタスクをプリエンプティブだと言わないのはタスクの階層で話をしているため
タスクスケジューラに制御を戻さない限り他のタスクに切り替わらないため「プリエンプティブではない」と言われる
次にspawn_blockingで起動されるのもタスクの一つ
だからタスクスケジューラが管理するスレッドの中で動く
それがspawnだと一つのスレッドに対するキューに複数のタスクが割り当てられる
一方でspawn_blockingは一つのスレッドに対するキューにそのタスクのみが割り当てられる
それだけの違いであり両者ともにタスクスケジューラの管理下にあるタスクである
もちろん動作中も終了後もタスクとして同じ扱い
つまりspawn_blockingはプリエンプティブにするものではない
同じタスクでありスタックレスなコルーチンであることも同じ
>>55
その意見は成立していない
2022/01/31(月) 19:56:01.95ID:wgfsi16C
2022/01/31(月) 21:28:17.75ID:L8OnQfxN
2022/01/31(月) 22:11:33.46ID:qlFEomu1
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/
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
2022/01/31(月) 23:18:46.34ID:9ggC0jgK
2022/01/31(月) 23:21:44.46ID:9ggC0jgK
Node.jsはタスク単位で高い信頼性が求められるシステムでは使われない
イベントループがブロックしたら他のタスクを道連れにしてプロセス丸ごと再起動する以外に対処法がないから
それもexecution managerできちんとモニタリングしてればの話
JSやNodeとRustとはポジショニングが違う
イベントループがブロックしたら他のタスクを道連れにしてプロセス丸ごと再起動する以外に対処法がないから
それもexecution managerできちんとモニタリングしてればの話
JSやNodeとRustとはポジショニングが違う
2022/01/31(月) 23:28:55.88ID:qlFEomu1
2022/01/31(月) 23:47:16.39ID:UHXhumHV
>>64
Node.jsまで否定し始めるとは発狂もほどほどに
Node.jsまで否定し始めるとは発狂もほどほどに
2022/02/01(火) 01:18:54.05ID:NlOJHFhB
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もサポートし現在の軽く便利な環境となった
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
2022/02/01(火) 16:14:56.52ID:fJKShZ3h
2022/02/01(火) 17:44:48.05ID:IGt6++7z
75デフォルトの名無しさん
2022/02/01(火) 23:44:18.44ID:rLXhSAw+ 話題になってる分野だとC++が惨敗すぎて
Rustの話題一色になってしまってる感じ
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++のシェアを塗り替えていく程度だろうけど、そういう低レイヤーでは最強言語になりそう
Rustはそういうポジションにつくことないだろうから、現在のGoほどの人気になることはないんじゃない?
RustはC/C++のシェアを塗り替えていく程度だろうけど、そういう低レイヤーでは最強言語になりそう
2022/02/02(水) 15:03:25.91ID:6tF6MeYL
RustがTIOBE Indexに出てくるのはいつなんだろう?w
https://i.imgur.com/DNijd0h.jpg
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++での非同期並行プログラミングについても語って欲しい
そんなことは興味がないので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とかより上なんだが
今26位で、Kotlin, Lua, Scalaとかより上なんだが
2022/02/03(木) 17:52:10.90ID:6/rx3Wgr
>>86
COBOLより下なんかwwwww
COBOLより下なんかwwwww
2022/02/03(木) 18:30:47.00ID:VWdjVpzZ
KotlinやScalaは結局流行らずJavaで十分だし
Luaも一時期熱狂したけど記法や環境が多くの人の好みに合わずPerlのように嫌われてる
RustもC/C++で十分という認識が強くて普及せずに一部の通好みに終わる可能性がある
Rustは有力企業もプッシュしてるけど三つの言語の流行らない特徴を全て備えてる
そうこうしてるうちにRustより優れた言語がぽっとでて席巻する未来だってある
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みたいに昔から一定の人気を保ち続けてるような言語がランキング高くなりやすいんじゃないかな
CとかVBみたいに昔から一定の人気を保ち続けてるような言語がランキング高くなりやすいんじゃないかな
2022/02/03(木) 19:24:04.62ID:I6DodtQJ
GitHub上の活動に基づいたランキングの方がプログラマ間の流行を知るには良いのかな
https://madnight.github.io/githut/#/pull_requests/2021/4
https://madnight.github.io/githut/#/pull_requests/2021/4
2022/02/03(木) 19:40:42.80ID:NxnOaIbO
せやな
TIOBEはJavaScriptとアセンブラが隣の順位に並んでるとかおかしすぎるやろ
TIOBEはJavaScriptとアセンブラが隣の順位に並んでるとかおかしすぎるやろ
2022/02/03(木) 21:31:55.43ID:8HqROgrm
>>88
Scalaも当時は熱狂的なファンがいたよなw
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倍の差がある。
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++でもあるんだから足したらだめでしょ
C vs C++でもあるんだから足したらだめでしょ
100デフォルトの名無しさん
2022/02/04(金) 00:35:47.48ID:tMDf8XuC >>91
VisualBasicは結構使われているのではなかろうか。Excelなどで。
アセンブリは、基礎的なライブラリを作る人や組み込み、OS、BIOS
を作ったり、グラフィックや数値計算の高速化を行う場合に必要な場合がある。
VisualBasicは結構使われているのではなかろうか。Excelなどで。
アセンブリは、基礎的なライブラリを作る人や組み込み、OS、BIOS
を作ったり、グラフィックや数値計算の高速化を行う場合に必要な場合がある。
101デフォルトの名無しさん
2022/02/04(金) 00:36:35.60ID:tMDf8XuC102デフォルトの名無しさん
2022/02/04(金) 00:44:19.25ID:uF1Qc9S6 >>101
いやいや、スレタイ通りこのスレではCとC++は対立する物として区別すべき
いやいや、スレタイ通りこのスレでは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も実装されてないとか
autoとラムダとdecltypeくらいでやめときゃいいのにあとでボツになりそうな仕様までモリモリに盛りやがって下手したらobjective-cみたいになりそう
なのにいまだにpropertyも実装されてないとか
106デフォルトの名無しさん
2022/02/04(金) 06:48:54.05ID:GRC0hKFU conceptsは許せる
107デフォルトの名無しさん
2022/02/04(金) 08:29:55.22ID:rPvrWkyY108デフォルトの名無しさん
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以後は、宿主を殺すウイルス的な存在に成り下がった一例。
TYPE a = b;
の形式が非推奨で、
TYPE a{b};
が推奨になった。
これは、C/C++の今までの伝統を全否定している。
C++11以後は、宿主を殺すウイルス的な存在に成り下がった一例。
111デフォルトの名無しさん
2022/02/04(金) 11:28:12.62ID:i2fLUlAL112デフォルトの名無しさん
2022/02/04(金) 11:33:17.83ID:O81zVfQh >>110 みたいな爺さんは書き方変わるだけでアタフタw
113デフォルトの名無しさん
2022/02/04(金) 12:53:41.07ID:6YwPoRaj■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「国民の憤りを引き起こした」中国側“高市首相発言の撤回改めて要求” [どどん★]
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 【インバウンド】中国からの“渡航自粛”…ツアー1000人分の直前キャンセル「キャンセル料は免除してくれ」 ことしいっぱいキャンセルに [1ゲットロボ★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★3 [ぐれ★]
- 【芸能】日中関係悪化でエンタメ業界に大ダメージ… JO1の中国でのイベント中止、邦画は公開延期、STARTOアイドルへの影響も [冬月記者★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- Perfume・あ~ちゃんの結婚相手の一般男性、吉田カバンの社長と判明 [977261419]
- 自民党議員「高市は先人が築き上げた日中関係を壊した。外務省が謝罪に言ってるが自分で責任を取れ」 [834922174]
- まみちゃん
- ちっしゃーねーな。俺が習近平のアナルに武力侵攻してきてやるよ
- 岡田克也「軽々しく存立危機事態とか言うべきじゃない」高市早苗「台湾で武力攻撃が発生したらどう考えても日本の存立危機事態」 [931948549]
- Doraemon's Solus
