Cos’è PL73?

Negli ultimi giorni ho voluto condividere sui miei social un post, non molto comprensibile dove raccontavo qualcosa sulla creazione di un nuovo linguaggio. Ma cosa significa questo? Per me significa molto, dato che sin da bambino ho avuto la possibilità di studiare la “logica dei computer”, a tratti semplice, ma assolutamente complessa.

Il vero divertimento è dato sicuramente dalla matematica che c’è dietro e da come un calcolatore è in grado di elaborare le informazioni e di come uno sviluppatore (attraverso un linguaggio di programmazione, ndr) può impartire comandi da far eseguire con lo scopo di risolvere un problema noto. E allora, dopo aver capito cosa “digerisce” un computer, è necessario capire come dare istruzioni al computer in modo da fare ciò che noi chiediamo. Qui nascono gli algoritmi, ovvero sequenze di istruzioni finite ed ordinate che hanno lo scopo di risolvere un problema specifico. Bello, no?

Ma una volta che noi abbiamo formulato un algoritmo, robusto e funzionante, che ci permette di eseguire istruzioni, creare applicativi, far accendere luci e quant’altro, come lo “traduciamo” in un qualcosa comprensibile per un computer? Qui nasce l’esigenza di relazionare il linguaggio umano in linguaggio macchina. Come, credo, sia noto, i calcolatori funzionano con un sistema di numerazione binario, cioè composto da soli 0 e 1. Il motivo è presto detto e semplificando molto, possiamo dire che un computer funziona come se al suo interno ci fossero tantissimi interruttori, come quelli per accendere la luce a casa, e un interruttore può essere solo acceso o spento, in modo alternato e non contemporaneo.

Allora decidiamo di rappresentare questi due stati (acceso, spento) con dei valori numerici, e ci rendiamo subito conto che bastano solo due valori numerici per rappresentare i due stati. Assegniamo lo 0 come rappresentazione dello stato spento e 1 per lo stato acceso. Il linguaggio macchina è qualcosa di complicato, ma possiamo semplificare molto dicendo che, grosso modo funziona così, cioè dando al computer una sequenza di 0 e 1 che permettono di pilotare i vari “interruttori” costruendo una soluzione al nostro problema. I linguaggi di programmazione nascono con l’esigenza specifica di semplificare la programmazione di un computer, avvicinando molto il linguaggio del calcolatore al linguaggio umano.

Nasce però un problema, ogni calcolatore accetta un suo insieme di istruzioni, o meglio, ogni processore ha un suo set di istruzioni (ISA - Instruction Set Architecture), e dunque un linguaggio unico non permette di scrivere applicativi per processori diversi.

Qui nascono i compilatori, ovvero programmi in grado di effettuare la traduzione tra linguaggio di programmazione e linguaggio macchina per ogni linguaggio macchina e, quindi, per ogni processore. Da questo punto in avanti diventa semplice (relativamente) scrivere codici, creare applicativi, modificarli, migliorarli e sviluppare idee sempre più sofisticate.

Nasce però, un’altra esigenza, ovvero quella che ogni codice necessita la compilazione su ogni calcolatore, anche se con hardware identico, e questo comporta problemi, dato che su ogni computer deve esserci installato il compilatore e su ogni computer deve esserci il codice sorgente dell’applicativo che deve essere eseguito, previa compilazione. E se lo sviluppatore decide di fare una modifica? Bisogna trasferire il codice sorgente su ogni computer e ricompilarlo di nuovo. E se il software è molto complesso? Quanto tempo ci vuole?

Sono domande che hanno trovato risposta con il tempo, sono nati gli interpreti (che traducono ogni istruzione al momento dell’esecuzione) e sono nate le macchine virtuali, e anno dopo anno ci sono stati miglioramenti, fino al punto in cui sono arrivati gli smartphone e i tablet.

Ora, come facciamo a programmare un’app per smartphone e/o tablet? Lo facciamo allo stesso modo di un PC, ma se volessimo usare questa app sia su PC che su smartphone/tablet? Come possiamo fare?

Tralasciando il discorso sui sistemi operativi, che sono software molto complessi, la risposta la potremmo trovare utilizzando un sistema che sia comune ai vari dispositivi, ma con sistemi operativi diversi e hardware diversi diventa difficile mettere insieme un programma che funzioni ovunque. Di qui, nasce il concetto di cross-platform, ovvero applicativi unici che possono essere eseguiti indistintamente ovunque. Se però decidiamo di aggiungere qualcosa di grafico la situazione si complica. Ci sono state tante soluzioni a questo dilemma, una è stata quella di usare le macchine virtuali.

Per dirlo in modo semplice e veloce, possiamo creare un “Computer virtuale” e quindi non fisico e non tangibile, che permette di eseguire un determinato software, dato che avrà delle caratteristiche univoche condivisibili con tutti gli hardware fisici.

Se installiamo questo computer virtuale all’interno di un dispositivo fisico possiamo risolvere il problema costruendo un’unico software che fa interagire la macchina virtuale con quella fisica.

Questo è il concetto su cui si basa il linguaggio Java.

Partendo da questo, ho pensato che forse si poteva semplificare la scrittura del codice. Per chi mastica programmazione sa che Java è un linguaggio potentissimo che si adatta a qualsiasi hardware, ma che di contro ha dei formalismi molto difficili da imparare, capire e ricordare e quindi richiede tanto impegno e tempo per poter costruire qualcosa. L’idea di PL73 è quella di costruire un ulteriore “traduttore” in grado di tradurre un nuovo linguaggio (PL73, ndr) in Java e poi sarà compito di Java fare tutto il resto.

PL73_1 PL73_2 PL73_3

Questo nuovo linguaggio doveva avere formalismi semplici e facili da ricordare, mantenendo intatta la potenza di Java e il paradigma della programmazione ad oggetti.

La versione iniziale, pubblicata su GitHub all’indirizzo https://github.com/nickciava98/pl73 è solo un miglioramento del vecchio EPL, che nessuno conosce ma che è il precursore dell’attuale PL73, anch’esso pubblicato all’indirizzo https://github.com/nickciava98/epl.

Ci saranno degli sviluppi nei prossimi periodi e ho già in mente di costruire qualcosa che possa essere interessante, non dico altro.

Per il momento abbiamo questo e se qualcuno ha voglia di migliorare, modificare o semplificare il codice è libero di farlo, in fondo questo è il potere dell’open-source.

A presto!