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.[3]
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.[4][5][6] 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.[7]
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:
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.
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ó.
↑.
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.