Linguaggio di programmazione ad alto livello: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m Annullate le modifiche di 87.26.117.18 (discussione), riportata alla versione precedente di DaimonBot
m portale
 
(22 versioni intermedie di 19 utenti non mostrate)
Riga 1:
{{F|linguaggi di programmazione|ottobre 2012}}
[[File:CPT-TheoryOfComp-Binary-Search-Python.png|miniatura|Esempio di [[Programma (informatica)|programma]] in [[Python]]]]
In [[informatica]], un '''linguaggio di programmazione ad alto livello''' è un [[linguaggio di programmazione]] caratterizzato da una significativa [[Astrazione (informatica)|astrazione]] dai dettagli del funzionamento di un [[computer|calcolatore]] e dalle caratteristiche del [[linguaggio macchina]]. I linguaggi di programmazione ad alto livello sono progettati per essere facilmente comprensibili dagli esseri umani, fino a includere alcuni elementi del [[linguaggio naturale]]. Per essere eseguiti da un calcolatore, i programmi scritti in linguaggio ad alto livello devono essere ''tradotti'' o ''interpretati'' da un altro programma.
Un '''linguaggio di programmazione ad alto livello''', in [[informatica]], è un [[linguaggio di programmazione]] caratterizzato da una significativa [[Astrazione (informatica)|astrazione]] dai dettagli del funzionamento di un [[computer|calcolatore]] e dalle caratteristiche del [[linguaggio macchina]]. Il livello di astrazione definisce quanto sia di "alto livello" un linguaggio di programmazione.<ref>{{Cita web|url=http://www.ittc.ku.edu/hybridthreads/glossary/index.php|titolo=HThreads - RD Glossary|sito=web.archive.org|data=2007-08-26|accesso=2022-04-06|dataarchivio=26 agosto 2007|urlarchivio=https://web.archive.org/web/20070826224349/http://www.ittc.ku.edu/hybridthreads/glossary/index.php|urlmorto=sì}}</ref>
 
== Storia ==
L'idea di un linguaggio automaticamente "traducibile" in linguaggio macchina, ma più vicino alla logica umana fu introdotta in informatica negli [[anniUSA 1950|annia cinquanta]]partire dal 1950, soprattutto grazie al lavoro di [[John Backus]] ([[IBM]]), a cui si deve il primo linguaggio ad alto livello ad avere avuto ampia diffusione, il [[Fortran]]. Per questa innovazione Backus ha ricevuto il [[premio Turing]].
 
== Descrizione ==
== Problemi del linguaggio macchina ==
In [[informatica]], un '''linguaggio di programmazione ad alto livello''' è un [[linguaggio di programmazione]] caratterizzato da una significativa [[Astrazione (informatica)|astrazione]] dai dettagli del funzionamento di un [[computer|calcolatore]] e dalle caratteristiche del [[linguaggio macchina]]. I linguaggi di programmazione ad alto livello sonoSono progettati per essere facilmente comprensibili dagli esseri umani, fino a includere alcuni elementi del [[linguaggio naturale]]. Per essere eseguiti da un calcolatore, i programmi scritti in linguaggio ad alto livello devono essere ''tradotti'' o ''interpretati'' da un altro programma.
I [[Linguaggio macchina|linguaggi macchina]] sono formati da istruzioni elementari, che vengono codificate in forma numerica e che consentono di effettuare operazioni aritmetiche, conversioni di bit e poco altro. Scrivere programmi in tale linguaggio è quindi estremamente sconveniente: un'operazione basilare può richiedere anche tre o quattro istruzioni; si rende così necessario molto codice anche per i programmi più semplici. Il fatto che tale codice sia solamente numerico comporta inoltre grosse possibilità di errori e difficoltà nell'individuarne. È necessario inoltre avere continuamente a che fare con le caratteristiche fisiche della macchina in cui si programma: bisogna ad esempio specificare manualmente gli [[indirizzi di memoria]] in cui salvare le informazioni e i registri del processore in cui mantenere i dati temporanei.
 
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 (informatica)|variabile]] e [[assegnamento]] sono una versione [[astrazione (informatica)|astratta]] dello spostamento di dati fra [[cella di memoria|celle di memoria]]; e il fatto che il paradigma di programmazione dominante sia quello [[programmazione imperativa|imperativo]] si può facilmente giustificare con la considerazione che anche i linguaggi macchina ''sono'' imperativi.
 
=== Problemi del linguaggio macchina ===
I [[Linguaggio macchina|linguaggi macchina]] sono formati da istruzioni elementari, che vengono codificate in forma numerica e che consentono di effettuare operazioni aritmetiche, conversioni di bit e poco altro. Scrivere programmi in tale linguaggio è quindi estremamente sconveniente: un'operazione basilare può richiedere anche tre o quattro istruzioni; si rende così necessario molto codice anche per i programmi più semplici. Il fatto che tale codice sia solamente numerico comporta inoltre grosse possibilità di errori e difficoltà nell'individuarne. È necessario inoltre avere continuamente a che fare con le caratteristiche fisiche della macchina in cui si programma: bisogna ad esempio specificare manualmente gli [[indirizzi di memoria]] in cui salvare le informazioni e i [[Registro (informatica)|registri del processore]] in cui mantenere i dati temporanei.
 
