Il contesto

Consideriamo uno sviluppo tramite toolkit Qt su piattaforma ARM Mx.i6ULL e sistema operativo Linux, soluzione che consente un uso integrato dei linguaggi C++, JavaScript e QML anche in presenza di scarsa potenza di calcolo.

Il nostro contributo

Un approccio comunemente adottato in questo tipo di contesto prevede di implementare l’intera logica di funzionamento in C++, per garantire il soddisfacimento degli stringenti requisiti di RAM (<=128MB) imposti dal sistema embedded. 

Contrariamente a quanto si potrebbe pensare, è possibile, in alternativa, limitare l’uso del C++ e porre il JavaScript come linguaggio centrale dell’applicazione, senza per questo incorrere in perdite di efficienza che risultino proibitive a fronte delle limitate risorse hardware disponibili.

Il metodo

Nel caso in cui, ad esempio, si debbano implementare delle logiche di macchine a stati, come abbiamo fatto nello sviluppo di questo software di collaudo, per verificare tempestivamente che la soluzione sia corretta, è conveniente sviluppare per prima la porzione di logica con maggiori esigenze computazionali, così da testare l’utilizzo delle risorse nel caso peggiore. In questo modo si fa una sorta di Smoke Test per testare la scelta sull’hardware di cui si dispone.

Così facendo, si può scoprire che la JavaScript engine in ambiente Qt/QML (derivata dalla V8 di Google) è sufficientemente ottimizzata da non interferire con i limiti di memoria imposti dall’hardware (un progetto Qt/QML di base può richiedere infatti solo 16 MB di RAM).

A questo punto, una volta confermate le ipotesi iniziali, il C++ può essere limitato alla logica di basso livello del controllore (nel caso in cui, ad esempio, sia già presente un software parzialmente preesistente), mentre la logica delle singole macchine a stati e la loro interazione con l’unità di controllo possono essere implementate in JavaScript. 

Esempi

Per capire meglio i vantaggi che può portare la scelta del Javascript per la business logic riportiamo di seguito alcuni esempi con i relativi snippet di codice.

Scrittura di un file

La scrittura di un file è una tipica operazione di basso livello, per la cui implementazione risulterebbe naturale ricorrere al C++. In alternativa, è possibile affidarsi al JavaScript e fare un POST sull’URL dato dal nome del file (se esso si trova nella directory corrente) o, più in generale, dal suo path relativo. Il risultato è un codice estremamente leggibile e intuitivo:

Timer

Sono molte le istanze in cui, in un contesto come quello descritto, ci può essere la necessità di tener traccia del trascorrere del tempo. In questo caso la convenienza del JavaScript è ancora più evidente, dal momento che Timer è una delle classi/tipi presenti in QML. L’esempio che segue descrive un bottone “RIAVVIA” che, se cliccato, fa partire un conto alla rovescia di dieci secondi, al termine del quale il sistema viene riavviato; il conto alla rovescia può essere interrotto, prima dello scadere del tempo, cliccando nuovamente il bottone, che riporterà adesso la dicitura “STOP”:

Si osservi come il JavaScript possa essere integrato al markup QML per definirne gli aspetti imperativi.

I vantaggi

Le scelte progettuali descritte garantiscono accesso ai vantaggi offerti dal JavaScript, in quanto linguaggio di più alto livello rispetto al C++, interpretato, a tipizzazione dinamica e con supporto a un paradigma dichiarativo-funzionale, con conseguente riduzione dei tempi di sviluppo e manutenzione del software e accesso a un maggior bacino di informazioni vista la più ampia diffusione dell’uso del Javascript rispetto al C++ nei vari contesti di sviluppo software

Francesco Ballerini
Software Engineer
Kiwibit

Francesco Ballerini
Software Engineer
Kiwibit

POTREBBERO INTERESSARTI ANCHE

Le parole chiave dell’innovazione: ecco come l’industria 4.0 rivoluzionerà la produzione nei prossimi anni

Acatech Acatech è l'Accademia tedesca delle scienze e dell'ingegneria fondata il 1 ° gennaio 2008 e che rappresenta gli interessi delle scienze tecniche tedesche in modo indipendente in patria e all'estero, equivalente al nostro CNR. Essa fornisce valutazioni...

Share This