¿Hay alguna forma de traducir el código fuente de Scala al código fuente de Java?

Mejor respuesta

Para responder a su pregunta, depende de lo que quiera decir con «código java». El código Scala es un código Java legal, solo tiene que agregar scala.jar a la ruta de clases de Java. scalac es solo un envoltorio del comando java que pasa el objeto Main correcto y establece la ruta de clases correctamente. (llame a $ vim `which scalac` para ver este script).

Por ejemplo, si está en una Mac con la pila Typesafe Scala, puede compilar el código Scala que se encuentra en myFile.scala usando el comando :

java -Dscala.home=/Applications/typesafe-stack/ -D.scala.usejavacp=true -cp .:/Applications/typesafe-stack/lib/scala-library.jar:/Applications/typesafe-stack/lib/scala-compiler.jar scala.tools.nsc.Main myFile.scala

Daré algunas explicaciones más a continuación, pero con gusto aceptaré ediciones de expertos de Scala.

Tomemos el siguiente objeto scala simple (que compilé pero no probé …)

class Adder(val x:Int){

def add(y:Int) = x+y

def applyFunction(f: Int=>Int) = f(x)

}

Es un método tonto. Toma un int, y luego le permite agregar otro int o aplicar una función a ese entero.

Llamamos scalac y generamos los archivos de clase. Ahora podemos llamar al desemblador de java, javap para ver los campos generados y los métodos de clase reales.

$ javap Adder

public class Adder extiende java.lang.Object implementa scala.ScalaObject {public int x (); public int add (int); public int applyFunction (scala.Function1); Sumador público (int); }

Este es un objeto Java perfectamente feliz que podría implementarse usando Java explícitamente.

Ahora debe tener cuidado al usar técnicas Scala más avanzadas, como traits.

Veamos este bloque de código

abstract class Thing {

def method:Unit

}

trait OtherThing {

def method { println("Hello")}

}

object Main{

def main(args: Array[String]) = {

val A = new Thing with OtherThing

A.method

}

}

Tienes una clase abstracta que tiene su método implementado en un rasgo que se mezcla en el momento de la definición del objeto.

Cuando compile esto, verá muchas más clases con símbolos $ funky y la palabra anon. Lo más interesante es la clase que se encuentra en Main $$ anon $ 1.class.

Llamando javap Main $$ anon $ 1 vemos que tenemos generat ed una nueva clase

public final class Main$$anon$1 extends Thing implements OtherThing{

public void method();

public Main$$anon$1();

}

que utiliza interfaces Java y subclases para representar correctamente esta clase.

Impresionante, ¿verdad?

Respuesta

No. Scala es un gran lenguaje de programación en papel, pero no va a despegar. Mire la evolución de su uso en el siguiente gráfico:

¿Puede ver la línea azul claro que representa a Scala? ¿No? Bueno, representa alrededor del 2\% de las solicitudes de extracción en Github (ver más estadísticas aquí ). La curva no solo es plana, en realidad está ligeramente por debajo del 2,3\% de hace cinco años. Eso es a pesar de que Spark , el proyecto Scala más popular, se lanzó en 2014.

Entonces, no, no hay forma de que Scala lo sea despegará a pesar de lo que muchos pensamos la primera vez que usamos el idioma. ¿Qué puede salir mal? Un lenguaje que opera en la JVM bien probada y que ofrece la flexibilidad de ser usado simplemente como «un java mejor» o volverse «completamente funcional», o incluso otras sutilezas como actores o futuros parecían un regalo del cielo.

Resulta que las cosas funcionan de manera diferente en la práctica. Scala es otro lenguaje que necesitará admitir a menos que pueda hacer todo en Scala, lo cual es muy poco probable. Como mínimo, combinará Scala y Java, así que, ¿por qué no limitarse a Java? Esa parece ser la razón principal por la que LinkedIn decidió eliminar gradualmente el uso de Scala en su pila.

Pero, en realidad, empeora, Scala, debido a su diseño y flexibilidad, es un dolor de mantener en sí mismo. . Es como C ++, pero peor. Por ejemplo, puede hacer que los programadores expertos de Scala se vuelvan locos con un estilo de codificación completamente funcional para empaquetar una gran cantidad de información en una línea de código que un novato no entenderá. Por lo tanto, si desea mantener una base de código Scala, debe ser bastante estricto sobre «cómo» usarlo. Y, luego, debe salir y contratar desarrolladores que puedan y estén dispuestos a codificar Scala de esa manera en particular. Buena suerte con eso. Incluso Twitter, la potencia de Scala, dijo que no elegirían Scala como su lenguaje de programación si tuvieran que hacerlo «hoy» (o en 2015 para ser más hormigón). Yammer también se mudó de Scala a Java por razones similares.

Entonces, resulta que Scala no solo no está despegando, sino que en realidad probablemente está en declive, solo mantenido por la popularidad de Spark. De hecho, Scala es realmente bueno para los datos, por lo que la elección tiene sentido. Sin embargo, no me sorprendería que, con el tiempo, las personas terminen usando Python como el lenguaje Spark predeterminado, dado lo popular que se está volviendo entre los científicos de datos.

Actualización:

Para aquellos que afirman que Github no es una buena representación de la popularidad del idioma, aquí hay un par más: Scala ni siquiera aparece en Top 20 de Tiobe , según PyPL , según Las búsquedas de Google, su popularidad es del 1,2\% aunque sí miden un ligero aumento. Puede encontrar muchos otros índices aquí . No creo que ningún programa muestre nada ni siquiera parecido al lenguaje que «despega».

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *