# Llenguatge interpretat

En informàtica, els llenguatges interpretats són aquells que necessiten un programa intèrpret per a ser executats. Les instruccions que descriuen els programes o utilitats desenvolupats amb aquests no són intruccions que entén directament la plataforma que el conté i, per tant, necessiten un programa que l'interpreti. En teoria, un llenguatge o és interpretat o és compilat. No obstant això, hi ha llenguatges que tenen compiladors i interprets. És el cas de Lisp, C, BASIC i Python. Les noves implementacions de Java o C# fan servir compilació en temps d'execució, per la qual cosa les màquines virtuals on s'executen són normalment interprets.
Generalment els interprets són més lents, però també més flexibles que els compiladors. Interpretar normalment evita el pas d'enllaçar i compilar, permeten provar el programa més ràpidament i, per tant, disminuir el cost de programació, això fa que tendeixin a ser afavorits pels entorns de desenvolupament ràpid d'aplicacions. També són ideals per sistemes sense disc com per exemple els primers ordinadors personals, ja que un compilador normalment necessita un disc dur on posar els mòduls dels objectes, i enllaçar-los a l'executable.

## Rerefons històric

Als inicis de la informàtica, el disseny d'un llenguatge estava molt influenciat per la decisió d'utilitzar-lo en mode d'execució interpretat o bé compilat. Per exemple, alguns llenguatges compilats requereixen que els programes especifiquin el tipus de la variable quan és declarada per primer cop. Per altra banda, alguns llenguatges aprofiten els avantatges del dinamisme de la interpretació per fer aquestes declaracions innecessàries. Per exemple, l'Smalltalk (que va ser dissenyat per ser interpretat en temps d'execució) permet Objectes genèrics que poden interaccionar dinàmicament entre ells.
Inicialment, els llenguatges interpretats eren compilats línia a línia; això vol dir que, cada línia era compilada quan era executada, i si el bucle o la subrutina causava que certes línies s'executessin diversos cops, aquestes eren recompilades cada cop. Això ha esdevingut poc habitual. La majoria dels llenguatges interpretats utilitzen un codi intermedi com a representació, el qual combina la compilació amb la interpretació. En aquest cas, un compilador ha de generar alguna forma de codi binari, el qual és després executat per l'intèrpret de codi binari. Alguns exemples d'això són el Python, el Java i el Perl. De manera semblant, el Ruby fa servir una sintexi d'abstracció en arbre com a representació intermèdia. La representació intermèdia pot ser compilada un cop i aprofitada per tots, com el Java; compilada cada cop abans d'executar-se, com el Perl o el Ruby; o cada cop que es detecta que ha canviat el codi abans d'executar-se com el Python.

## Avantatges dels llenguatges interpretats

Els llenguatges interpretats encara donen als programes certa flexibilitat extra en comparació amb els llenguatges compilats. Les característiques que són més fàcils d'implementar amb els interprets que amb els compiladors inclouen (però no es limiten):
* independència de la plataforma (com el codi binari de Java, per exemple)
* ús reflexiu de l'avaluador
* tipus dinàmic de variables
* facilitat de depuració (és més fàcil obtenir informació del codi font en els llenguatges interpretats)
* programes de mida petita (ja que els llenguatges interpretats tenen flexibilitat per escollir el codi d'instrucció)
* polimorfisme dels objectes object polymorphism
* abast dinàmic

## Vegeu també

* Llenguatges de programació