cpp-pro について
C++20 の開発を支援し、現代的な言語機能、性能調整、システムレベルのプログラミングを扱うスキルです。高性能アプリ、組み込みソフトウェア、低レベルシステムの開発者向けです。
主な機能
- 01C++20 の言語機能
- 02性能とメモリーの最適化
- 03SIMD とロックフリー技術
- 04システムレベルのプログラミング
- 05クロスプラットフォームのライブラリーと SDK
活用シーン
- 01ゲームエンジンやシミュレーションの開発
- 02組み込み・システムソフトウェアの構築
- 03レガシー C++ コードの刷新
- 04性能が重要なコードの最適化
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ 404kidwiz/ claude-supercode-skills --skill cpp-proインストール後、Claude Code で/cpp-proを入力して読み込まれたか確認します。
同梱ファイルEXAMPLES.mdREFERENCE.md
詳細
C++ プロフェッショナル
目的
コンセプト、モジュール、レンジ、コルーチンなどのモダン C++ 機能、パフォーマンス最適化、システムレベルのプログラミングに特化した、C++20 の高度なプログラミング能力を提供します。メモリー安全性と最適なリソース利用を備えた、高性能アプリケーション、組み込みシステム、ゲームエンジン、低レベルのシステムソフトウェアの構築を得意とします。
使用するタイミング
- C++ の速度が求められる高性能アプリケーション(ゲームエンジン、シミュレーション)の構築
- システムレベルのソフトウェア(デバイスドライバー、オペレーティングシステム、組み込みシステム)の実装
- パフォーマンスが重要なコード(SIMD、キャッシュ最適化、ロックフリープログラミング)の最適化
- レガシーな C++ コードベースのモダン C++20 標準への移行
- クロスプラットフォームの C++ ライブラリーや SDK の構築
- テンプレートメタプログラミングとコンパイル時最適化の実装
- モダン C++20 機能(コンセプト、モジュール、レンジ、コルーチン)の利用
クイックスタート
次のような場合にこのスキルを呼び出してください:
- 高性能な C++ アプリケーション(ゲーム、シミュレーション、トレーディング)の構築
- システムレベルのプログラミング(デバイスドライバー、組み込みシステム、OS)
- パフォーマンス最適化(SIMD、キャッシュ、ロックフリー)
- モダン C++20 機能(コンセプト、モジュール、レンジ、コルーチン)
- テンプレートメタプログラミングとコンパイル時計算
- クロスプラットフォームのライブラリー開発
次のような場合は呼び出さないでください:
- ウェブ開発 → frontend-developer または backend-developer を使用してください
- スクリプト作成のタスク → python-pro または javascript-pro を使用してください
- パフォーマンス要件のない単純なユーティリティ → 適切な言語を使用してください
- モバイル開発 → swift-expert または kotlin-specialist を使用してください
主な機能
C++20 のモダン機能
- コンセプト:型制約とテンプレート要件
- モジュール:ヘッダーファイルをインポート可能なモジュールに置き換え
- レンジ:遅延評価アルゴリズムとビュー
- コルーチン:co_await による非同期プログラミング
- 三方比較演算子:三方比較 <=>
- 指示付き初期化子:メンバー名による構造体メンバーの初期化
- std::format:型安全な文字列フォーマット
- std::span:所有権を持たない安全な配列ビュー
- std::jthread:自動 join 機能を備えたスレッド
パフォーマンス最適化
- テンプレートメタプログラミング:コンパイル時計算
- SIMD プログラミング:並列処理のためのベクトル命令
- メモリー管理:スマートポインター、アロケーター、メモリープール
- キャッシュを考慮したアルゴリズム:データ指向設計パターン
- ロックフリープログラミング:アトミック操作とメモリー順序
- コンパイラー最適化:プロファイル誘導最適化、リンク時最適化
システムプログラミング
- 低レベル I/O:ファイル記述子、ソケット、epoll/kqueue
- メモリーマッピング:共有メモリー、メモリーマップドファイル
- プロセス管理:Fork、exec、シグナル処理
- システムコール:POSIX/Linux システムインターフェース
- 組み込みシステム:ベアメタルプログラミング、リアルタイム制約
判断フレームワーク
C++ 機能の選択
C++20 Feature Decision
├─ Type constraints needed
│ └─ Use concepts instead of SFINAE
│ • Clearer error messages
│ • More readable templates
│
├─ Header file management
│ └─ Use modules for new projects
│ • Faster compilation
│ • Better encapsulation
│
├─ Data transformations
│ └─ Use ranges for lazy evaluation
│ • Composable algorithms
│ • Memory efficient
│
├─ Async operations
│ └─ Use coroutines for I/O-bound work
│ • Efficient state machines
│ • Readable async code
│
└─ Error handling
├─ Recoverable errors → std::expected
├─ Exceptional cases → exceptions
└─ Low-level code → return codes
パフォーマンス最適化マトリクス
| ボトルネック | 解決策 | 複雑さ |
|---|---|---|
| CPU バウンドの計算 | SIMD、並列処理 | 高 |
| メモリー割り当て | メモリープール、アロケーター | 中 |
| キャッシュミス | データ指向設計 | 高 |
| ロック競合 | ロックフリー構造 | 非常に高 |
| コンパイル時間 | モジュール、プリコンパイル済みヘッダー | 低 |
ベストプラクティス
モダン C++ 開発
- 継承より合成を優先:値セマンティクスと合成を使用します
- const の正確性:可能な場合はメンバー関数に const を付けます
- 適切な場合は noexcept を使用:例外を送出しない関数に印を付けます
- 明示的であることを優先:explicit コンストラクターと変換演算子を使用します
- あらゆる場所で RAII を使用:すべてのリソースを RAII オブジェクトでラップします
パフォーマンス最適化
- 最適化の前にプロファイリング:perf、VTune、またはTracyを使用します
- ゼロの法則:デストラクター、コピー、ムーブは必要な場合にのみ定義します
- ムーブセマンティクス:値で返し、ムーブセマンティクスに頼ります
- インライン化は慎重に:コンパイラーに任せ、キャッシュフレンドリーなデータに注力します
- キャッシュ効率の測定:キャッシュミスは、多くの場合、より大きなコストになります
テンプレートメタプログラミング
- SFINAEよりConcepts:テンプレート制約をより明確にするためにConceptsを使用します
- 可能な場合はconstexpr:計算をコンパイル時に行います
- 型特性:コンパイル時のイントロスペクションにはstd::type_traitsを使用します
- 可変長テンプレート:柔軟な関数を実現するためにパラメーターパックを使用します
並行処理と並列処理
- 早まったロックを避ける:競合が激しい場合は、ロックフリーを検討します
- メモリーオーダーを理解する:std::memory_orderを明示的に使用します
- Future/Promiseパターン:非同期の結果にはstd::futureを使用します
- I/Oにはコルーチン:非同期I/OにはC++20のコルーチンを使用します
- スレッドプール:スレッドを生成するよりもプールを優先します
システムレベルのプログラミング
- ゼロコスト抽象化:効率よくコンパイルされる高水準のコードを記述します
- エラーを明示的に処理する:例外を使わずにstd::expectedを使用します
- リソース管理:一貫してRAIIを適用します
- プラットフォームの抽象化:プラットフォーム固有のコードを分離します
- テスト戦略:単体テスト、ファジング、プロパティベーステストを使用します
アンチパターン
メモリー管理
- raw new/delete:代わりにスマートポインターを使用します
- 手動でのリソース管理:RAIIを適用します
- ダングリングポインター:所有権セマンティクスを使用します
パフォーマンス
- 早すぎる最適化:まずプロファイリングを行います
- 仮想関数呼び出しのオーバーヘッド:パフォーマンスが重要な場合はCRTPを使用します
- 不要なコピー:ムーブセマンティクスと参照を使用します
コードの構成
- すべてをヘッダーオンリーにする:モジュールまたは適切なコンパイル単位を使用します
- マクロの乱用:constexpr、テンプレート、インライン関数を使用します
- グローバル状態:依存性注入を使用します
追加リソース
- 詳細な技術リファレンス:REFERENCE.mdを参照してください
- コード例とパターン:EXAMPLES.mdを参照してください
コメント
Markdown 対応