4

誰かがF#と組み合わせてWebSharperトランスレータを操作する方法を説明できますか?F#コードをJS自体に変換しますか、それともF#コンパイラを使用しますか?

2番目のケースでは、ソースで[]属性が見つかったときに、F#コンパイラは何をしていますか?コンパイラはどのような場合でも関数を生成し、実行時にコンパイルされたバイトコードまたは他の何かからのリフレクションとしてJSを構築しますか?

4

1 に答える 1

6

WebSharperを開発しています。良い質問!

大まかにコンパイルは次のようになります。

a.dll: a.fs b.fs c.fs
    fsc ...

a.dll.js: a.dll
    WebSharper.exe ..

[<JavaScript>]関数にのエイリアスである。という注釈が付けられている場合[<ReflectedDefinition>]、F#コンパイラはこれらの関数を.NET ILにコンパイルするだけでなく、構文の表現をDLLメタデータに格納します。この表現にはタイプQuotations.Exprがあり、リフレクションによって復元できます。をご覧くださいQuotations.DerivedPatterns.MethodWithReflectedDefinition

したがって、WebSharperはソースからソースへのトランスレーターであり、非常に直接的です(たとえば、ラムダを保持します)。WebSharper 2.0には、Schemeのような中間言語がありますが、それは生成されたコードを最適化するためにのみ存在します。

于 2010-10-12T08:36:12.487 に答える