Red Hot Cyber

Sicurezza informatica, cybercrime, hack
news, e altro ancora

I linguaggi di programmazione. Una spiegazione semplice direttamente dal passato

Autore: Carlo Denza

Qual è la migliore definizione per la creatività degli informatici? Possiamo considerarli come  i moderni sciamani, creano universi, invocano routine, modellano ed eseguono con rituali arcaici linguaggi fortemente tipizzati e con esotiche espressioni.

Il 29 Ottobre 2022, all’età di 100 anni, ci lascia un autorevole figura della Storia dell’Informatica. Kathleen Britten nasce in Inghilterra il 9 luglio 1922. Studia alla University of London dove consegue la laurea in matematica con successivo dottorato di ricerca in matematica applicata.

Dopo aver studiato alcuni documenti di laboratorio redatti da  Burks, A.W., Goldstine, H.H. e John von Neumann nel 1946 alla Birkbeck University di Londra, in quello che oggi è chiamato Dipartimento di Scienza e Sistemi Informativi. 

Viene progettata una macchina di tipo von Neumann ARC(Automatic Relay Calculator) utilizzando dei relè molto veloci della Siemens disponibili in Europa. La Kathleen oltre a costruire l’hardware, scrisse tutto il software per le macchine ARC2 e SEC, inventando quello che in seguito sarebbe stata conosciuto come linguaggio di programmazione  assembly.

Termini e Linguaggi

Ma cosa intendiamo per linguaggio di programmazione?

Con linguaggio di programmazione si intende esprimere un processo con il quale, mediante un programma e un processore si ha la possibilità di eseguire un algoritmo o più semplicemente di risolvere un problema. Dove, con processore intendiamo la macchina che eseguirà il processo descritto dal programma. Con il termine  processore non bisogna intendere un processore in sé stesso, ma un architettura di elaborazione.

Un altra importante caratteristica dei linguaggi è quella di riconoscere, come linguaggi di programmazione, solo quelli computazionalmente completi. Per linguaggi computazionalmente completi intendiamo un linguaggio di programmazione equivalente in potere espressivo al linguaggio macchina di Turing e che non riescono ad esprimere anche programmi di cui non è decidibile la terminazione; Ad esempio SQL non è un linguaggio completo perché si può sempre dire quando termina il programma. Quindi per definizione si definisce completo un linguaggio in grado di simulare arbitrarie macchine di Turing.

Una schermata dal linguaggio di programmazione LISP

Linguaggi di programmazione

Nella seppur “recente” storia dell’informatica possiamo annoverare decine, centinaia, forse migliaia di linguaggi di programmazione. Sebbene molti di essi sono caduti in disuso o sono stati dimenticati, hanno comunque influenzato o avuto un peso nella nascita di quelli moderni.

Orientarsi in questo maremagnum di linguaggi, non è semplice, riconoscerne somiglianze e differenze è afferrarne il language design è ancora più complicato. Ma presentando alcuni di quelli che possiamo considerare i progenitori dei linguaggi di oggi, si può riconoscere e capire alcuni dei più importanti concetti che hanno introdotto.

Alcuni Linguaggi e caratteristiche

  • Fortran: Pensato per la manipolazione algebrica, ha introdotto tre le altre cose, le variabili, il concetto di tipo, subroutine, go to, iterazioni e statement condizionali;
  • Cobol: Ha una sintassi English Like abbastanza verbosa, infatti ci si era iniziati a porre il problema di come rendere i linguaggi più facili da usare;
  • Lisp: E’ stato il primo vero linguaggio di manipolazione simbolica. Paradigma funzionale, nella prima versione essenzialmente non tipata;
  • Prolog: Il prolog è stato molto innovativo ed è il principale liguaggio di programmazione a paradigma logico;
  • Pascal: programmazione strutturata, tipi di dato definiti da un utente, ricchezza di strutture dati. Ma ancora niente encapsulation; si dovrà aspettare Modula.
La parte introduttiva e declaratoria di un programma scritto in COBOL

Paradigmi computazionali

Possiamo intendere come paradigma computazionale, uno stile di programmazione. Uno stile sostanziale di programmazione che include tutti gli strumenti teorici forniti da un linguaggio per la stesura del codice sorgente di un programma.

Definisce così, il modo in cui il programmatore concepisce e identifica il programma. Esistono diversi paradigmi di programmazione. Il paradigma non è il solo e unico aspetto determinante in un linguaggio, ma è certo che la scelta di un determinato  paradigma computazionale influenza la maniera in cui si risolve un problema.