En primer lugar, las compilaciones incrementales a través de SBT son bastante impresionantes, generalmente en el rango de 1 segundo de <. Sin embargo, a veces tiene que hacer una compilación/limpieza completa o, en el caso de compilaciones incrementales, hacer un cambio en un archivo que luego desencadena la compilación de docenas de otros archivos.Scala slow compilaciones: enfoques de desarrollo para evitar
Esto es cuando el desarrollo se vuelve menos Scala ... diversión, ya que la desaceleración que resulta en el flujo de trabajo puede fomentar el cambio de contexto (consultar el correo electrónico, temas Stackoverflow, etc.), lo que hace que uno sutilmente menos productivos
Así , ¿cuáles son los enfoques de desarrollo que se deben evitar para mejorar las compilaciones completas de limpieza/compilación y (idealmente), compilaciones incrementales de cambio de un archivo sin recompilar?
Ejemplos que puedo pensar en:
1) ¿Es mejor tener un archivo scala de más de mil líneas, o varios archivos divididos?
2) ¿Puedo tener mi pastel (patrón) o eso inflará los tiempos de construcción?
3) ¿Puedo tener el patrón de biblioteca pimp'd x, y, z, o mejor, para encontrar otra forma?
4) son objetos de paquete (con implicits) un asesino de tiempo de compilación?
5) objetos y rasgos anidados?
6) métodos/parámetros implícitos o dejar de ser inteligente y ser explícito?
Concretamente, estoy pensando en abandonar un patrón de tortas DAO. Creo y me estoy consolidando en la clase de caso ScalaQuery + objeto acompañante + rasgo de proveedor mínimo de base de datos. Solo eso arrojará 20 archivos scala.
La aplicación es suficientemente pequeña (120 scala + 10 archivos java) para refactorizar ahora sin demasiada molestia. Obviamente, a medida que crece la aplicación de scala, también aumentan los tiempos de compilación, solo basados en los LOC. Solo estoy tratando de ver dónde recortar la grasa y dónde no molestar (es decir, mantener las cosas como están) para que las aplicaciones actuales y futuras se beneficien de la expresividad que ofrece Scala sin inflar innecesariamente los tiempos de construcción.
Gracias por algunos ejemplos de su experiencia de lo bueno, lo malo y lo feo del desarrollo de la scala en comparación con los tiempos de compilación.
En realidad, me pregunto por qué necesita el 'clean' con tanta frecuencia que le molesta? ¿Hay algo en mal estado? En mi experiencia, 'clean' rara vez se necesita. Uno de los casos es si trabaja con una dependencia de instantáneas y necesita actualizar eso. En esos casos, encontré 'rm -r lib_managed/jars' y una posterior compilación más rápida. –
Es cierto, a menudo no es necesario limpiar, pero surge la necesidad (archivos de clase y paquete corruptos/faltantes, el principal culpable para mí) y, por supuesto, la implementación requiere una compilación/limpieza completa, lo que puede ser una molestia cuando, ooops , se perdió ese error tipográfico, tiene que limpiar/compilar de nuevo. Esto ni siquiera cubre construcciones incrementales donde un único cambio de código puede, en lugar de volver a compilar el archivo modificado, formar una cascada en decenas de archivos (tipos propios, patrones de tortas, etc. entran en juego aquí), que en mi pequeña aplicación convierte <1 segundo en> 10 segundos, una gran diferencia. – virtualeyes