gpt4 book ai didi

javascript - Scala.js 运行时编译为 Javascript

转载 作者:行者123 更新时间:2023-11-28 17:50:44 24 4
gpt4 key购买 nike

嘿,大家。我想弄清楚如何在运行时使用 Scala.js 工具将 Scala 表达式编译为 Javascript。作为示例,这是一个简化的设置。

假设我们有一个简单的 DSL,它由 Ctx => Boolean 函数及其 bool 运算组成,如下所示:

implicit class Simple[Ctx](f: Ctx => Boolean) {
def &&(g: Ctx => Boolean): Ctx => Boolean = ctx => f(ctx) && g(ctx)
def ||(g: Ctx => Boolean): Ctx => Boolean = ctx => f(ctx) || g(ctx)
def unary_!: Ctx => Boolean = ctx => !f(ctx)
}

假设我们有一些“构建 block ”被硬编码、编译成 Javascript 并导出,如下所示:

@ExportJSTopLevel("foo") def foo[Ctx](ctx: Ctx): Boolean = ???
@ExportJSTopLevel("bar") def bar[Ctx](ctx: Ctx): Boolean = ???
// and so on

现在可以用这些构建 block 组装简单的 bool 表达式,例如:foo && barfoo || !bar

假设一些持久实体是在运行时创建的,并以此类表达式作为它们的主体。我希望能够将它们编译为 Javascript,作为与上面的构建 block 具有相同签名的函数,这些函数调用这些构建 block 。

我在 Scala.js 工具中的某个地方找到了一些关于名为 ScalaJSOptimizer 的神秘类的在线引用。然而,提供给该类的链接总是被破坏,或者显示它属于最新版本的“scalajs-tools”工件甚至没有的包。

完成我想做的事情的最佳方法是什么?

最佳答案

我也不知道你的最终目标是什么,但如果你真的想在运行时编译 Scala.js,你最好的选择是查看 scalafiddle.io 的源代码,它正是这样做的,并且首先复制它所做的一切,然后从那里更改它。

下面的代码处理从 Javascript 到 Scala.js 的 IR 的编译,然后从 IR 到 Javascript String 的编译:

这里有趣的方法是 compilelink(fastOptJSfullOptJS)和 export 。我知道 StackOverflow 不鼓励外部链接,但代码确实太大且粗糙,不值得在这里内联复制。最好的选择是克隆该存储库,在 IDE 中打开它,然后跳转查看代码如何转换该 Compiler 构造函数中的 Scala.js code: String code> 类,通过所有中间步骤,直到从 export 方法返回的最终 Javascript String

关于javascript - Scala.js 运行时编译为 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45572811/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com