4

OCamlに基づいていくつかのモジュールをF#に変換し、引用エクスパンダーのOCaml''Quote.add''コンパイラ指令を実行しました。

引用エクスパンダーはOCamlで書かれた関数です。Camlp4ライブラリ関数''Quote.add''を呼び出すと、引用エキスパンダーが追加されます。

Camlp4-チュートリアル、Ch。3

F#ブック、F#サイト、Google、およびここで、引用エキスパンダーと'' Quote.add''コンパイラディレクティブの両方を検索した後、私が得た答えはノーです。

F#がOCamlの「Quotation.add」コンパイラ指令の概念またはOCaml引用エクスパンダの概念をサポートしていないことを誰かが確認できますか?

編集

注:Camlp4がOCamlのプリプロセッサー・プリティ・プリンターであることを知りました。質問したとき、それはOCaml用の別個のライブラリーだと思いました。今では理にかなっています。

4

1 に答える 1

10

その通りです。F# では camlp4 ライブラリを使用できないため、F# で必要な機能を再実装するには、別のアプローチを使用する必要があると思います。

一般に、F# から使用できる関連テクノロジがいくつかあります (ただし、特定の問題について詳しく知らなければ、それらのいずれかが役立つかどうかを判断するのは困難です)。

  • F# クォーテーションを使用すると、F# コードを操作できますが、コンパイル機能が制限されます (つまり、F# を SQL、JavaScript、またはおそらく GPU に変換する場合に適しています)。
  • F# CodeDom (F# PowerPack から) を使用すると、コードを生成し、F# コンパイラを使用してコンパイルできますが、コードをテキストとして生成することも、.NET オブジェクト指向スタイルを使用して生成することもできます。
  • T4 テンプレートは .NET テンプレート メカニズムですが、前回確認したところ、F# はサポートされていませんでした (ただし、Mono バージョンは機能する可能性があると思います)。
  • F# 型プロバイダー(kvb のおかげ) により、コンパイラの F# プラグインによって型を生成できます。これは、camplp4 を使用して後で使用するいくつかのタイプを生成する場合 (つまり、より短い仕様から) を処理しますが、いくつかのコードを生成する必要がある場合にのみ使用が制限されます。
于 2012-05-03T01:09:12.053 に答える