¿Por qué estos intentos de diluir a Scala con Xtend y Kotlin? [cerrado]

26

Así que ahora Eclipse ha ofrecido Xtend y JetBrains está ofreciendo Kotlin, los cuales parecen ser versiones diluidas de Scala. Mi pregunta es por qué He jugado con Scala un poco y no es que dura. ¿Es solo una reacción a la dificultad inherente del salto de imperativo a funcional o hay algo más en el trabajo aquí?


EDITAR: disculpas. Al releer la pregunta tal como la publiqué originalmente, puedo ver dónde suena un poco como trolling. La forma en que formulé la pregunta parecía ser la mejor manera de formularla. He visto publicaciones de blog en el sentido de que "Scala es demasiado difícil / Scala es demasiado complejo" y también "Kotlin es un intento de hacer Scala pero más simple". Dejaré la frase como estaba originalmente pero honestamente no estaba tratando de troll.

Onorio Catenacci
fuente
20
Me parece bastante intolerante asumir simplemente que un nuevo lenguaje que tiene cierta similitud con Scala debe ser una "versión diluida de Scala" escrita por personas para quienes Scala es demasiado difícil. Es menos probable que obtenga respuestas bien consideradas planteando la pregunta de esa manera.
Michael Borgwardt
8
El ensamblaje es solo una versión diluida del código de máquina, ¿verdad?
Ben Brocka
66
@BenBrocka: No, es isomorfo al código de máquina;)
44
Scala es genial. En cuanto a mí, creo que la gente debería renunciar a la nigromancia de Java y la reinvención de bicicletas (todos esos nuevos lenguajes, mencionados y no) y simplemente usar y mejorar Scala. EN MI HUMILDE OPINIÓN.
Ivan
2
@MichaelBogwardt un punto justo. Estoy basando la afirmación en lo que he visto en la blogósfera. "Scala es demasiado difícil" y "Scala es demasiado complejo" parecen ser quejas relativamente comunes.
Onorio Catenacci

Respuestas:

39

En mi humilde opinión, alguien que ha programado en Java durante los últimos 7 años y siendo mi lenguaje más fuerte, encuentro que Scala es bastante ajeno y me está costando acostumbrarme.

Xtend se siente más como Java y fue capaz de escribir una aplicación simple mucho más rápido. Por supuesto, no me di suficiente tiempo con Scala, pero ciertamente entiendo por qué algunos pueden ser desactivados por él.

Dicho esto, la gente elegirá un infierno familiar sobre un cielo desconocido.

árbol de arce
fuente
19
+1: "la gente elegirá un infierno familiar sobre un cielo desconocido".
Giorgio
18

JetBrains tiene una página wiki que compara Scala con Kotlin, y parece que hay algunas cosas que Kotlin hace y Scala no:

  • Cero por encima de la seguridad nula. Scala tiene Option, que es un contenedor sintáctico y de tiempo de ejecución
  • Moldes inteligentes
  • Funciones de extensión estática. En lugar de envolver en tiempo de ejecución
  • Las funciones en línea de Kotlin facilitan los saltos no locales
  • Plantillas de cadena. Hay un complemento de compilador de terceros para scala con una funcionalidad similar: ScalaEnhancedStrings
  • Delegación de primera clase. También implementado a través de un complemento de terceros: Módulos Autoproxy

Entonces, llamar a Kotlin agua abajo Scala es probablemente una simplificación excesiva. En cuanto a Xtend, creo que está dirigido principalmente a usuarios de Xtext, en lugar de a un público más amplio. Una gran diferencia para Scala es que Xtend compila a Java en lugar de bytecode.

Otro lenguaje "asesino de Java" que debe agregar a su lista es el de Ceilán de Red Hat , aunque no tengo idea de si se compara con Scala y cómo.

