Era da parecchio che non scrivevo più un post tecnico, e forse nemmeno questo sarà così tecnico, quanto più una rapida riflessione.
Nel paio di settimane di ripresa del lavoro dopo le vacanze estive, ho avuto occasione/necessità di scrivere un paio di utility da usare su un paio di sistemi embedded, essenzialmente per scaricare dati usando un po’ di protocolli (modbus, messaggistica di TinyOS). La scelta del linguaggio un po’ di tempo fa sarebbe ricaduta su un banale Java, ora invece è ricaduta su Scala.
Premessa: tendo a non prendere in considerazione linguaggi di scripting per cose che non siano uno script scritto al volo e da usare due volte in croce; questo perchè, per quanto apprezzi linguaggi come Python quando serve,
- la struttura del programma tende a degenerare rapidamente: se non sei costretto dal linguaggio a mantenere un minimo di struttura, e non hai tanto tempo da perdere (una delle utility è stata scritta in una giornata, per poterla testare sul campo il giorno successivo), non fai nulla per dare almeno quel minimo di struttura
- se il linguaggio non è compilato, tendo ad evitarlo: il lavorare solo a runtime ti costringe ad intercettare la classica quantità di ca***tine solo eseguendo il programma n volte, mentre se compili quegli stessi problemi li risolvi molto prima (se penso a tutte le volte in cui ti accorgi di aver sbagliato la ricezione di un messaggio in Erlang per aver invertito due parametri in una tupla…).
Dicevo: la scelta ormai ricade su Scala, dato che:
- ha un build system tutto sommato decente (per quanto sotto ci sia Ivy ed i repository di Maven): salvo trovare incompatibilità tra versioni di Scala e versioni di libreria, funziona abbastanza bene e si configura con un semplice file di testo
- ha il sistema di classi e quant’altro di Java
- è compatibile con Java (fondamentale: per modbus avevo già testato tempo fa una libreria che funzionava sui miei apparecchi, e TinyOS ha una versione Java delle sue librerie)
- è (anche) funzionale: se un linguaggio non mi supporta lambda, liste ed il trittico filter/map/fold, per quanto mi riguarda è un linguaggio che non considero
- posso scegliere quando fare le cose immutabili e quando no (quest’ultima cosa praticamente mai, dato che la mutabilità è il male, ma in alcuni sporadici casi è un male necessario).
Tutto qui 🙂 a breve penso di scrivere un post un po’ più tecnico su un altro progetto più a lungo termine, fatto sempre in Scala, con cui ho potuto sperimentare con un po’ di tecnologie divertenti (tra cui Akka, Play e RabbitMQ).