Ответ 1
На самом деле существует более двух инструментов, но Scala.js и JScala действительно являются двумя инструментами, все еще находящимися в активной разработке.
Разница фундаментальна: Scala.js - это компилятор от Scala к JavaScript, тогда как JScala - это DSL на основе макросов для создания фрагментов кода JavaScript.
Как пояснил в своем ответе @Gaurav, Scala.js является обычным компилятором Scala, но вместо кода JVM он испускает код JavaScript. Код Scala, который вы пишете, никогда не запускается JVM. Весь ваш код Scala переведен на JavaScript. По этой причине он поддерживает весь язык Scala, включая, например, библиотеку коллекций. Это полезно для написания всей клиентской стороны как приложения Scala.
Использование JScala, с другой стороны, большая часть вашего приложения (по крайней мере, все внешние вызовы макроса javascript
) все еще запущены на JVM. Макрос перезаписывает код Scala -looking внутри него на соответствующий JavaScript AST (или непосредственно в виде строки кода). Это означает, что, когда JVM выполняет там код, программа генерирует (во время выполнения) строку JavaScript AST/. Это полезно для генерации фрагментов кода, которые будут отправляться клиенту динамически.
Таким образом, главный критерий решения:
- Если вы хотите написать клиентскую часть своего веб-приложения в качестве приложения Scala, используйте Scala.js
- Если вы хотите генерировать фрагменты кода JavaScript со стороны сервера, написанные в Scala, используйте JScala
Более подробное сравнение этих двух инструментов доступно на http://www.sebnozzi.com/84/scala-to-javascript-comparison/