Lessico, sintassi, semantica… Non è una lezione di italiano, ma come per tutti i linguaggi anche per i linguaggi di programmazione, esistono regole ferree. Quando si scrive codice per far funzionare le applicazioni bisogna essere sicuri che tutto funzioni. Non ci sono eccezioni, per alcuni linguaggi ci potranno essere variabili e dialetti, ma una volta scelta la propria ‘parrocchia’ bisogna rigare diritto.
La storia dell’informatica di linguaggi di programmazione ne ha visti tantissimi, qualcuno più fortunato di altri, e anche in questo campo non mancano affatto le sorprese. Per esempio, il primo “linguaggio meccanico” utilizzato per programmare la macchina di C. Babbage è da attribuire a una donna, Ada Lovelace, ed è quasi certo che il primo linguaggio per elaboratori fosse l’assembly che come limite e caratteristica – nel bene e nel male – presentava la possibilità di controllare il flusso delle operazioni esclusivamente tramite il salto di un istruzione per una determinata condizione, così da generare però programmi molto complessi.
Sbaglia, e di grosso, chi pensa che si parli di linguaggi di programmazione solo da qualche decennio. Se è vero che i primi computer sono entrati nelle case italiane, possiamo dire, agli inizi degli anni ’80, i linguaggi di programmazione esistono dagli anni ’50. Fortran (1957), Algol (1960), Basic (1964), Pascal (1970), sono solo alcune delle tappe di un’evoluzione che si può definire tale solo in relazione alla prospettiva in cui ci si colloca.
Sì perché un linguaggio di programmazione può andare bene per compiere un determinato task e sopravvivere per decenni con i suoi limiti, ma adattarsi male in altri ambiti dove non viene mai usato, e allo stesso modo si possono generare linguaggi per ogni specifico obiettivo, anche per esempio semplicemente didattico, che all’atto pratico non avranno mai fortuna.
Tutto dipende da quello che si vuole fare, spesso e quasi sempre da un fine-tuning tra la complessità e le potenzialità intrinseche. Non è il linguaggio di programmazione a dare direttamente codice da eseguire alle macchine, in mezzo c’è il passaggio con il compilatore che letteralmente traduce istruzioni dal codice sorgente in codice oggetto, l’unico che fa effettivamente lavorare i computer. E non sempre il compilatore lavora come un elemento neutrale, ma a seconda della ‘compliance’ con i linguaggi di programmazione, può aggiungere specifiche proprie, da qui si generano proprio i ‘dialetti’ cui abbiamo accennato. E ci potremmo fermare qui.