Yannis
fuente
13
Los lanzamientos automáticos suenan aterradores.
Jonas
14
La industria tiene estas revoluciones cíclicas donde los desarrolladores irán desde un extremo y volverán una y otra vez. Los lenguajes de codificadores de potencia ricos en funciones eran buenos, luego los idiotas escribieron códigos incorrectos y descubrimos los peligros, por lo que las personas acudieron a la seguridad percibida de Java, ahora nuevamente a los codificadores de potencia. Mire cómo Javascript y el navegador eran buenos, luego aparecieron los applets y RIA con los complementos del navegador fueron buenos y Javascript malo, luego aparecieron los marcos modernos de AJAX y los complementos fueron inseguros y malos, luego Silverlight llegó y la gente dijo que AJAX estaba muerto, AHORA HTML5 ¡Está de moda y los plugins vuelven a estar mal! :)
maple_shaft
3
@Jonas Ni siquiera sé si estoy de acuerdo con eso, pero es un fenómeno que he notado. Ciertamente, con cada revolución viene una solución más sofisticada, pero cada solución siempre tiene un talón de Aquiles. Resolver el problema de Heel hace que algunos miren hacia atrás en soluciones anteriores para ideas, pero con el tiempo la gente olvida por qué esas viejas soluciones fueron abandonadas originalmente. Sin embargo, con el tiempo, con cada revolución, el Heel se vuelve más pequeño. Java + XTend puede no ser tan sofisticado como Scala, sin embargo, los problemas son menores que la inversión para cambiar completamente a un nuevo idioma.
maple_shaft
2
@Jonas Bueno, solo una simplificación excesiva de alto nivel extremo de la evolución tecnológica cabría en un comentario. Sin embargo, estoy de acuerdo con maple_shaft, la evolución tecnológica tiene una sensación iterativa .
Yannis
3
@Jonas, este reparto no es automático sino inteligente: si observas
cy6erGn0m
11

He estado usando Scala como mi idioma principal durante el último año (con Java como segundo cercano, ambos dentro de una gran base de código Java heredado). Todavía tengo que buscar características bastante básicas si no las he usado en un mientras. Claro, usted puede escribir algunas Scala rápidamente, pero es un lenguaje extremadamente rica en características, y se necesita mucho tiempo para dominar.

Además, su complejidad no es solo un problema para los humanos, sino también para IDE y compiladores. Tanto Celyon como Kotlin compilan directamente para limpiar bastante JavaScript. Scala puede producir JavaScript, a través de GWT, aunque llegar allí es complicado y la salida de GWT no es legible ni está diseñada para jugar bien con JavaScript externo o HTML.

Definitivamente soy más productivo en Scala que Java, y el código es más compacto y legible (una vez que conoces un poco de Scala). Pero su complejidad me hace dudar en recomendarlo a otros. Un lenguaje con un 20% de complejidad pero un 80% de la capacidad sería una alternativa bienvenida.

[Editado para eliminar la mención del código heredado, vea el comentario a continuación.]

[Anexo 2017: Scala ahora es compatible con JavaScript como objetivo de compilación, mientras que Kotlin ha continuado agregando características que tienen sentido para un reemplazo de Java / Groovy / JavaScript similar a Scala. Ahora son idiomas más distintivos que cuando escribí esto por primera vez.]

David Leppik
fuente
¿Podría por favor elaborar un poco más la "parte del legado"? Por ejemplo, ¿qué métodos quiere decir que toman Listas en lugar de Seqs?
kiritsuku
Voy a editar eso, ya que después de reflexionar, la biblioteca Scala estándar en realidad rara vez lo hace. JSONArray toma una Lista, pero la mayoría de los constructores no. De todos modos, todavía hay un sesgo en la documentación hacia las listas, particularmente desde que Programming in Scala, 2nd Edition, solo cubre Scala 2.8, que es anterior a los vectores. Y sus ejemplos de código tienden a tener constructores que toman List donde Seq sería mejor.
David Leppik
Sí, para 2.10 algunas cosas son mejores ( +:extractores, por ejemplo). Espero que la Programación en Scala se actualice en un futuro próximo. Para 2.11, algunas cosas mejoran aún más. El stdlib ya está libre de desaprobaciones y también se reducirá un poco. Quizás scala.util.parsingtambién se traslade fuera de stdlib. Veremos ...
kiritsuku
1
Debo agregar que mi verdadero problema con Listas vs. Vectores es que agregar elementos a una lista (es decir, Seq en Scala) es una operación muy básica, y hay muchas formas equivalentes de hacerlo, todo con símbolos divertidos que son difíciles de recuerda. La forma canónica es ::, ::=o lo +:=que antecede, pero la mayoría de la gente quiere lo :+=que se agrega, pero eso no es eficiente para una Lista.
David Leppik
10

