coding-nim について
coding-nimは、Nim 2.xのプログラミング向けスキルで、システムプログラミングや低レベル制御を要するプロジェクトを対象とします。マクロ、コンパイル時実行、ARC/ORCによるメモリ管理、FFIを扱います。
主な機能
- 01マクロとテンプレートによるメタプログラミング
- 02コンパイル時のコード実行
- 03ARCまたはORCのメモリ管理設定
- 04FFIによる外部ライブラリ呼び出し
- 05Nimbleによる依存関係管理
活用シーン
- 01組み込みまたは性能重視のプログラム開発
- 02FFIを介したC/C++ライブラリ連携
- 03マクロによるコンパイル時コード生成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ alphaonedev/ openclaw-graph --skill coding-nimインストール後、Claude Code で/coding-nimを入力して読み込まれたか確認します。
詳細
coding-nim
目的
このスキルは、マクロ、テンプレート、コンパイル時実行、メモリ管理(ARC/ORC)、相互運用のための FFI、パッケージ管理用の Nimble、システムプログラミングなどの高度な機能に重点を置き、AI が Nim 2.x のプログラミングタスクを扱えるようにします。Nim のコードを効率よく生成、デバッグ、最適化するために使用します。
使用する場面
組み込みシステム、パフォーマンスが重要なアプリ、または FFI 経由での C/C++ との連携など、低レベル制御が必要なシステムレベルのプログラミングにこのスキルを適用してください。マクロなどを使ったコンパイル時メタプログラミングや、手動でのガベージコレクションを避けるための ARC/ORC による自動メモリ管理が必要なプロジェクトにも使用します。
主な機能
- コード生成のためのマクロ:コンパイル時に再利用可能なコード変換を定義します。
- 型安全な文字列ベースのメタプログラミングのためのテンプレート。
- コンパイル時実行:
staticブロックを使って、コンパイル中にコードを実行します。 - メモリ管理:コンパイラフラグを使って、ARC(自動参照カウント)と ORC(オプションの参照カウント)を切り替えます。
- FFI:ラッパーなしで外部ライブラリ(C 関数など)を呼び出します。
- Nimble:パッケージマネージャーのように依存関係を管理し、プロジェクトをビルドします。
- システムプログラミング:ハードウェアへの直接アクセス、並行処理、クロスプラットフォームコンパイル。
使用パターン
タスクを実行するには、Nim のコードをモジュールで構成し、ビルドにはコンパイラを使用します。マクロを使う場合は、別の proc で定義し、コンパイル時に呼び出します。FFI コードを書く際は、C 関数に importc プラグマを使用します。メモリ管理を設定するには、コンパイル時に --gc:arc または --gc:orc フラグを指定します。早い段階でエラーを検出するため、完全なビルドの前に必ず nim check でコードをテストしてください。テンプレートを汎用関数に組み込み、定型コードを減らします。
主なコマンド/API
基本操作には Nim コンパイラ(nim)を使用します。ファイルをコンパイルするには、nim c --verbosity:0 -r main.nim を実行します(フラグ:-r は実行、--verbosity:0 は出力を最小限にします)。Nimble でパッケージをインストールするには、nimble install somepkg を実行します。マクロを定義するには、次のようにします:
macro doubleIt(x: expr): stmt =
result = quote do: `x` * 2
echo doubleIt(5) として呼び出します。FFI で C をインポートするには、次のようにします:proc printf(format: cstring; args: varargs[pointer]) {.importc: "printf", header: "<stdio.h>".}。設定形式:設定には nim.cfg を使用します。たとえば、gcc.exe = "gcc" としてコンパイラを指定します。環境変数:パッケージキャッシュには $NIMBLE_DIR を設定します。
統合に関する注意事項
FFI 経由で Nim を他の言語と統合します。C++ には importcpp を使用します。Nim のコードを共有ライブラリにコンパイルしてプロジェクトに組み込むには、nim c --app:lib -d:release mylib.nim を実行します。CI/CD では、GitHub Actions で run: nim c --opt:speed file.nim を使用します。認証が必要な場合(Nimble レジストリなど)は、プライベートリポジトリ用に $NIMBLE_TOKEN などの環境変数を設定します。外部ライブラリにリンクするには、OpenSSL の場合は --passL:-lssl を追加します。たとえば、nim.cfg に path = "/path/to/headers" を追加し、パス設定が一致していることを確認してください。
エラー処理
Nim では、実行時エラーに try-except ブロックを使用します:
try:
raise newException(ValueError, "Invalid input")
except ValueError:
echo "Handled error: ", getCurrentExceptionMsg()
コンパイル時エラーの詳細を出力するには、nim c --verbosity:2 file.nim を有効にします。ORC に切り替えてメモリの問題を確認します:nim c --gc:orc file.nim。具体的な内容を把握するにはコンパイラの出力を解析します。未宣言の変数を検出する --warnings:on などが一般的なフラグです。エラーは echo または chronicles のようなロギングライブラリで記録します。
具体的な使用例
- コード生成用のマクロを定義して使用する:ループマクロを作成するには、次のように記述します:
macro forEach(items: seq, body: stmt): stmt =
result = quote do: for item in `items`: `body`
forEach(@[1, 2, 3], echo item) として使用します。これにより、コンパイル時に効率的なループが生成されます。
- FFI で C 関数を呼び出す:C の printf をインポートして呼び出します:
proc cPrintf(format: cstring) {.importc: "printf", header: "<stdio.h>".}
cPrintf("%s\n", "Hello from Nim")
C ヘッダーをリンクしてシームレスに統合できるよう、nim c --passC:-I/usr/include file.nim でコンパイルします。
グラフの関係性
- クラスターとの関連:coding
- タグ経由の接続:nim(言語固有のスキルへの直接リンク)、systems(低レベルプログラミングツールへのリンク)、coding(coding-python や coding-c など、他のコーディングスキルへの幅広い接続)