Llenguatge de programació d'alt nivell

De Viquipèdia
Dreceres ràpides: navegació, cerca

En computació, un llenguatge de programació d'alt nivell és un llenguatge de programació amb una alta abstracció dels detalls de l'ordinador. En comparació a llenguatges de programació de baix nivell, pot utilitzar elements del llenguatge natural, ser més fàcil d'utilitzar, o ser més portàtil a través de diferents plataformes. Tals llengües amaguen els detalls d'operacions de la unitat Central de Procés com el models d'accés de memòria.

Aquesta abstracció més gran i encobriment de detalls està pensat generalment per fer fàcil d'usar la llengua, ja que inclou conceptes del camp de problema 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 de l'especificació del programa, 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.[1]

La primera llengua de programació d'alt nivell dissenyada per a un ordinador era Plankalkül, creat per Konrad Zuse. Tanmateix, no es va implementar en el seu temps i les seves contribucions originals van ser aïllades d'altres desenvolupaments.

Característiques[modifica | modifica el codi]

El terme "llenguatge d'alt nivell" no implica que la llengua sigui superior a llenguatges de programció de baix nivell, de fet, en termes de la profunditat de coneixement de com funcionen els ordinadors exigit per a programar productivament en una llengua donada, l'invers pot ser veritat. Més aviat, "llenguatge d'alt nivell" es refereix al nivell més alt d'abstracció del llenguatge màquina. Més aviat que tractant 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 opcodesque 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ó[modifica | modifica el codi]

Habitualment, els llenguatges d'alt nivell fan més simple la programació complexa, mentre que els llenguatges de baix nivell tendeixen a produir 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.[2][3][4] Per aquesta raó, el codi que necessita executar-se especialment de pressa i eficaçment 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.[5]

Significat relatiu[modifica | modifica el codi]

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 dóna 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ó[modifica | modifica el codi]

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[modifica | modifica el codi]

Enllaços externs[modifica | modifica el codi]

Referències[modifica | modifica el codi]

  1. Hthreads - la ctra. Glossary
  2. Surana P. «Meta-Compilation of Language Abstractions.» (PDF). Falta indicar la publicació, 2006 [Consulta: 17 març 2008].
  3. «The Data Abstraction Penalty (DAP) Benchmark for Small Objects in Java.». [Consulta: 2008-03-17].
  4. Chatzigeorgiou & Stephanides (2002), "Evaluating Performance and Power Of Object-Oriented Vs. Procedural Programming Languages", in Blieberger & Strohmeier, Proceedings - 7th International Conference on Reliable Software Technologies - Ada-Europe'2002, Springer, pàg. 367, <http://books.google.cat/books?id=QMalP1P2kAMC&dq=%22abstraction+penalty%22&lr=&source=gbs_summary_s&cad=0>
  5. . Manuel Carro, José F. Morales, Henk L. Muller, G. Puebla, M. Hermenegildo (2006), "High-level languages for small devices: a case study", Proceedings of the 2006 international conference on Compilers, architecture and synthesis for embedded systems, ACM, <http://www.clip.dia.fi.upm.es/papers/carro06:stream_interpreter_cases.pdf>