# Llenguatge de programació d'alt nivell

En computació, un llenguatge de programació d'alt nivell és un llenguatge de programació amb una alta abstracció dels detalls de maquinari de l'ordinador. En comparació a llenguatges de programació de baix nivell, pot utilitzar elements del llenguatge natural, més fàcils d'utilitzar, o ser més portàtil a través de diferents plataformes. Aquests llenguatges amaguen els detalls d'operacions de la Unitat Central de Procés, com els models d'accés de memòria.
L'encobriment del maquinari està pensat generalment per a fer fàcil d'usar el llenguatge, ja que inclou conceptes del llenguatge humà en comptes d'aquells de la màquina utilitzada. Un llenguatge d'alt nivell aïlla la semàntica d'execució d'una arquitectura informàtica fent més simple i més comprensible el procés de desenvolupar un programa respecte a un llenguatge de baix nivell. La quantitat d'abstracció proporcionada defineix com és un llenguatge de programació d'alt nivell.
El primer llenguatge de programació d'alt nivell dissenyat per a un ordinador fou Plankalkül, creat per Konrad Zuse.

## Característiques

El "llenguatge d'alt nivell" es refereix al nivell més alt d'abstracció del llenguatge màquina. En comptes de tractar amb registres, adreces de memòria i piles de crida, els llenguatges d'alt nivell tracten amb usabilitat, threads, locks, objectes, variables, vectors i aritmètica complexa o expressions booleanes. A més a més, no tenen opcodes que puguin compilar directament el llenguatge a codi màquina, a diferència dels llenguatges d'assemblador de nivell baix. Uns altres trets com rutines de maneig de cadenes de text, trets de llenguatges orientats a objectes i entrada/sortida de fitxers també poden ser-hi presents.
Penalització d'abstracció :
Habitualment, els llenguatges d'alt nivell fan més simple la programació complexa, mentre que els llenguatges de baix nivell tendeixen a produir un codi més eficaç. La penalització d'abstracció és la barrera que impedeix a les tècniques de programació de nivell alt ser aplicades en situacions on es limiten els recursos computacionals. Els trets de programació de nivell alt com més estructures de dades genèriques, interpretació en temps d'execució i arxius de codi intermedis sovint comporten unes velocitats d'execució més lentes, un consum de memòria més alt i una mida binària més gran. Per aquesta raó, el codi que necessita executar-se especialment de pressa es pot escriure en un llenguatge de nivell més baix, fins i tot si un llenguatge de nivell més alt faria més fàcil la codificació. L'abstracció més alta pot tenir tècniques més potents que proporcionen millors resultats globals que els seus homòlegs de nivell baix en casos particulars.
Significat relatiu :
Els termes alt nivell i baix nivell són inherentment relatius. Fa algunes dècades, el llenguatge C, i llenguatges semblants, era molt sovint considerat d'alt nivell, ja que incloïa conceptes com avaluació d'expressió, funcions recursives parametritzades, i tipus de dades i estructures, mentre que el llenguatge d'assemblador es considerava de baix nivell. Molts programadors avui es podrien referir a C com a baix nivell, perquè li falta un sistema de temps d'execució (no té garbage collection, etc.), bàsicament dona suport a operacions només escalars, i proporciona adreçament de memòria directe. A més es barreja amb llenguatge d'assemblador i el llenguatge màquina de CPUs i microcontroladors.

## Models d'execució

Hi ha tres models d'execució per a llenguatges d'alt nivell moderns:

### Interpretats

    Els llenguatges de programació interpretats són llegits i executats directament, sense etapa de compilació.

### Compilats

    Els llenguatges de programació compilats són transformats en un executable prèviament. Hi ha dos tipus de compilació:

   ### Representacions intermèdies

       Quan un llenguatge es compila a una representació intermèdia, aquesta representació pot ser optimitzada o desats per a una execució posterior sense la necessitat de rellegir l'arxiu font. Quan la representació intermèdia es guarda en forma de bytecode.

   ### Generació de codi màquina

       Alguns compiladors generen directament codi màquina. Les màquines virtuals que executen bytecode directament o el transformen en codi màquina han confós la distinció, abans ben definida, entre representacions intermèdies i llenguatges purament compilats.

### Traduïts

    Un llenguatge pot ser traduït a un llenguatge de programació de baix nivell per al qual ja hi ha compiladors nadius. Elllenguatge C és un objectiu habitual d'aquests traductors.

## Exemples de llenguatges d'alt nivell

* C
* C++
* C#
* Basic
* Visual Basic (VB)
* Ada
* ALGOL
* Clipper
* COBOL
* Delphi
* Fortran
* FoxPro o Visual Foxpro
* Java
* ANGMAR
* Perl
* Pascal
* Logo
* PHP (PHP Hypertext Preprocessor)
* PL/SQL
* Python
* RPG
* MATLAB
* SISTEMA BERNAL ITM
* Modula-2
* Llenguatges funcionals
** Haskell
** Lisp

## Vegeu també

* Llenguatge de programació de baix nivell: és aquell llenguatge de programació que proporciona poca o cap abstracció del microprocessador d'un ordinador.
* Llenguatge de programació dinàmic: és un tipus de llenguatge de programació d'alt nivell que, en temps d'execució, té comportaments que els llenguatges de programació estàtics presenten en temps de compilació.

## Referències

* ↑ «What is High-level language?» (en anglès). www.computerhope.com.
* ↑ «High level Languages» (en anglès). www.macs.hw.ac.uk. Arxivat de l'original el 2017-05-02. [Consulta: 14 maig 2017].
* ↑ «Hthreads - la ctra. Glossary». Arxivat de l'original el 2007-08-26. [Consulta: 12 gener 2010].
* ↑ Surana P «Meta-Compilation of Language Abstractions.» (PDF). lispnyc.org, 2006. Arxivat de l'original el 2015-02-17 [Consulta: 17 març 2008]. Arxivat 2015-02-17 a Wayback Machine.
* ↑ «The Data Abstraction Penalty (DAP) Benchmark for Small Objects in Java.». Arxivat de l'original el 2009-01-11. [Consulta: 17 març 2008].
* ↑ Chatzigeorgiou; Stephanides. Proceedings - 7th International Conference on Reliable Software Technologies - Ada-Europe'2002. Springer, 2002, p. 367. «Evaluating Performance and Power Of Object-Oriented Vs. Procedural Programming Languages»
* ↑ . Manuel Carro, José F. Morales, Henk L. Muller, G. Puebla, M. Hermenegildo «High-level languages for small devices: a case study» ( PDF). Proceedings of the 2006 international conference on Compilers, architecture and synthesis for embedded systems. ACM, 2006.

## Enllaços externs

* http://c2.com/cgi/wiki?HighLevelLanguage - L'article de Wikiwikiweb sobre llenguatges de programació d'alt nivell