誰かがF#と組み合わせてWebSharperトランスレータを操作する方法を説明できますか?F#コードをJS自体に変換しますか、それともF#コンパイラを使用しますか?
2番目のケースでは、ソースで[]属性が見つかったときに、F#コンパイラは何をしていますか?コンパイラはどのような場合でも関数を生成し、実行時にコンパイルされたバイトコードまたは他の何かからのリフレクションとしてJSを構築しますか?
誰かがF#と組み合わせてWebSharperトランスレータを操作する方法を説明できますか?F#コードをJS自体に変換しますか、それともF#コンパイラを使用しますか?
2番目のケースでは、ソースで[]属性が見つかったときに、F#コンパイラは何をしていますか?コンパイラはどのような場合でも関数を生成し、実行時にコンパイルされたバイトコードまたは他の何かからのリフレクションとしてJSを構築しますか?
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のような中間言語がありますが、それは生成されたコードを最適化するためにのみ存在します。