C++20 コア言語機能読書会vol.6
開催日時
2022年5月11日(水) 19:30~21:00
開催URL
参加人数
2人
ウォーミングアップ
「C++20コア言語機能」を読んで試すためのソースコードを保管するリポジトリを作成しました
前も完成したけどDefectの嵐で再度せざるを得ない状況に
p.33 2.4コルーチン
C++20の範囲ではライブラリみたいなものしか存在しないので、便利に使おうと思うとC++23以降を待たないといけない
ほんとに順次導入の予定なの?
続々予定されてる
p.33 2.4.1 std::generator<T>~
std::generator<>はC++23導入予定
現在のMSVCでもコンパイルできなかった
関数を抜けてもそのローカル変数が残り続けているのは不思議な感じ
関数を抜けてもスタックを解放せずスタックポインタを覚えておく
p.34 2.4.2 std::lazy<T>
std::lazy<>もC++23導入予定
rustでもco-routineや非同期って入ってますか?
バチバチに入ってる
言語仕様的にコンパイル時にエラー検知できたりする
テスト機能も同梱
lazyという単語がしっくりこない
lazy=遅延
lazy task
返ってくるまで待機するという意味が含まれている
std::lazy、C++23に間に合わんかも
悲しい
2.4.3 コルーチン動作概要
co_await, co_yield, co_return いずれかの呼び出しが含まれると、その関数はコルーチンとして認識される
coro_f()の可変長引数テンプレートの記述がおかしい
そもそも関数の初めにtemplate <class... Args>がない
「...」の位置がおかしい
coro_f(Args args...)ではなくcoro_f(Args... args)
ここのArgsはusing promise_type = std::coroutine_traits<R, Args...>::promise_typeで使用される
ラムダ式をジェネレータにできるとうれしい
co_yield間のデータやり取りにはstd::lazyが必要
わざわざ関数を作るのがめんどくさい
スキ
動的メモリ確保
これは中断時ではなくコルーチン開始時の話
LLVM Clangだと最適化あり。軽量スレッド
コンパイル時にcoroutineを検知して実行開始時にcoroutine用の領域を確保する
coroutine frame
p.37 上記例中のpromise_typeは~
次回ここから
お悩み雑談室
他人の書いたソースコードを読み解いて移植するのタイヘン
次回は試しに21時からの開催にしてみます