Slint: 4 librerie per GUI embedded a confronto

Slint (sito ufficiale) è una libreria grafica nuova nel panorama delle UI. Gli sviluppatori hanno lavorato in precedenza su Qt e Qml. Tecnicamente è interessante e valida, gli autori hanno migliorato i punti critici di Qml ma lasciando il look and feel identico, per cui tutti gli sviluppatori Qt/Qml si troveranno a casa.

Il focus della libreria sono le UI altamente personalizzate di sistemi embedded Linux based o MCU.

Tecnicamente la libreria è interessante perché fornisce un linguaggio dedicato per la definizione della UI che è type-safe, supporta nativamente hot-reload e permette di avere anteprime immediate della UI. La business logic può essere scritta in C++, NodeJS o Rust, cosa che la rende una delle prime librerie grafiche utilizzabili per scrivere applicazioni commerciali in Rust.

Licenza

Slint viene distribuito con 2 licenze principali: GPLv3 e commerciale. La licenza commerciale è abbastanza chiara nei termini, è perpetua e richiede il pagamento di royalties per ogni pezzo venduto. Al momento le royalties sono fissate a 1€/pz.

Al momento della stesura di questo articolo è presente anche una terza opzione, chiamata licenza Ambassador, che equivale ad una licenza commerciale ma richiede all’utilizzatore di pubblicizzare l’utilizzo di Slint e essere inserito sul sito come case study.

Piattaforme supportate

Slint supporta tutte le maggiori piattaforme desktop, i sistemi Linux embedded e alcuni sistemi a MCU. È anche possibile compilare l’applicazione tramite WebAssembly. Non esistono widget per desktop già pronti simili allo stile della piattaforma, a meno di non usare il backend che usa Qt per il disegno.

Linguaggi di programmazione

I linguaggi supportati per scrivere il backend sono Rust, C++ e NodeJS, mentre per la UI si usa un linguaggio dedicato, dichiarativo, type-safe e simile concettualmente a Qml.

Gestione immagini e font

Sono supportati tutti i formati più diffusi di immagini e font. Sono rimasto stupito dalla facilità con cui è possibile integrarli all’interno dell’applicazione: i font possono essere integrati direttamente nell’applicazione tramite uno statement di import nei file di UI; il compilatore li inserirà nel binario finale automaticamente. Anche le immagini sono utilizzabili con altrettanta facilità, basta usare l’apposito statement per caricarle.

Tooling

Gli strumenti al contorno della libreria non sono molti, ma ce ne sono un paio che semplificano la vita al programmatore: il primo è lo hot reload del viewer di file .slint; il secondo è l’immagine docker per la cross compilazione su Raspberry. Tristemente manca il supporto alle traduzioni dell’applicazione.

Scalabilità

Il target principale della libreria sono sistemi Linux embedded o sistemi a microcontrollore. Anche i sistemi desktop sono ben supportati; da considerare che per avere il look and feel della piattaforma, Slint si appoggia a Qt.

Maturità

La libreria è ancora giovane e sviluppata quasi esclusivamente da una startup. È disponibile il supporto a pagamento.

Documentazione

La documentazione non è particolarmente esaustiva. A volte è necessario guardare alcuni degli esempi per capire meglio come sfruttare alcuni componenti.

Conclusioni

Slint è una libreria ancora giovane ma che sta facendo rapidi progressi. Non è possibile ignorare la pesante ispirazione che Slint ha preso da Qt Quick; possiamo dire che ha preso le parti migliori, come il linguaggio dichiarativo e i data bindings, e ha migliorato aspetti più critici, aggiungendo ad esempio hot reload e type safety, che rende grossi cambiamenti alla UI più semplici grazie all’assistenza del compilatore.

Slint può essere usata per creare applicazioni altamente personalizzate per target MCU, Linux embedded e Desktop; non è adatta per lo sviluppo mobile o applicazioni con il look and feel Desktop. Inoltre manca completamente di supporto all’accessibilità, che però è in sviluppo.

Una nota dolente è la completa assenza di supporto alle traduzioni, ma è il primo task della roadmap, per cui ci sono buone speranze che venga implementato quanto prima.

In conclusione, è una libreria moderna, che pone notevole accento sulla facilità di sviluppo e sul tooling, e con termini di licenza accessibili a qualunque azienda. Al momento forse l’unico vero ostacolo per l’adozione in progetti commerciali è la mancanza del supporto alle traduzioni.

Vuoi approfondire la tua conoscenza di Slint? Guarda il webinar “Introduzione a Slint UI toolkit

Altri articoli della serie