有没有人能解释如何将WebSharper翻译与F#结合使用? 它是将F#代码转换为JS本身还是使用F#编译器?
在第二种情况下,当在源中找到[]属性时,F#编译器正在做什么?编译器是否在任何情况下生成函数,并在运行时将JS构造为来自编译的字节码的反射或其他什么?
答案 0 :(得分:6)
我开发了WebSharper。好问题!
粗略的编译看起来像这样:
a.dll: a.fs b.fs c.fs
fsc ...
a.dll.js: a.dll
WebSharper.exe ..
当函数使用[<JavaScript>]
注释时,[<ReflectedDefinition>]
是Quotations.Expr
的别名,F#编译器不仅将这些函数编译为.NET IL,还将其语法表示存储在DLL中元数据。此表示形式为Quotations.DerivedPatterns.MethodWithReflectedDefinition
,可以通过反射恢复。看看{{1}}。