yohhoyの日記

技術的メモをしていきたい日記

2019-01-01から1年間の記事一覧

独自診断メッセージ diagnose_if属性

Clangコンパイラはユーザ定義のコンパイル警告/エラーメッセージ出力を行うdiagnose_if属性を提供する。 The diagnose_if attribute can be placed on function declarations to emit warnings or errors at compile-time if calls to the attributed funct…

電子書籍"Modern C (2nd Ed.)"

C

最新C17までカバーした、モダンなC言語プログラミングに関する電子書籍。PDF形式(315頁)はCC BY-NC-ND 4.0ライセンス。 https://modernc.gforge.inria.fr/ , Jens Gustedt https://gustedt.wordpress.com/2019/09/18/modern-c-second-edition/

イテレータに->演算子オーバーロードは必要?

C++標準ライブラリが定める InputIterator 要件(requirement) と input_iteratorコンセプト(concept) の変遷についてメモ。まとめ: C++2a(C++20) input_iteratorコンセプトではイテレータ型にoperator*オーバーロードのみ要求する。operator->オーバーロー…

same_asコンセプトとSymmetric Subsumption Idiom

C++2a(C++20)ライブラリ提供の標準コンセプトstd::same_as、およびコンセプト定義における対称包摂イディオム(Symmetric Subsumption Idiom)についてメモ。制約式std::same_as<X, Y>と制約式std::same_as<Y, X>は対称関係、つまり互いに一方が他方を包摂する(subsume)関</y,></x,>…

20分くらいでわかった気分になれるC++20コルーチン

20分くらいでわかった気分になれるC++20コルーチン本文こちら→C++ MIX #5に参加しました - yohhoyの日記(別館)スライド資料:https://www.slideshare.net/yohhoy/20c20 関連URL C++コルーチン拡張メモ(N4736) - yohhoyの日記 C++コルーチン拡張メモ - Qi…

コンセプト制約式の包摂関係とオーバーロード解決

C++2a(C++20)で導入されるコンセプト(concept)に関して、制約式(constraint-expression)間の包摂(subsume)ルールに基づくオーバーロード解決のメモ。本記事の内容はStackOverflowで見つけた質問と回答に基づく。要約:制約式の包摂関係(subsumption relation…

va_argマクロの奇妙な制限事項

C言語の可変引数リストアクセス用 va_arg マクロにおける奇妙な制限事項についてメモ。va_argマクロの第二引数へ指定する型名には、“関数ポインタ型” や “配列へのポインタ型” を直接記述できない。ただしtypedefによる別名であればOK。こんなコード書くやつ…

C++標準コンセプトの名前付けガイドライン

C++2a(C++20)標準ライブラリに導入される コンセプト(concept) の名前付けガイドラインについて。2019年Cologne会合にて (PDF)P1754R1 が採択され、Ranges TS提案当初から PascalCase 形式で検討されていた命名規則から snake_case 形式へと変更された。これ…

フライングWindows API待機関数

Windows APIのタイムアウト指定待機関数では、指定期間よりも僅かに早くタイムアウト発生する。この振る舞いは仕様通り(by design)とのこと。 WaitForSingleObject, WaitForSingleObjectEx WaitForMultipleObjects, WaitForMultipleObjectsEx MsgWaitForMult…

nan("is Not-a-Number")

C C++

プログラミング言語C/C++における浮動小数点数 NaN(Not-a-Number)*1 について。C/C++標準ライブラリはquiet NaN*2を返すnan関数を提供し、同関数では処理系定義(implementation-defined)のタグ文字列を受け取る。一般的には空文字列""を指定するが、ライブラ…

CUDA同期メモリ転送関数 != 同期動作

CUDAメモリ転送系関数の Async サフィックス有無*1と、実際の同期(synchronous)/非同期(asynchronous)動作は1:1対応しない。Asyncサフィックス無しメモリ転送関数でも、条件によっては非同期動作となる可能性がある。 API synchronization behavior The API…

Hidden Friends

C++

プログラミング言語C++におけるライブラリ設計で「ADL(Argument Dependent Lookup)経由でのみ呼び出し可能な非メンバ関数/演算子オーバーロード 定義」を実現するテクニック。2019-12-03追記:2019年11月会合にて (PDF)P1965R0 が採択され、C++標準規格上の…

定数式を要求するコンセプト

C++2a(C++20) Conceptを利用した「ある式が定数式であること」を要求する制約式の定義。型パラメータTに対して「T::size()がコンパイル時に評価されること」を要求するコンセプトHasConstantSizeの定義例。requires式(requires-expression)中の typename typ…

書式指定子の入れ子

プログラミング言語Pythonの str.format や f-string*1 において、書式指定子部のみ1段階の入れ子が許容される。下記コードではいずれも文字列 Hello!!!!! が得られる。 msg = 'Hello' '{:!<10}'.format(msg) f'{msg:!<10}' f, a, w = '!', '<', 10 '{:{}{}…

オーバーロード解決の優先順位制御

C++

プログラミング言語C++における関数テンプレートのオーバーロードにおいて、SFINAEと組み合わせてオーバーロード解決の優先順を制御するテクニック。 選択候補が2個のケース 2つの型T, Uに対して、1) 演算 T / U が定義されていれば同演算子を、2) そうでな…

