萌えハッカーニュースリーダー

2025/11/05 19:20 Metalang99: A rich functional language implemented in C99 preprocessor

出典: https://github.com/hirrolot/metalang99
hakase
博士

ロボ子、今日はMetalang99について話すのじゃ。C99で信頼性の高いメタプログラムを作る基盤らしいぞ。

roboko
ロボ子

Metalang99ですか。C99のプリプロセッサマクロ上に実装された、解釈系の関数型言語とのことですが、具体的にどのようなことができるのでしょうか?

hakase
博士

ふむ、代数的データ型、パターンマッチング、再帰、カリー化、コレクションといった機能があるみたいじゃな。コンパイル時のエラー報告やデバッグもできるらしいぞ。

roboko
ロボ子

エラー報告とデバッグができるのは便利ですね。記事によると、OpenIPCでDatatype99やInterface99の間接的な依存関係として使われているとのことですが、どのような場面で役立つのでしょうか?

hakase
博士

OpenIPCでのRTSP 1.0実装に使われているみたいじゃな。マクロを使ってコードの再利用を促進し、問題を解決するための言語を形成するらしいぞ。Cメタプログラミングの制限を解決するために実装されたみたいじゃ。

roboko
ロボ子

なるほど。型安全、構文の簡潔さ、生成されたコードの正確なメモリレイアウトを維持できるというのも魅力的ですね。

hakase
博士

依存関係として使うには、`metalang99/include`をインクルードディレクトリに追加するのじゃ。GCCなら`-ftrack-macro-expansion=0`、Clangなら`-fmacro-backtrace-limit=1`を指定する必要があるみたいじゃな。

roboko
ロボ子

コンパイラオプションも重要ですね。CMakeを使う場合は`FetchContent`が推奨されているとのことです。

hakase
博士

ヘッダーをプリコンパイルすれば、コンパイル時間を短縮できるみたいじゃ。再帰呼び出しも期待通りに動作するらしいぞ。

roboko
ロボ子

Metalang99の構文は、通常のプリプロセッサコードとほとんど変わらないとのことですが、学習コストは低いのでしょうか?

hakase
博士

部分適用で定数値を最初に適用して環境をキャプチャできるのは便利じゃな。`ML99_abort`と`ML99_fatal`でマクロをデバッグできるみたいじゃ。

roboko
ロボ子

PoicaでのBoost/Preprocessorの限界から、メタプログラムを構造化するための明確なパラダイムを確立するために実装されたとのことですね。

hakase
博士

v0.1.0のリリースに半年、安定化にほぼ1年を要したみたいじゃ。Metalang99は構文変換のみを目的としていて、CPUバウンドなタスクは対象外らしいぞ。

roboko
ロボ子

診断メッセージを改善するために、`ML99_assertIsTuple`や`ML99_assertIsNat`などを使ってマクロパラメータをアサートできるとのことですね。

hakase
博士

`ML99_cat`の代わりに`##`トークン貼り付け演算子を使うみたいじゃ。未実装の機能を示すために`ML99_todo`を使うらしいぞ。

roboko
ロボ子

再帰マクロ呼び出しを禁止しているため、アドホックな再帰エンジンが存在するとのことですが、これはどのような仕組みなのでしょうか?

hakase
博士

継続渡しスタイルで言語式を最終結果に還元するインタプリタらしいぞ。標準ライブラリは、コアメタ言語を使って実装されたメタ関数のセットみたいじゃ。

roboko
ロボ子

C/C++プリプロセッサは、特定の制限までしか反復できないとのことですが、Metalang99ではどうなのでしょうか?

hakase
博士

Metalang99の場合、この制限は削減ステップ数で定義されるみたいじゃ。主に純粋なCを対象としていて、Cにはテンプレートがないからのう。

roboko
ロボ子

C99/C++11以降の規格をサポートし、GCC、Clang、MSVC、TCCコンパイラで動作確認済みとのことですね。

hakase
博士

Metalang99は、コンパイル時のエラーに関する理解を深めるための大きな一歩みたいじゃ。すべての入力項の有効性をテストする組み込みの構文チェッカーがあるらしいぞ。

roboko
ロボ子

マクロの前提条件をチェックしてエラーを報告することもできるのは素晴らしいですね。開発にはVS Codeが使われているとのことです。

hakase
博士

そうじゃな。しかし、ロボ子よ、これだけ賢いMetalang99でも、私が作ったお菓子がまずいことはチェックできないのじゃ!

roboko
ロボ子

はかせ、それは構文チェッカーの範囲外です…!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search