In informatica, un linguaggio di programmazione ad alto livello si distingue dai linguaggi di basso livello in funzione della capacità di astrazione che fornisce.
I Linguaggi di alto livello si distinguono dagli altri per:
Paul Graham nel suo libro Hackers & Painters elenca nove idee, che determinano il livello di astrazione di un linguaggio:
Quando sono disponibili contemporaneamente le funzionalità descritte con le idee 8 e 9, puoi scrivere programmi che scrivono programmi.
I programmi scritti in un linguaggio ad alto livello possono essere eseguiti tramite un compilatore, un interprete, o una combinazione di questi strumenti, in pochi casi da processori dedicati (vedi i processori Forth). L'idea di fondo è che i programmi ad alto livello possono essere ricondotti a programmi in linguaggio macchina in modo automatico, ovvero da un altro programma.
Un'idea del genere è già sottesa dai linguaggi assembly, che tuttavia non sono altro che "translitterazioni" dei corrispondenti linguaggi macchina, che per esempio fanno corrispondere un codice mnemonico (quindi più leggibile) a ogni codice di istruzione binario. Nel caso dei linguaggi di programmazione ad alto livello, però, il processo di traduzione può avere una complessità arbitraria, per cui il linguaggio ad alto livello può essere anche completamente diverso (per sintassi e semantica) dal sottostante linguaggio macchina.
Quest'idea rivoluzionaria fu introdotta in informatica negli anni '50, soprattutto grazie al lavoro di John Backus presso la IBM, dove fu sviluppato il primo compilatore per il linguaggio FORTRAN (in seguito, Backus ricevette per questo motivo il premio Turing). Poche altre innovazioni in informatica hanno avuto conseguenze di portata paragonabile. In sostanza, la programmazione ad alto livello ebbe l'effetto di svincolare completamente (o quasi) le caratteristiche dei linguaggi di programmazione da quelle dell'hardware destinati a eseguirli. Fra le conseguenze principali si possono elencare le seguenti:
In generale, la maggior parte dei linguaggi di programmazione ad alto livello moderni conserva alcuni concetti di fondo che è possibile ricondurre ad alcune caratteristiche tipiche del linguaggio macchina. Concetti come quelli di variabile e assegnamento sono una versione astratta dello spostamento di dati fra celle di memoria; e il fatto che il paradigma di programmazione dominante sia quello imperativo si può facilmente giustificare con la considerazione che anche i linguaggi macchina sono imperativi.
C'è chi dice che, in termini almeno generali, quanto più complessa è la traduzione da un dato linguaggio al linguaggio macchina, tanto più inefficiente tende a essere il linguaggio (in quanto il programmatore perde ogni percezione, anche indiretta, di ciò che accadrà realmente, a livello hardware, quando il programma verrà eseguito; e di conseguenza perde anche ogni possibilità di "ottimizzare" tale esecuzione).
In contrasto con questa opinione si sostiene che:
Höhere Programmiersprache | High-level programming language | Lenguaje de alto nivel | Langage de haut niveau | Linguaxe de alto nivel | שפה עילית | 高級言語 | 고급 프로그래밍 언어 | Høynivåspråk | Język wysokiego poziomu | Linguagem de alto nível | Высокоуровневый язык программирования
This article is licensed under the GNU Free Documentation License.
It uses material from the
"Linguaggio di programmazione ad alto livello".
Home Page • arts • business • computers • games • health • hospitals • home • kids & teens • news • physicians • recreation• reference • regional • science • shopping • society • sports • world