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.[1][2]
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.
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.
Hi ha tres models d'execució per a llenguatges d'alt nivell moderns: