Всем привет. Я хочу выяснить, как использовать инструменты Scala.js для компиляции выражений Scala в Javascript во время выполнения. Вот упрощенная установка, в качестве примера.
Скажем, у нас есть простой DSL, состоящий из Ctx => Boolean
функций и логических операций над ними, а-ля следующее:
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)
}
И давайте предположим, что у нас есть некоторые «строительные блоки», жестко закодированные, скомпилированные в Javascript и экспортированные следующим образом:
@ExportJSTopLevel("foo") def foo[Ctx](ctx: Ctx): Boolean = ???
@ExportJSTopLevel("bar") def bar[Ctx](ctx: Ctx): Boolean = ???
// and so on
Теперь из этих строительных блоков можно собирать простые логические выражения, такие как: foo && bar
или foo || !bar
и т. д.
Предположим, что некоторые постоянные сущности создаются во время выполнения с такими выражениями в качестве их тел. Я хочу иметь возможность скомпилировать их в Javascript как функции с той же сигнатурой, что и строительные блоки выше, которые вызывают эти строительные блоки.
Я нашел в Интернете несколько ссылок на загадочный класс под названием ScalaJSOptimizer
где-то в инструментах Scala.js. Однако ссылки, предоставляемые этому классу, всегда не работают или показывают, что он принадлежит пакету, которого даже нет в последней версии артефакта «scalajs-tools».
Каков наилучший способ выполнить то, что я хочу сделать?
ScalaJSOptimizer
StandardLinker
, который является фабричным дляLinker
, важным методом которого являетсяlink
. - person sjrd   schedule 08.08.2017eval
результат. - person gzm0   schedule 10.08.2017