JetBrains ha establecido muy claramente sus objetivos para Kotlin :

Queremos ser más productivos cambiando a un lenguaje más expresivo. Al mismo tiempo, no podemos aceptar compromisos en términos de interoperabilidad Java (el nuevo lenguaje se va a introducir gradualmente y necesita interoperar sin problemas con la base de código existente) o la velocidad de compilación (nuestra base de código tarda lo suficiente en compilar con javac, y no podemos darnos el lujo de hacerlo más lento). Lo siguiente también es bastante sencillo: esperamos que Kotlin impulse las ventas de IntelliJ IDEA.

Michael Borgwardt
fuente
8

He usado Scala unos meses en Eclipse con Play Framework. Me gusta el idioma pero también hay cosas que no me gustan.

Para mí, la razón para cambiar de Java a otro lenguaje es ser más productivo.

Hasta ahora no he sido más productivo con Scala. Una razón es la falta de un buen soporte para Scala en Eclipse, el complemento Scala es malo (por ejemplo, la sangría falla) y todavía no tiene muchas funciones (por ejemplo, no hay una "Jerarquía de llamadas abiertas"). El compilador Scala también es lento, esto puede no ser un problema, pero uso Scala con Play Framework, que compila el código para cada solicitud, y allí la velocidad del compilador es importante.

Jonas
fuente
2
Tal vez no has aprendido suficientes modismos Scala. He usado Scala para pequeños proyectos (herramientas) y soy mucho más productivo en Scala que en Java, aunque tengo mucha más experiencia en Java (> 10 años) que en Scala (<2 años).
Giorgio
4

No sé sobre Kotlin, pero Scala y Xtend son dos bestias muy diferentes.

Contrariamente a los dichos comunes, Scala NO es un mejor Java. Scala es un lenguaje mucho más destacado que Java, con su propia sintaxis y semántica, y su propio paquete de bibliotecas base.

Xtend es un mejor Java. Mantiene la semántica de Java y mejora su sintaxis. Cada línea de código Xtend se puede traducir directamente a un montón de líneas de código Java. No hay tiempo de ejecución adicional, tampoco.

Creo que ambos enfoques son correctos, aunque diferentes. No me disgusta Scala (como idioma), pero no me gusta que se agreguen tarros Scala a mis proyectos. Tampoco puedo usar Scala correctamente en Android (agrega problemas de peso y rendimiento). Xtend no es tan destacado, pero está bien para mí (vale la pena usarlo más que el lenguaje Java) y funciona en todas las plataformas como si estuviera escribiendo directamente en Java.

Creo que ambos idiomas cubren nichos diferentes y pueden coexistir sin interferir entre sí. En mi humilde opinión, Scala es demasiado complejo, no agrega nada nuevo. Si desea ser más funcional y menos OO, simplemente elija uno de los muchos lenguajes funcionales más simples, como Clojure o JHaskell. Si solo desea Java con una mejor sintaxis y un poco de programación funcional, Fantom sería tan bueno como Scala (se parece mucho a C #).

Pero encuentro que Xtend está en un punto dulce entre todos esos idiomas. Agrega todos esos patrones sintácticos que quería para Java, manteniendo las partes buenas de Java (su semántica). Piénselo como Coffescript para Java.

Y el soporte de Eclipse es excelente ...

Ivan Hernandez
fuente
... y solo es compatible con Eclipse. ¿Correcto? Y Eclipse es un infierno ...
Sarge Borsch
Xtend tiene un tiempo de ejecución adicional. Aproximadamente 3 MB la última vez que lo revisé.
mm2001
@ mm2001 Sí, hay dependencias: alrededor de 300 Ko para xtend y 2 Mo para guayaba en mi pequeño proyecto de prueba ( github.com/pdemanget/examples/tree/master/xtend/message-send ) Pero no es un tiempo de ejecución, estos son clases adicionales para cosas como InputOutput, las anotaciones adicionales. No me quita el punto principal de que Scala y Xtend son 2 idiomas muy diferentes como se dice en esta respuesta.
pdem