javascript - ¿Cuál es la diferencia entre scala.js vs jscala?
(2)
En realidad, hay más de dos herramientas, pero Scala.js y JScala son de hecho las 2 herramientas aún en desarrollo activo.
La diferencia es fundamental: Scala.js es un compilador de Scala a JavaScript, mientras que JScala es un DSL basado en macros para generar fragmentos de código JavaScript.
Como @Gaurav explicó en su respuesta, Scala.js es el compilador regular de Scala, pero emite código JavaScript en lugar de bytecode JVM. El código Scala que escribes nunca es ejecutado por una JVM. Todo tu código Scala está traducido a JavaScript. Por esa razón, es compatible con todo el lenguaje de Scala, incluida, por ejemplo, la biblioteca de colecciones. Esto es útil para escribir todo el lado del cliente como una aplicación de Scala.
Usando JScala, por otro lado, la mayoría de su aplicación (al menos todas las llamadas externas a la macro javascript
) todavía se ejecuta en una JVM. La macro vuelve a escribir el código de aspecto Scala dentro de la AST de JavaScript correspondiente (o directamente como una cadena de código). Lo que significa que cuando la JVM ejecuta el código allí, el programa genera (en tiempo de ejecución) un AST / string de JavaScript. Esto es útil para generar fragmentos de código que se enviarán al cliente de forma dinámica.
El criterio de decisión principal es así:
- Si desea escribir el lado del cliente de su aplicación web como una aplicación de Scala, use Scala.js
- Si desea generar fragmentos de código JavaScript desde el lado del servidor escrito en Scala, use JScala
Una comparación más elaborada de estas dos herramientas está disponible en http://www.sebnozzi.com/84/scala-to-javascript-comparison/
js-scala es una biblioteca de Scala para generar código JavaScript, mientras que scala.js es un servidor de JavaScript para el compilador de Scala.
scala.js compila su código Scala en código JavaScript. Es solo el compilador habitual de Scala que toma sus archivos de origen de Scala y produce código JavaScript en lugar de bytecode JVM.
.scala | === scalac ===> | .js
Por otro lado, js-scala es una biblioteca de Scala que proporciona generadores de código compositivo de JavaScript. Puedes usarlos en tus programas Scala habituales para escribir generadores de programas JavaScript. Su programa Scala se compila a bytecode JVM usando el compilador Scala habitual y la ejecución de este programa genera un programa JavaScript.
.scala | === scalac ===> | .class | === java ===> | .js
Para más detalles, recomiendo readint blog por uno de los autores de js-scala http://julien.richard-foy.fr/blog/2013/12/19/js-scala-and-scala-js/