2009-06-09 14 views
51

He visto preguntas sobre IDE aquí - Which is the best IDE for Scala development? y What is the current state of tooling for Scala?, pero he tenido experiencias mixtas con IDEs. En este momento, estoy usando el IDE de Eclipse con la opción de actualización automática del espacio de trabajo, y Kate de KDE 4 como mi editor de texto. Éstos son algunos de los problemas que me gustaría resolver:¿Cuál es el mejor sistema de compilación de Scala?

  1. usar mi propio editor IDE son muy orientado a todo el mundo el uso de sus componentes. Me gusta más Kate, pero el sistema de actualización es muy molesto (no utiliza inotify, sino un intervalo de sondeo de 10 segundos). La razón por la que no uso el editor de texto incorporado es porque las funcionalidades de autocompletar interrumpidas hacen que el IDE se cuelgue por unos 10 segundos.
  2. reconstruir solo archivos modificados El sistema de compilación Eclipse está roto. No sabe cuándo reconstruir clases. Me encuentro casi medio del tiempo yendo a project-> clean. Peor aún, parece que incluso después de que haya terminado de construir mi proyecto, unos minutos más tarde aparecerá un extraño error (edit - estos errores parecen ser cosas que se resolvieron previamente con un proyecto> clean, pero luego vuelven arriba...). Por último, la configuración de "Preferencias/Continuar inicio si el proyecto contiene errores" para "solicitar" parece no tener ningún efecto para los proyectos de Scala (es decir, siempre se inicia incluso si hay errores).
  3. personalización de compilación Puedo usar el lanzamiento "nocturno", pero querré modificar y usar mis propias compilaciones de Scala, no el compilador integrado en el complemento del IDE. También sería bueno pasar [por ejemplo] -Xprint:jvm al compilador (para imprimir el código reducido).
  4. compilación rápida Aunque Eclipse no siempre se compila correctamente, parece ágil, incluso más que fsc.

Miré a Ant y Maven, aunque todavía no he empleado (también necesitaré pasar tiempo resolviendo los números 3 y 4). Quería ver si alguien tiene otras sugerencias antes de pasar tiempo trabajando en un sistema de compilación subóptimo. ¡Gracias por adelantado!

ACTUALIZACIÓN - Ahora estoy usando Maven, pasando un proyecto como un complemento del compilador. Parece lo suficientemente rápido; No estoy seguro de qué tipo de almacenamiento en caché de tarros hace Maven. Un repositorio actual para Scala 2.8.0 está disponible [link]. Los arquetipos son geniales, y el soporte multiplataforma parece muy bueno. Sin embargo, sobre problemas de compilación, no estoy seguro de si fsc está realmente arreglado, o si mi proyecto es lo suficientemente estable (por ejemplo, los nombres de las clases no cambian). Ejecutarlo manualmente no me molesta demasiado. Si desea ver un ejemplo, siéntase libre de navegar por los archivos pom.xml que estoy usando [github].

ACTUALIZACIÓN 2 - a partir de los puntos de referencia que he visto, Daniel Spiewak es el derecho del más rápido que Maven que Buildr (y, si uno está haciendo cambios incrementales, 10 segundos de latencia de Maven pone molesto), por lo que si se puede elaborar un compatibles crear archivo, entonces probablemente valga la pena ...

+1

La pregunta debe cambiarse a "¿Cuál es el mejor sistema de compilación de Scala [para estos requisitos estrechos]". Los criterios que usted da hacen que la pregunta de sondeo general sea muy específica para sus preferencias individuales. Supongo que mi queja es que estás agachado en el mejor título para la pregunta de propósito general. Afortunadamente, algunas de las respuestas son de propósito general. – toolbear

+0

Como esta es una pregunta "¿qué es lo mejor ...?", ¿Podría agregar la etiqueta [subjetiva]? No tratando de ser idiota, honesto;) – toolbear

+0

añadido tag subjetivo. en re. "¿Cuál es el mejor sistema de compilación de Scala [para estos requisitos estrechos]"? No creo que estos sean requisitos estrictos. Cualquier buen sistema de compilación debe ser rápido, modular (independiente de los IDEs si es necesario) y permitir que se utilicen las opciones subyacentes (en este caso, para el compilador de Scala). Agregar criterios asegura que los respondedores consideren las características importantes, en lugar de sugerir el compilador más simple que funcione para ellos. – gatoatigrado

Respuesta

34

Los puntos 2 y 4 son extremadamente difíciles de manejar con el scalac actual. El problema es que el compilador de Scala es un poco tonto al compilar archivos. Básicamente, generará lo que sea que alimentes, independientemente de si ese archivo realmente necesita ser creado o no. Scala 2.8.0 tendrá algunas mejoras tremendas a este respecto, pero hasta entonces ... Eclipse SDT en realidad tiene un código muy elaborado (y muy hackoso) para realizar la detección de cambios y el seguimiento de la dependencia. En general, hace un trabajo decente, pero como has visto, hay arrugas. Eclipse SDT 2.8.0 confiará en las mejoras antes mencionadas de Scalac.

Por lo tanto, crear archivos modificados es prácticamente imposible. Aparte de SDT, la única herramienta que conozco que incluso intenta esto es SBT (Simple Build Tool). Utiliza un complemento de compilación para rastrear los archivos a medida que se compilan y consultar el gráfico de dependencia calculado por el propio compilador. En la práctica, esto produce aproximadamente una mejora del 50% sobre el enfoque de recompilación del mundo. Una vez más, este es un truco para sortear las deficiencias en Scalac anterior a la 2.8.0.

La buena noticia es que la compilación razonablemente rápida aún se puede lograr incluso sin preocuparse por la detección de cambios. FSC usa la misma tecnología (ooh, que sonaba tan "Charlie Eppes") que Eclipse SDT usa para implementar una compilación incremental rápida. En resumen, es bastante ágil.

Personalmente, uso Apache Buildr. Su configuración es significativamente más limpia que la de Maven o SBT y su tiempo de inicio es de órdenes de magnitud menor (cuando se ejecuta bajo MRI). Se integra con FSC e intenta hacer algo de detección de cambio básico por sí mismo (bastante primitivo). También tiene soporte auto-mágico para los principales marcos de prueba de Scala (ScalaTest, ScalaCheck y Specs), así como soporte para compilación conjunta con fuentes Java y meta generación de IDE para IntelliJ y Eclipse. Ah, y es compatible con todas las características de Maven (resolución de dependencia, etc.) y algo más. Incluso estoy trabajando en una extensión que permitiría el soporte de shell interactivo integrado con JavaRebel y el soporte de varios proveedores de shell (Scala, JIRB, Clojure REPL, etc.). Todavía no está listo para el SVN, pero lo confirmaré una vez que esté listo (posiblemente a tiempo para 1.3.5).

Como puede ver, estoy firmemente convencido de que Buildr es la mejor herramienta de construcción de Scala que existe. Su documentación es un poco irregular en lo que respecta a Scala, pero eso se debe a que todo es tan directo que es difícil documentarlo sin sentirse prolijo. Siempre puedes echar un vistazo a uno de my GitHub repositories para ver ejemplos. ¡Buena suerte!

+0

Gracias, pero parece que fsc me está dando problemas incluso desde la línea de comandos. Por ahora, me atendré al enfoque de recompile-the-world, ya que en realidad se compila correctamente (argh ...). Voy a probar buildr cuando fsc comience a funcionar. – gatoatigrado

+7

@Daniel Spiewak, "El problema es que el compilador de Scala es un poco tonto acerca de la creación de archivos. Básicamente, generará lo que sea que alimentes, independientemente de si ese archivo realmente necesita ser creado o no". ¿Me falta algo? ¿Un compilador a veces no crea archivos si los especifica para que sean compilados? Me parece como si un compilador no decidiera qué se debe construir o no, alguna otra aplicación debería decidir qué archivos se deben alimentar al compilador. –

+20

El compilador de Java verificará si los archivos realmente * necesitan * reconstrucción antes de continuar con ello. Esta es una característica importante de los compiladores modernos. En los viejos tiempos, podíamos usar el seguimiento de archivos de Make para evitar que GCC reconstruyera * todo * cada vez. Sin embargo, los lenguajes como Java y Scala permiten las dependencias circulares y transitorias entre los archivos, necesitando que estén construidos juntos y los cambios en una fuerza, una reconstrucción de la otra. Scala es particularmente desagradable en este departamento. En resumen, Make (y otro seguimiento de compilación) ya no es suficiente, por lo que el compilador debe ser inteligente. –

6