Customization Point Object

C++2a(C++20)標準ライブラリに導入される Customization Point Object についてメモ。*1まとめ: Customization Point == ユーザ定義型に対して事前定義した動作カスタマイズ可能点。具体的な処理実装ソースコードから呼び出される名前。 2021-06-29追記:C+…

swap(T, U)とis_swappable_with<T, U>とvector<bool>

C++17標準ライブラリには「型が異なる変数間での値交換(swap)」可能か否かを判定するメタ関数std::is_(nothrow_)swappable_with<T, U>が存在する。一般的には値交換操作は同一型変数間(swap(T&, T&))で行われるが、プロキシ型(proxy)のような特殊ケースにおいて異</t,>…

Goodbye "bit" in C++, (Partially)

C++2a(C++20)言語仕様の定義においては、用語 "bit" の利用はできるだけ回避される(完全に無くなる訳ではない)。これはC++2a言語仕様変更「符号付き整数型==2の補数表現を保証」の影響。提案文書 P1236R1 Alternative Wording for P0907R4 Signed Integers…

Win32 Debug CRT Heap Internals

Windows OS上のMicrosoft Visual C++(MSVC)ランタイムライブラリにおける、デバック動作時のヒープメモリ管理用内部データ構造情報。 Win32 Debug CRT Heap Internals

ラムダキャプチャ中での前置ellipsisと後置ellipsis

プログラミング言語C++において可変長引数テンプレートパラメータパックをラムダ式でキャプチャする際、そのキャプチャ方式によってellipsis(...)の前置/後置が異なることに注意。 template <typename... Ts> void func(Ts... xs) { // C++11以降: 簡易キャプチャ(simple-ca</typename...>…

SecureStringクラスは非推奨

.NET Frameworkで提供される System.Security.SecureStringクラス は、新規コードでは利用しないこと。 .NET CoreからはSecureStringクラスは削除されている。 MonoではSecureStringクラスはデータ保護を行わない(mono-5.18.0.245現在) ImportantWe don't …

オブジェクトのDrop順序

プログラミング言語Rustにおける、オブジェクトデストラクト(Drop)順序についてメモ。[本記事はRust 1.32/Stable準拠] 変数は、その変数宣言順序の逆順。 ただし同一パターン内の変数同士では、順序未規定(unspecifined)。 構造体(struct)、タプル、列挙型…

Andrew’s C/C++ Token Count Dataset 2016

C++ C

プログラミング言語C/C++のトークン(記号・キーワード・識別子名など)出現頻度を調査したデータセット。約1.1万のOSSパッケージ/256万行のソースコードから5032万個のトークンを抽出。 (PDF) Andrew’s C/C++ Token Count Dataset 2016 (ACTCD16) http://w…

C++ Conceptsの短縮構文(P1141R2)

次期C++2a(C++20)標準規格に向けて採択された、コンセプト(concept)関連の短縮構文についてメモ。C++コンセプト概略ついては id:yohhoy:20170904 を参照のこと。本記事の内容は P1141R2 Yet another approach for constrained declarations に基づく。要約:…