Infine, ogni computer può comprendere solo il proprio [[linguaggio macchina]], poiché esso è diverso da processore a processore. Esiste quindi anche lo svantaggio di dover riscrivere interamente un programma per farlo funzionare su un'altra piattaforma.
 
=== Impatto dei linguaggi ad alto livello ===
L'idea dei linguaggi ad alto livello è già sottesa ai linguaggi [[assembly]], che tuttavia non sono altro che "traslitterazioni" dei corrispondenti linguaggi macchina, che per esempio fanno corrispondere un codice mnemonico (quindi più leggibile) a ogni codice di istruzione binario. Nei linguaggi di programmazione ad alto livello veri e propri, invece, una singola istruzione consente di effettuare un'operazione semplice, ma completa. Le istruzioni non sono in forma numerica, sono bensì parole (generalmente in lingua inglese), il cui significato corrisponde all'operazione che effettuano. A differenza dei linguaggi [[assembly]], quindi, il processo di traduzione può avere una complessità arbitraria, per cui il linguaggio ad alto livello può essere anche ''completamente diverso'' (per [[sintassi (informatica)|sintassi]] e [[semantica (informatica)|semantica]]) dal sottostante linguaggio macchina.
 
Riga 17 ⟶ 24:
* i linguaggi di programmazione ad alto livello ebbero un'evoluzione completamente indipendente da quella dell'hardware; lo scopo generale di tale evoluzione fu quello di rendere tali linguaggi sempre più "facili" da utilizzare per il [[programmatore]] umano;
* si introdusse il concetto che i linguaggi di programmazione e i programmi potessero essere [[portabilità|portabili]], ovvero eseguibili su diversi computer (a patto di disporre di compilatori o interpreti per tali computer).
 
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 (informatica)|variabile]] e [[assegnamento]] sono una versione [[astrazione (informatica)|astratta]] dello spostamento di dati fra [[cella di memoria|celle di memoria]]; e il fatto che il paradigma di programmazione dominante sia quello [[programmazione imperativa|imperativo]] si può facilmente giustificare con la considerazione che anche i linguaggi macchina ''sono'' imperativi.
 
==Modelli di esecuzione==
Un linguaggio ad alto livello, per definizione, non è ''direttamente'' "eseguibile" da parte del calcolatore. L'esecuzione dei linguaggi ad alto livello si può basare su due principali modelli, [[compilazione]] e [[Interpretazione (informatica)|interpretazione]], che ammettono alcune varianti e possono essere combinati fra loro.
 
===Compilazione===
Riga 27 ⟶ 32:
 
===Interpretazione===
In questo modello viene usato un programma detto [[Interprete (informatica)|interprete]], la cui funzione è quella di interpretare le istruzioni del programma sorgente ed eseguirle. A differenza del compilatore, l'interprete non produce mai un eseguibile. Di conseguenza, interprete e sorgente sono sempre necessari a ogni esecuzione del programma. Questo approccio consente una maggiore portabilità (lo stesso programma può essere eseguito su diversi calcolatori e diversi sistemi operativi, a patto che sia disponibile un interprete) ma ha generalmente prestazioni inferiori (poiché il costo dell'analisi e dell'interpretazione del [[codice sorgente]] viene pagato durante l'esecuzione).
 
===Transcompilazione===
In questo modello viene usato un programma detto [[transcompilatore]], la cui funzione è quella di tradurre un programma sorgente scritto in un linguaggio ad alto livello in un programma scritto in un altro linguaggio ad alto livello (ovvero, di livello paragonabile).<ref>[{{Cita web |url=http://www.compilers.net/paedia/compiler/index.htm |titolo=Types of compilers] |accesso=29 ottobre 2014 |dataarchivio=19 luglio 2019 |urlarchivio=https://web.archive.org/web/20190719090932/http://www.compilers.net/paedia/compiler/index.htm |urlmorto=sì }}</ref> L'esecuzione avviene poi secondo il modello previsto per il linguaggio "di arrivo" del processo di transcompilazione.
 
===Approcci ibridi===
Riga 65 ⟶ 70:
* [[Paradigma di programmazione]]
 
== Collegamenti esterni ==
{{Controllo di autorità}}
* {{FOLDOC|high-level language|high-level language}}
* {{Collegamenti esterni}}
 
{{Controllo di autorità}}
{{Portale|informatica}}
[[Categoria:Paradigmi di programmazione]]
[[Categoria:Linguaggi di programmazione]]