【发布时间】:2010-10-12 16:36:12
【问题描述】:
谁能解释如何将 WebSharper 翻译器与 F# 结合使用? 是将 F# 代码翻译成 JS 本身还是使用 F# 编译器?
在第二种情况下,F# 编译器在源代码中找到 [] 属性时在做什么?编译器是否会在任何情况下生成函数并在运行时将 JS 构造为编译后字节码的反射或其他?
【问题讨论】:
标签: f# websharper
谁能解释如何将 WebSharper 翻译器与 F# 结合使用? 是将 F# 代码翻译成 JS 本身还是使用 F# 编译器?
在第二种情况下,F# 编译器在源代码中找到 [] 属性时在做什么?编译器是否会在任何情况下生成函数并在运行时将 JS 构造为编译后字节码的反射或其他?
【问题讨论】:
标签: f# websharper
我开发 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 是一个源到源转换器,而且它非常直接(例如,保留 lambda)。在 WebSharper 2.0 中,我们有一种类似于 Scheme 的中间语言,但这只是为了帮助优化生成的代码。
【讨论】: