¿Alguien está usando Scala enojado (y qué consejo para un programador de Java)?[cerrado]

StackOverflow https://stackoverflow.com/questions/554913

  •  23-08-2019
  •  | 
  •  

Pregunta

He sido programador de Java durante más de 10 años desde que comencé con Smalltalk.es mi opinion que próximos grandes idiomas probablemente sean aquellos 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): case declaraciones para jerarquías de clases, cierres, inferencia de tipos, ya que me permitirán escribir código más conciso y claro (espero).¡Un poco más cerca de Smalltalk!

Todas las cosas que son naturales en Java:

  • Edificio con ant
  • implementar aplicaciones/bibliotecas en lógicas jars
  • Excelente soporte para herramientas IDE
  • ¿Escribir GUI (o hacer que una GUI Swing se comunique con ella a través de algún tipo de comunicación remota?)
  • Bibliotecas/marcos de terceros
  • Propiedades de configuración, XML, Spring etc)
  • controladores de base de datos, etc.

Me preocupa que la diferencia entre jugar con algún proyecto favorito y dar el salto a usarlo con ira en el lugar de trabajo sea demasiada.

  1. ¿Alguien ha dado este salto?
  2. ¿Valió la pena?
  3. ¿Qué lecciones aprendiste?

(Obviamente la gente usando Scala, pero ¿alguien está construyendo algo real, a falta de una palabra mejor? Empresa aplicaciones?)

¿Fue útil?

Solución

He utilizado Scala en nuestra infraestructura existente de Java para consultar y manipular grandes documentos XML. No fue posible utilizando las bibliotecas Java XML estándar o no tan fácilmente.

tuve la tentación de usarlo para los cálculos de rendimiento de la cartera, pero ya había terminado la versión Java. Una versión Scala habría sido más fácil de mantener, ya que es más fácil de traducir las fórmulas directamente en el código.

Otra área donde puede colarse en Scala es con multihilo. No tienen experiencia real con esto, pero parece ser más fácil en Scala.

El punto es, no trate de verlo como un reemplazo de Java, por ahora, sino que lo utiliza donde se puede utilizarla fortalezas junto a su código Java existente.

he usado IntelliJ con el plugin Scala como un IDE, pero aún no ha llegado. Es factible en combinación con el plugin de Maven y la consola.

También soy un programador y Smalltalk encanta ser capaz de utilizar los bloques de código en Scala. En comparación con Java hay menos código, pero todavía no es tan readible como código de Smalltalk.

Por cierto, la comunidad Smalltalk está creciendo de nuevo gracias al marco Mar, por lo que es posible que desee volver

Las cosas que aprendieron o consiguieron una mejor comprensión de:

  • el uso de constructores
  • el concepto inmutable
  • trabajar con listas y recursividad
  • programación funcional en general

Así que sí, creo que vale la pena.

Otros consejos

Básicamente, golpeé a todos en la cabeza con el código Scala en nuestro último proyecto, ya que me cansé de depurar los mismos problemas causados ​​por la falta de comprensión de Hibernate + JBoss.(Es increíble, de verdad.Los desarrolladores que escribió el sistema original todavía está allí y todavía se pierde en los detalles de Hibernate).

Lo que teníamos -> un sistema extravagante construido principalmente con un montón de beans EJB sin estado conectados con un código de hibernación combinado con algo de SQL.(Somos una ASP, básicamente.El grupo de producción es bastante pequeño -> sólo alrededor de 100 máquinas).

Lo que hice -> armé 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 donde no se prestaba atención a las dependencias.

Hasta ahora, hemos comenzado a implementar código dentro y fuera de instancias de JBoss sin problemas reales.La primera vez que intentas usar Scala object en Java, probablemente arrugarás la nariz.Pero por lo demás, nadie se dio cuenta.

Hasta ahora, han pasado aproximadamente 5 meses desde que realmente empezamos.Hemos realizado un par de revisiones importantes y, posteriormente, estamos atrasados, pero el sistema está mucho, mucho mejor probado que en el pasado.Entonces, si bien se nos han colado algunas malas ideas mientras realmente estábamos aprendiendo el sistema, ahora hemos podido eliminarlas todas y acercarnos mucho a la implementación de producción.En general, diría que el tipo típico necesita de 2 a 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 solucionado casi todos nuestros problemas de rendimiento.En realidad, la velocidad ha sido significativamente mejor, pero eso se debe principalmente a que pude hacer todo lo que quería con menos código de aplicación real.

Herramientas que estoy usando:

  1. descansar :Muy contento con este marco.Nuestra capa restlet es un código escandalosamente trivial.
  2. JDBC -> nota:Hemos modificado lo que básicamente había en la wiki.
  3. XML (y pronto, JSON)
  4. buildr, maven en un par de proyectos que no quería convertir (además de Nexus y Hudson).Estoy experimentando con sbt, que ya esta muy Agradable para proyectos Scala.

No hemos tenido absolutamente ningún problema con la reutilización de cualquiera de las antiguas bibliotecas de Java, pero tendemos a envolverlas en capas escaladas.Principalmente solo para escribir menos código.

Y el proxeneta mi biblioteca El patrón es, con diferencia, el más importante con el que estar familiarizado.El patrón "pastel" es bueno, pero hay que controlar la creación de instancias, lo que a veces no es del todo útil.También he usado Guice en un entorno mixto, y tampoco es muy difícil.Pero encuentro que mezclar código es mucho menos útil de lo que pensaba originalmente, aunque probablemente se deba a que estoy reemplazando una gran cantidad de código Java realmente malo.

Mi entorno de edición es principalmente TextMate en OS X, pero implementamos en servidores Linux.

PDSí, sé que esto tiene unos 4 meses, pero da igual.Es relevante, especialmente ahora que tenemos algo de experiencia.

He añadido clojure a la infraestructura de software utilizado en el centro de operaciones científicas de la Kepler misión. Ahora que está ahí para hacer la depuración interactiva; ejecutar el REPL, cargar algunas clases y ejecutar métodos de una manera ad hoc.

EDIT: OK, por lo que "cargar y ejecutar algunas clases de métodos" es vaga. Por ejemplo, podemos cargar nuestras clases crud y luego ejecutar el método para convertir un tipo de nave espacial en otro tiempo.

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 pueden ser llamados para convertir este momento 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 hay necesidad de ya que todo está disponible de clojure.

Vi esto en enlaces relacionados, y pensé que interrumpiría, ahora estamos un par de años en el futuro.

soporte IDE ha mejorado mucho, IntelliJ 11 tiene muy buen soporte Scala en este punto. El resaltado de sintaxis funciona muy bien, aunque la depuración todavía puede ser un poco molesto.

SBT parece que se está reemplazando rápidamente experto o una hormiga / hiedra, y gracias a Dios, SBT es mucho más fácil de trabajar que Maven, y se adapte a Scala mucho mejor. IntelliJ por una también tiene una consola de SBT, y se combina con la depuración interactiva puede hacer que la depuración en Scala ir muy rápidamente de hecho, aunque en honor a la verdad, con resaltado de sintaxis ahora poniendo muy bueno, la cantidad de depuración Me parece que lo que necesito es reducido en gran medida. Scala sólo fluye mucho mejor que el de Java, y parece conducir a mucho menos código propenso a errores.

interacción de base de datos todavía parece un poco hacia arriba en el aire, pero hay un par de marcos por ahí que no está mal y puede conseguir que se trabaja con una base de datos de una manera u otra con bastante rapidez.

bibliotecas de terceros y marcos abundan en este punto, y por supuesto, todavía se puede utilizar cualquier biblioteca de terceros Plain Old Java.

En este punto, me queda la pregunta: ¿por qué no usar Scala u otro lenguaje de nueva generación JVM para un proyecto? Y aunque la respuesta simple es que muchos desarrolladores simplemente no están preparados para hacer frente a Scala hoy, en honor a la verdad, que necesitan para obtener la cabeza de sus culos colectivos y entrar en el juego, y una empresa que obliga a que es el uso que recorrer un largo manera de hacer que eso suceda (todos necesitamos un empujón a veces volver a entrar en el juego). Además, si usted está haciendo cualquier tipo de "empresa" o el desarrollo de alto volumen, y no comprende la programación funcional y no puede entenderlo, nosotros hacemos un favor a todos, dejó su IDE, o dios- prohibir vim, se adhieren a secuencias de comandos o encontrar una nueva carrera.

Hay muchas compañías de alto perfil que aprovechan Scala hoy, el más público de los cuales es probable que Twitter. También han contribuido algunos de sus marcos en el mundo del código abierto también.

Sí, la gente está construyendo aplicaciones reales "empresa" con Scala (y Clojure). Sólo hazlo.

Por supuesto, las personas también están utilizando Smalltalk, así que si te gusta Smalltalk, por qué no usar eso?

Lo utilicé en "la ira de prueba" de una vez, para cargar unos cuantos gigabytes de datos (una carga de trabajo bastante ligero por lo que hacemos). Tenía la esperanza de que tendría un mayor rendimiento y menos sobrecarga de la memoria de PyPy. Fracasó mal, en el uso de la memoria. Tan mal que estaba horrorizado, avergonzado de haber hablado arriba, y nunca se vio de nuevo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top