Prima di tutto, i build incrementali via SBT sono piuttosto fantastici, generalmente nell'intervallo < 1 secondo. Tuttavia, a volte è necessario eseguire una pulizia completa/compilazione oppure, nel caso di build incrementali, effettuare una modifica in un file che quindi attiva la compilazione di dozzine di altri file.Scala slow build: approcci di sviluppo da evitare
Questo è quando lo sviluppo Scala diventa meno divertente ..., come il rallentamento con conseguente flusso di lavoro può incoraggiare cambio di contesto (controllare la posta elettronica, tutte le discussioni StackOverflow, ecc), che rende sottilmente uno meno produttivi
Così , quali sono gli approcci di sviluppo da evitare al fine di migliorare le build complete clean/compile e (idealmente), build incrementali di un solo file, senza la ricompilazione e la metà dell'applicazione?
Esempi Si può pensare:
1) è meglio avere un file scala mille + linea tutto-in-tutti o diversi file divisi?
2) Posso avere la mia torta (modello) o che gonfierà i tempi di costruzione?
3) posso avere il modello di libreria x, y, z del pimp, o meglio per trovare un altro modo?
4) gli oggetti del pacchetto (con impliciti) sono un killer del tempo di costruzione?
5) oggetti e tratti nidificati?
6) metodi/parametri impliciti o smettere di essere intelligente ed essere esplicito?
Concretamente, sto pensando di abbandonare un modello di torta DAO Mi è venuta in mente e ho consolidato la classe caso ScalaQuery + l'oggetto companion + il minimo fornitore di database. Questo da solo libererà 20 file scala.
L'applicazione è abbastanza piccola (120 scala + 10 file java) da rifattorizzare ora senza troppi problemi. Ovviamente man mano che cresce un'applicazione di scala, anche i tempi di compilazione si basano solo sulle LOC. Sto solo cercando di vedere dove tagliare il grasso e dove non preoccuparsi (tenere le cose così come sono) in modo che le applicazioni attuali e future traggano beneficio dall'espressività che scala offre senza inutilmente gonfiare i tempi di costruzione.
Grazie per alcuni esempi della tua esperienza del bene, del brutto e del brutto dello sviluppo della scala vis a build times.
In realtà, mi chiedo perché è necessario il 'clean' così spesso che ti infastidisce? Qualcosa è incasinato? Nella mia esperienza, 'clean' è molto raramente necessario. Uno dei casi è se si lavora con una dipendenza di istantanee ed è necessario aggiornarlo. In quei casi ho trovato 'rm -r lib_managed/jars' e una successiva compilazione più veloce. –
È vero, la pulizia non è spesso richiesta, ma il bisogno sorge (corrotto/mancante file di classe e oggetti pacchetto, il colpevole principale per me) e, naturalmente, l'implementazione richiede una pulizia completa/compilazione, che può causare problemi quando, ooops , ho perso quell'errore, devo pulire/compilare di nuovo. Questo non copre nemmeno le build incrementali in cui un singolo cambio di codice può, invece di ricompilare il file modificato, sovrapporre in cascata decine di file (tipi di auto, pattern di torta, ecc. Entrano in gioco qui), che nella mia piccola applicazione gira <1 secondo in> 10 secondi, un'enorme differenza. – virtualeyes