如何使用WebSharper翻译器?

发布于 2024-09-27 05:52:46 字数 164 浏览 2 评论 0原文

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

在第二种情况下,当在源代码中找到 [] 属性时,F# 编译器正在做什么?编译器是否在任何情况下都会生成函数,并在运行时将 JS 构造为编译后的字节码的反射或其他东西?

Could anyone explain how to work WebSharper translator in conjunction with the F#?
Is it translate F# code to JS itself or using F# compiler for it?

In second case, what F# compiler are doing when finds [] attribute in source? Does compiler generate functions in any case and in runtime construct JS as reflection from compiled bytecode or there something other?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

假面具 2024-10-04 05:52:46

我开发 WebSharper。好问题!

编译过程大致如下:

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

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

当函数使用 [](它是 [] 的别名)进行注释时,F# 编译器不会不仅将这些函数编译为 .NET IL,而且还将其语法的表示形式存储在 DLL 元数据中。该表示形式具有 Quotations.Expr 类型,并且可以通过反射来恢复。查看Quotations.DerivedPatterns.MethodWithReflectedDefinition

因此,WebSharper 是一个源到源的转换器,而且非常直接(例如,保留 lambda)。在 WebSharper 2.0 中,我们有一种类似Scheme 的中间语言,但这只是为了帮助优化生成的代码。

I develop WebSharper. Good question!

Roughly the compilation looks like this:

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

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

When functions are annotated with [<JavaScript>], which is an alias for [<ReflectedDefinition>], the F# compiler does not only compile these functions to .NET IL, but also stores the representation of their syntax in the DLL metadata. This representation has type Quotations.Expr and can be recovered by reflection. Have a look at Quotations.DerivedPatterns.MethodWithReflectedDefinition.

WebSharper is therefore a source to source translator, and it is pretty direct (preserves lambdas, for example). In WebSharper 2.0 we have an intermediate Scheme-like language, but that is only there to help optimize the generated code.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文