C++20ライブラリ機能 読書会vol.Ex
https://scrapbox.io/files/655e07307255b8001c015b72.png
開催日時
2024年12月4日(水) 21:00~22:30
開催URL
参加人数
7人
前回
年末にonihusubeさんのご予定が合えば読了記念の会を開きたい(忘年会チックに)
座談会?
↑参加して下さいました
ウォーミングアップ
C++20ライブラリ機能Vol.1
<concepts>
特殊化をうまく使ってGoogleTestの乗っ取りに使った
優先順位を入れ替えることができる
今までは本家をいじらないと実現できなかった
<format>
<bit>
ビット演算
今まではコンパイラ拡張で用意されていた関数が標準で用意されるようになった
bit_cast
待望の機能
<numbers>
今までなかった定数が用意された
それまではC由来のマクロを使っていた
<span>
<source_location>
<coroutine>
<stop_token,jthread>
<semaphore>
counting_semaphoreのリソース数が1つだけの場合がbinary_semaphore
binary_semaphoreとmutexの違い
mutexが行う同期処理がない分semaphoreの方がパフォーマンスが高くなる
semaphoreの方は気を付けて使う必要がある
mutexはロックした人しかアンロックできないが、semaphoreは誰からでもアンロックできる仕様
NVIDIAが推して入った
GPUで同期しようとするとセマフォが必要になる
semaphoreはプリミティブ(部品)
mutexはこのsemaphoreを使って実装
さらにこのプリミティブがあるらしい
atomic_wait,atomic_notify_one
詳しくは「C++20ライブラリ機能Vol.2」をチェック!
<latch,barrier>
<syncstream>
<chrono>
<compare>
<version>
<flat_map>はいつ実装されるのか?(C++23)
Clangが一部実装
お悩み雑談室
module使ってます?
完全新規のプロジェクトなら使うだろうけど・・・
すでにあるものは変更したくない・・・
実装されているのはMSVCだけで可搬性がない
headerのほうが便利な点
特殊化を用意する時
早くなるケース・ならないケース
神オブ神インクルードがあるところが早くなる
インクリメンタルビルド
1つの翻訳単位にいっぱいインクルード、という形であれば結局全ビルドするがモジュールだとビルドが抑えられることが期待できる
moduleとテンプレート
うまい感じになる
1つの関数といっぱいのテンプレート
~
そのケースだとあまり恩恵がないかも
テンプレートを明示的にインスタンス化
ClangとMSVCを比較するとMSVCが遅くなる
header units
インクルードとモジュールの中間みたいなもの
インクルードを置き換えるだけでいける
ちゃんと動くかは謎
相互依存しているヘッダとかはこれだとムリ
前方宣言で回避できるような部分がムリ
モジュールとインクルードで書き方が異なる
ちっちゃいツールのソース(2,30くらい)をモジュールに機械的に置き換えたがスムーズにいけた
インクルードなくなるのはうれしい
two phase name lookup
strcpy_sがandroid NDKにはなくて困っている話
テンプレート版のstrcpy_sしか使っていないので#define strcpy_s strcpyしている
自前実装しといた方が・・・
いつか火種になる
ほかの人が真似してしまう
ranges::copyに置き換えるという手がある
sprintf_sもやばい
strcpy_sは自分で実装できるけどこちらはさすがにムリ
register話
registerキーワードが何に再利用されるか興味津々
使われてるコードがあったからそっと消した
warning出すぎ問題
warning減らすスペシャリストをアサインして減らした
すっごい減らしてまだ900残ってる
毎日1つずつ減らすプルリクを出している
Macの警告は諦めてる
C++を開発する環境じゃない・・・
apple-clang
微妙に古い
gccって打ってるのにclangが動く衝撃
Macのライブラリアンはどういう環境で開発してるの?
Apple Silicon MacではIntel Macで動くバイナリを作れない
逆はロゼッタで動く
Intel Macが貴重になってきてる
ポンコツ扱いがいつの間にか重宝される存在に