Utilizzando Clojure per costruire applicazioni native Android
Sviluppo Clojure sulla piattaforma Android è stato progredendo notevolmente negli ultimi anni, consentendo agli sviluppatori di utilizzarlo in applicazioni a tutti gli effetti, come la tastiera Chiarezza di SwiftKey. Qui esamineremo lo stato attuale degli strumenti che supportano Clojure sulla piattaforma Android.
Storicamente, Clojure su Android ha sofferto di avvio lento, che potrebbe durare fino a 4-10 volte più a lungo di Java quando si utilizza lo standard upstream Clojure. Questo problema è risolto da Skummet, un fork Clojure che ottimizza il compilatore di Clojure in modo che produca bytecode più compatto e più veloce da caricare. Oltre a fornire un compilatore di ottimizzazione, Skummet include anche una versione ottimizzata del runtime di Clojure creata dal primo.
Skummet mira a garantire la massima compatibilità e, anche se potrebbero esserci problemi con il codice che si basa sul riferimento diretto a Vars
, la maggior parte del codice Clojure dovrebbe essere compatibile fuori dalla scatola, secondo il creatore di Skummet Alex Yakushev.
Nel complesso, Skummet è in grado di ridurre 4 volte il tempo di caricamento al primo avvio di una semplice app di benchmark e ridurre 2 volte sia la dimensione dell’APK che l’utilizzo dell’heap. Secondo Adam Clements e Ben Leavett di SwiftKey, l’utilizzo di Skummet ha permesso loro di mantenere il tempo di caricamento della tastiera Clarity di circa 1,5–2 secondi e ulteriori miglioramenti sono possibili.
Altri strumenti utili per lo sviluppo Clojure su Android sono confezionati sotto il progetto ombrello di Clojure-Android Initiative e includono:
- droide di lein: un plugin di Leiningen che funziona come strumento di compilazione per i progetti Clojure-Android e si occupa del processo di impacchettamento delle risorse, creazione di un file APK, firma, ecc.
- Neko: un toolkit che avvolge alcune parti dell’API Java di Android per renderle più idiomatiche da utilizzare da Clojure.
Zach Oakes, autore dell’app Nightweb per Android, afferma che Clojure può ridurre “scioccamente” la base di codice di un’app abilitando idiomi concisi, oltre a migliorare la reattività dell’app rendendo più facile per il programmatore eseguire attività asincrone.
Secondo gli ingegneri di SwiftKey, l’uso di Clojure per costruire un’app Android può avere un enorme impatto sul design dell’app. In particolare, nel caso di Clarity Keyboard, ha permesso di adottare un design completamente “event driven”, che unito all’uso di una struttura dati immutabile consente di archiviare e “riprodurre” facilmente qualsiasi azione dell’utente. L’utilizzo di dati immutabili ha anche contribuito a creare un’app altamente modulare e a rendere ogni operazione asincrona per impostazione predefinita.