¿Has mirado Intellij IDEA y su Scala integration? Intellij tiene un seguimiento leal (¿fanático?) Entre los desarrolladores de Java, por lo que puede encontrar que esto es apropiado para sus necesidades.

+2

Los IDE comerciales no son una opción para mí. ¡Gracias de cualquier manera! – gatoatigrado

+3

Aunque JetBrains (el productor de IntelliJ IDEA) ofrece licencias gratuitas para desarrolladores de código abierto para trabajos de código abierto. No estoy seguro de cuáles son las restricciones, pero si desea IDEA en particular, podría valer la pena investigar. – mcherm

+6

JetBrains presentó recientemente la versión de código abierto de IDEA llamada Community Edition. Ver http://www.jetbrains.com/idea/free_java_ide.html. Funciona bien con el complemento Scala. –

4

Am también bastante frustrado con el plugin Scala en Eclipse y puedo añadir algunas más problemas a la lista:

  • auto-completar sólo funciona parte del tiempo
  • el depurador no funciona correctamente (especialmente cuando se intenta depurar scala xml)
  • el depurador olvida los puntos de corte
  • 'ir a definición' no funciona más de las veces.

Me alegra saber que Buildr suena como una mejor alternativa (en el frente de la construcción de todos modos), voy a intentarlo, ¡gracias!

+2

Tenga en cuenta que esta respuesta es muy antigua, y el complemento de Eclipse ahora es muy agradable. http://scala-ide.org/ –

3

Fui por el mismo camino, y aquí es donde estoy en: - Después de una investigación inicial, dejé caer a Kate. Me encanta usarlo para la mayoría de las cosas, pero cuando se trata de cosas como definir las terminaciones de pestañas, me parece que falta mucho. Le recomiendo que busque en gedit, que es mucho más robusto para el desarrollo de Scala - Con gedit como mi editor, uso SBT y he encontrado que es una gran herramienta de compilación. Puedo ponerlo en un modo de "prueba" donde cuando cualquier código cambia, recompila los archivos relevantes y ejecuta mi suite de pruebas. Esta ha sido una manera extremadamente efectiva de trabajar.

Todavía no he echado un vistazo a Buildr.Me gustaría decir que lo haré, pero sinceramente, con SBT a mi disposición, realmente no tengo una necesidad imperiosa de mirar a otra herramienta de compilación.

2

Si desea utilizar Eclipse, pero la construcción del proyecto usando SBT, y aún así ser capaz de depurar, echar un vistazo a este post aquí:

zikaprog.wordpress.com/2010/04/19/scala -eclipse-sbt-and-depuración/

También se puede aplicar a constructores que no sean sbt.

+0

La versión actual del Eclipse Scala IDE está usando sbt para construir, FYI. –

+0

Esta respuesta fue escrita hace 2.5 años, ¡pero siempre es bueno ver que hay personas actualizando Internet! ¡Gracias! – Roland

3

Si usa Emacs, creo que Ensime es un IDE bastante bueno. Creo que en el momento de escribir, Ensime es el único IDE que le dará una autocompletación rápida y precisa tanto en objetos de Scala como de Java, incluidas las conversiones implícitas.

Hay soporte de navegación de código usando la barra Speedbar, plantillas de código usando el excelente Yasnippet, y menú de finalización de código usando Autocompletar. Todos estos son paquetes de Emacs muy modernos y mantenidos activamente. También hay soporte de construcción incremental fuera de la caja para Maven y SBT.

Hay mucho más allí, como la depuración interactiva, la refactorización y el intérprete de Scala en un proceso inferior. Todo lo que quieres en un IDE moderno para Scala ya está disponible en Ensime. Muy recomendado para Emacsens.

+0

suena bien; Aunque soy un usuario de vim ... – gatoatigrado

4

Por las razones de exhaustividad, tengo que decir que también hay Pants - la herramienta de construcción que se utilizan en Twitter (uno de los adoptadores tempranos Scala)

La principal diferencia es que no se pretende solo para scala (y escrito en python, por cierto) y está modelado después de google build system.

No está tan hinchado como sbt, por lo que para los principiantes es mucho más simple, pero nunca he oído hablar del uso de pantalones fuera de twitter y foursquare.

Si tiene miedo de SBT, tal vez otra herramienta de construcción no tan popular, ABT, podría ser una alternativa para usted?

Cuestiones relacionadas