4

谁能解释如何将 WebSharper 翻译器与 F# 结合使用?是将 F# 代码翻译成 JS 本身还是使用 F# 编译器?

在第二种情况下,当在源代码中找到 [] 属性时,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 是一个源到源转换器,它非常直接(例如,保留 lambda)。在 WebSharper 2.0 中,我们有一种类似于 Scheme 的中间语言,但这只是为了帮助优化生成的代码。

于 2010-10-12T08:36:12.487 回答