Web - Amazon

We provide Linux to the World


We support WINRAR [What is this] - [Download .exe file(s) for Windows]

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
SITEMAP
Audiobooks by Valerio Di Stefano: Single Download - Complete Download [TAR] [WIM] [ZIP] [RAR] - Alphabetical Download  [TAR] [WIM] [ZIP] [RAR] - Download Instructions

Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy Cookie Policy Terms and Conditions
Linguaggio di programmazione ad alto livello - Wikipedia

Linguaggio di programmazione ad alto livello

Da Wikipedia, l'enciclopedia libera.

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:

  • efficacia espressiva, ovvero sintesi, capacità di affrontare i problemi nel dominio del problema e non in quello della macchina
  • portabilità, intesa del programma e non del linguaggio
  • un linguaggio di alto livello allo stato attuale della conoscenza può diventare un linguaggio di basso livello ad uno stadio successivo di ricerca, consapevolezza e conoscenza: un tempo il linguaggio macchina era considerato basso livello ed il C o il Fortran linguaggi di alto livello. Poi il C è diventato un linguaggio di basso livello e l'alto livello è diventato Eifell, C++, Java. Altri linguaggi come il Lisp sono nati e rimasti di alto livello (almeno fino ad ora).


Paul Graham nel suo libro Hackers & Painters elenca nove idee, che determinano il livello di astrazione di un linguaggio:

  • 1 operatori condizionali, tipo if-then-else; il FORTRAN "inizialmente" ne era privo.
  • 2 tipi funzione, che siano esattamente come numeri e stringhe memorizzabili e che sia possibile passarli come parametri ad altre funzioni
  • 6 il programma è un dato e come tale può essere elaborato dal programma
  • 7 ogni simbolo è un puntatore al suo valore. Due stringhe (dunque simboli) si confrontano per puntatore e non carattere per carattere
  • 8 esiste la notazione per il codice usando alberi e simboli e costanti
  • 9 l'intero linguaggio è sempre disponibile. Non c'è distinzione tra le fasi di lettura, compilazione ed esecuzione. Puoi compilare o eseguire codice mentre leggi, leggere o eseguire mentre compili, leggere o compilare mentre esegui.

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:

  • la progettazione di processori fu completamente liberata da qualsiasi requisito relativo alla leggibilità dei linguaggi macchina, in quanto si poteva ragionevolmente assumere che nessuno (o quasi) avrebbe più scritto o letto direttamente codice in linguaggio macchina o assembly; l'efficienza divenne di fatto l'unica preoccupazione reale dei progettisti hardware;
  • 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 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 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:

  • i linguaggi di alto livello forniscono tempi di sviluppo molto contenuti
  • lo sviluppo avviene nel dominio del problema quindi è meno soggetto a difetti di traduzione da quel dominio e di incomprensione
  • gli errori logici si individuano facilmente, essendo espressi nella logica del dominio del problema
  • si evitano per lo più gli errori macchina che sono intercettati e segnalati opportunamente dal linguaggio di alto livello
  • i tempi di esecuzione si migliorano con l'efficienza degli algoritmi non eseguendo velocemente algoritmi inefficienti
  • i profiler forniscono informazioni dettagliate su quali siano i colli di bottiglia, si valuterà se è necessario tradurne o riscriverne quelle parti in linguaggi di programmazione che ne consentano una esecuzione più rapida, avendo già ottenuto e verificato specifiche chiare e certe.


[modifica] Voci correlate

Our "Network":

Project Gutenberg
https://gutenberg.classicistranieri.com

Encyclopaedia Britannica 1911
https://encyclopaediabritannica.classicistranieri.com

Librivox Audiobooks
https://librivox.classicistranieri.com

Linux Distributions
https://old.classicistranieri.com

Magnatune (MP3 Music)
https://magnatune.classicistranieri.com

Static Wikipedia (June 2008)
https://wikipedia.classicistranieri.com

Static Wikipedia (March 2008)
https://wikipedia2007.classicistranieri.com/mar2008/

Static Wikipedia (2007)
https://wikipedia2007.classicistranieri.com

Static Wikipedia (2006)
https://wikipedia2006.classicistranieri.com

Liber Liber
https://liberliber.classicistranieri.com

ZIM Files for Kiwix
https://zim.classicistranieri.com


Other Websites:

Bach - Goldberg Variations
https://www.goldbergvariations.org

Lazarillo de Tormes
https://www.lazarillodetormes.org

Madame Bovary
https://www.madamebovary.org

Il Fu Mattia Pascal
https://www.mattiapascal.it

The Voice in the Desert
https://www.thevoiceinthedesert.org

Confessione d'un amore fascista
https://www.amorefascista.it

Malinverno
https://www.malinverno.org

Debito formativo
https://www.debitoformativo.it

Adina Spire
https://www.adinaspire.com