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
Ti è stato utile questo articolo?
POTREBBERO INTERESSARTI ANCHE
K4asset & Safety. Il progetto OmniaK con cui vogliamo migliorare le condizioni di sicurezza dei luoghi di lavoro
Da quando Kiwibit è stata fondata, più di dieci anni fa, ci siamo costantemente dedicati alla digitalizzazione dei processi aziendali, con lo scopo di consentire alle imprese di concentrarsi sulle attività ad alto valore aggiunto. Negli ultimi anni in particolare ci...
Il cuore di un’operazione di Manutenzione Efficace: il CMMS
La gestione efficiente delle attività di manutenzione è fondamentale per qualsiasi azienda che desideri mantenere l'affidabilità dei propri asset. In questo contesto, il termine "CMMS" è fondamentale, ma cosa significa esattamente e come funziona? Cos'è un CMMS? Un...
L’importanza del Design UX/UI nell’Industria: la chiave per il successo
Nell'industria, la qualità e la funzionalità di un prodotto o di un software erano tradizionalmente considerate le caratteristiche principali. Tuttavia, negli ultimi anni, il panorama aziendale ha subito una trasformazione significativa. L'esperienza dell'utente (UX)...