2016-09-20 18 views
0

マクロを展開し、最終的に実行される生成されたコードにタイプエラーを与えるタイプシステムはありますか?生成されたコードのコンパイル時エラー?

実際の例では、SQLを動的に生成しているものの、(コードを実行する前に)いくつかの制約に基づいてコンパイラから構文エラーを受け取っている可能性があります。

n個の組み合わせを生成するためにn個のforループを持つ関数を生成する別の例があります。

ソースコードを生成するのが「文字列型」になることが多いので、コードを生成するコードを書くときに貴重なフィードバックを与えるために制約を使用できる型システムがあるかと思います。

+1

私はそれがあなたが望むものではないと思っていますが、F#タイププロバイダを見てきましたか? – TeaDrivenDev

+0

私は特にSQLと話すことに興味はありません。私はコードを生成するコードを書くときにコンパイラのフィードバックを得ることに興味があります。 –

+1

例では、トランスペラレータをJavaScriptに書き込んでいて、JSを生成していて、関数が実行時に無効なコードを生成する場合は、指定した言語でコンパイラのフィードバックを得るのが良いでしょう。 –

答えて

2

あなたの頭に浮かべるものに最も近いものはtyped tagless final approachです。これは厳密にはマクロの機能ではありませんが、マクロの展開と非常によく似た動作をします(多くの点でより優れています)。 - ターゲット式の型は、メタ言語の型として直接表示され、コンパイラによってチェックされます。

このアプローチでは、ターゲット言語の種類をカバーする十分な表現力のある型システムをメタ言語で使用していることを前提としています。 has been demonstratedとして、このようにSQLの大きなサブセットをカバーすることができます(実際にネストされたリレーショナル計算、それはSQLに直接変換されます)。

上記の参照をチェックするとMLでたくさんの例が見つかるので、この目的のためにF#を使っても問題はありません。

関連する問題