language - ¿Alguien está usando Scala con enojo(y qué consejo tiene un programador de Java)?
haskell for jvm (8)
Sí, las personas están creando aplicaciones reales "Enterprise" con Scala (y Clojure). Solo hazlo.
Por supuesto, las personas también están usando Smalltalk, así que si te gusta Smalltalk, ¿por qué no usar eso?
He sido programador de Java por más de 10 años desde que empecé con Smalltalk. En mi opinión, los próximos grandes lenguajes serán los que se ejecutan en la omnipresente máquina virtual Java. Me gustaría aprovechar algunas de las características que tiene Scala (entre otros lenguajes) - declaraciones de case
para jerarquías de clases, cierres, tipo de inferencia, ya que me permitirá escribir un código más conciso y claro (espero). ¡Un poco más cerca de Smalltalk!
Todas las cosas que son de segunda naturaleza en Java:
- Construyendo con
ant
- implementar aplicaciones / bibliotecas en
jar
lógicos - Excelente soporte de herramientas IDE
- Escribir GUI (o tener una GUI Swing para hablar a través de algún tipo de comunicación remota?)
- Bibliotecas / frameworks de terceros
- Configuración (propiedades,
XML
,Spring
, etc.) - Controladores de bases de datos
Me preocupa que la diferencia entre jugar con algún proyecto de mascotas y, de hecho, dar el salto a usarla con enojo en el lugar de trabajo sea demasiado.
- ¿Alguien ha hecho este salto?
- ¿Valió la pena?
- ¿Qué lecciones aprendiste?
(Obviamente, la gente está usando Scala, pero ¿alguien está creando real, por falta de una mejor palabra, aplicaciones Enterprise ?)
He añadido clojure a la infraestructura de software utilizada en el centro de operaciones científicas de la misión Kepler . Ahora está ahí para hacer depuración interactiva; ejecuta el REPL, carga algunas clases y ejecuta métodos de forma ad hoc.
EDITAR: OK, entonces "cargar algunas clases y ejecutar métodos" es vago. Por ejemplo, podemos cargar nuestras clases crud y luego ejecutar el método para convertir un tipo de tiempo de nave espacial en otro.
user=> (import ''(gov.nasa.kepler.hibernate.dr LogCrud)) user=> (def crud (new LogCrud)) #''user/crud user=> (def shortCadences (.longCadenceToShortCadence crud 0 2500)) user=> (prn shortCadences) #>
Hay otros métodos que se pueden llamar para convertir este tiempo en otros tipos de formatos de tiempo que podrían ser útiles para la depuración. Podríamos hacer herramientas de línea de comandos para encapsular toda esta funcionalidad, pero no es necesario, ya que todo está disponible desde clojure.
Jonas Bonér para uno: http://jonasboner.com/2009/01/30/slides-pragmatic-real-world-scala.html
Utilicé Scala en nuestra infraestructura Java existente para consultar y manipular documentos XML grandes. No fue posible usar las bibliotecas Java xml estándar o no tan fácilmente.
Estuve tentado de usarlo para los cálculos de rendimiento de la cartera, pero ya había terminado la versión de Java. Una versión de Scala hubiera sido más fácil de mantener ya que es más fácil traducir las fórmulas directamente en el código.
Otra área donde puedes colar Scala es con multihilo. No tengo experiencia real con esto, pero parece ser más fácil en Scala.
El punto es que no intente verlo como un reemplazo de Java por el momento, pero úselo donde pueda utilizarlo junto a su código de Java existente.
Utilicé Intellij con el complemento Scala como un IDE, pero todavía no está allí. Es factible en combinación con el plugin maven y la consola.
También soy un programador de Smalltalk y me encanta poder usar bloques de código en Scala. Comparado con Java, hay menos código, pero aún no es tan legible como el código de Smalltalk.
Por cierto, la comunidad smalltalk está creciendo nuevamente gracias al marco de Seaside, por lo que es posible que desee volver
Las cosas que aprendí o entiendo mejor:
- el uso de constructores
- el concepto inmutable
- trabajando con listas y recursión
- programación funcional en general
Entonces sí, creo que vale la pena.
Básicamente golpeé a todos en la cabeza con el código Scala en nuestro último proyecto, ya que me cansé de eliminar los mismos problemas causados por la falta de comprensión de Hibernate + JBoss. (Es increíble, de verdad. Los desarrolladores que escribieron el sistema original todavía están allí y aún se pierden en los detalles de Hibernate).
Lo que teníamos -> un sistema alocado construido principalmente con un montón de beans EJB sin estado cableados junto con algún código de hibernación lanzado junto con algunos SQL. (Somos un ASP, básicamente. El clúster de producción es bastante pequeño -> solo alrededor de 100 máquinas).
Lo que hice -> reuní varios servicios basados en REST, donde redefinimos el RPC entre algunos de los servidores. Esto hace que todo sea muy fácil de codificar, además de implementar una API pública en lo que era un sistema en el que no se prestaba atención a las dependencias.
Hasta ahora, hemos comenzado a implementar código dentro y fuera de las instancias de JBoss sin problemas reales. La primera vez que intenta usar un object
Scala en Java, probablemente arrugará la nariz. Pero por lo demás, nadie realmente lo notó.
Hasta ahora, han pasado aproximadamente 5 meses desde que comenzamos realmente. Hemos hecho un par de revisiones importantes, y posteriormente estamos atrasados, pero el sistema está mucho, mucho mejor probado que en el pasado. Entonces, aunque hemos tenido algunas ideas erróneas mientras estábamos aprendiendo el sistema, ahora hemos podido eliminarlas todas y acercarnos mucho a la implementación de producción. Con todo, diría que el tipo normal necesita 2-3 meses para dejar de codificar como un programador de Java y familiarizarse con la mayoría de las bibliotecas estándar.
Escribir código JDBC en lugar de un sistema ORM básicamente ha descartado casi todos nuestros problemas de rendimiento. La velocidad ha sido significativamente mejor, pero eso fue principalmente porque pude hacer todo lo que quería con menos código de aplicación real.
Herramientas que estoy usando:
- Restlet : muy feliz con este marco. Nuestra capa de descanso es un código escandalosamente trivial.
- JDBC -> nota: hemos modificado lo que básicamente estaba en la wiki
- XML (y pronto, JSON)
- buildr, maven en un par de proyectos que no quería convertir (más Nexus y Hudson). Estoy experimentando con sbt, que ya es muy bueno para los proyectos de Scala.
No hemos tenido absolutamente ningún problema con la reutilización de ninguna de las antiguas bibliotecas de Java, pero tendemos a envolverlas en capas scala-fied. Principalmente solo para escribir menos código.
Y el patrón de chulo mi biblioteca es, de lejos, el más importante con el que estar familiarizado. El patrón de "tortas" es agradable, pero debes controlar la creación de instancias, que a veces no es muy útil. También he usado Guice en un entorno mixto, no muy difícil, tampoco. Pero me parece que mezclar código es mucho menos útil de lo que pensé originalmente, aunque es probable que sea porque estoy reemplazando una gran cantidad de código Java realmente malo.
Mi entorno de edición es principalmente TextMate en OS X, pero lo implementamos en servidores Linux.
PD Sí, sé que esto tiene alrededor de 4 meses de edad, pero lo que sea. Es relevante, especialmente ahora que tenemos algo de experiencia.
Vi esto en enlaces relacionados, y pensé que iba a sonar, ahora estamos dentro de un par de años.
El soporte IDE ha mejorado mucho, IntelliJ 11 tiene un buen soporte Scala en este momento. El resaltado de sintaxis funciona muy bien, aunque la depuración aún puede ser un poco molesto.
SBT parece que está reemplazando rápidamente a maven o ant / ivy, y gracias a Dios, SBT es mucho más fácil de trabajar que Maven, y se adapta mucho mejor a Scala. IntelliJ for one también tiene una consola SBT, y combinada con la depuración interactiva puede hacer que la depuración en Scala funcione muy rápido, aunque honestamente, con el resaltado de sintaxis que se está volviendo realmente bueno, la cantidad de depuración que encuentro que necesito se reduce enormemente. Scala solo fluye mucho mejor que Java, y parece conducir a un código mucho menos propenso a errores.
La interacción con la base de datos todavía parece estar un poco en el aire, pero hay algunos frameworks que no están mal y pueden hacer que trabajes con una base de datos de una forma u otra muy rápidamente.
En este punto abundan las bibliotecas y los marcos de terceros, y por supuesto, usted todavía puede usar cualquier biblioteca antigua de Java.
En este punto, me queda la pregunta: ¿por qué no usarías Scala u otro lenguaje JVM de próxima generación para un proyecto? Y aunque la respuesta simple es que muchos desarrolladores simplemente no están listos para lidiar con Scala hoy, honestamente, necesitan hacerse con el control de sus asnos colectivos y entrar en el juego, y una compañía que exige su uso será larga. forma de hacer que eso suceda (todos necesitamos un empujón a veces para volver al juego). Además, si está realizando algún tipo de desarrollo empresarial o de alto volumen, y no comprende la programación funcional y no puede resolverla, háganos un favor, deje su IDE o prohíbe vim, siga las secuencias de comandos o busque una nueva carrera profesional.
Hoy en día, hay muchas empresas de alto perfil que aprovechan Scala, la más pública probablemente sea Twitter. También han contribuido con algunos de sus marcos en el mundo del código abierto también.
Lo usé en "ira de prueba" una vez, para cargar unos pocos gigabytes de datos (una carga de trabajo bastante ligera para lo que hacemos). Esperaba que tuviera un mayor rendimiento y menos sobrecarga de memoria que PyPy. Falló MAL, en el uso de la memoria. Tan mal estaba horrorizado, avergonzado de haberlo hablado, y nunca lo volví a ver.