# Programazio-lengoaien teoria

Programazio-lengoaien teoria informatikaren adar bat da, programazio-lengoaien eta beren ezaugarrien diseinuaz, inplementazioaz, analisiaz, karakterizazioaz eta sailkapenaz arduratzen dena. Diziplina anitzeko eremu bat da, matematika, softwarearen ingeniaritza, hizkuntzalaritza eta zientzia kognitiboen jakintza-arloekin zerikusia (eta, zenbaitetan, bai eragina ere) duena. Informatikaren adar ezagun eta aintzatetsia da, eta, 2006ko dataz, ikerketagai garrantzitsu bat, emaitzak PLTari buruzko aldizkari berezitu nahiz informatika eta ingeniaritzako argitalpenetan, oro har, plazaratzen dituena. Unibertsitate mailako informatikako ikasketa-programa guztietan eskatzen da, gaur egun, arlo hau jorratzea.
Programazio-lengoaien teoriaren ikur bat, ofiziala ez bada ere, lambda letra greko minuskula da. Erabilera hau lambda kalkulutik dator, programazio-lengoaien ikertzaileek erruz erabiltzen duten eredu konputazionaletik, alegia. Programazioaren eta programazio-lengoaien gaineko testu eta artikulu askok erabiltzen dute lambda, modu batera edo bestera. Estructura e Interpretación de Programas de Ordenador testu-liburu klasikoaren azala ilustratzen du, eta Scheme programazio-lengoaiaren sortzaile diren Gerald Jay Sussman eta Guy Steele-k idatzitako lambda artikulu delako askoren tituluetan ageri da. Programazio-lengoaien teoriari buruzko gune ezagun batek Lambda the Ultimate (funtsezko lambda) du izena, Sussman eta Steeleren ohorez.

## Historia

Programazio-lengoaien teoria programazio-lengoaien beren garapenaren aurretik dator, nolabait. Lambda kalkulua, Alonzo Church, Max HL. Solis Villareal eta Stephen Cole Kleene-k 1930eko hamarkadan garatua, munduko lehen programazio-lengoaietakotzat hartzen da, nahiz eta bere helburua, programatzaileek sistema informatiko batentzako algoritmoak deskribatzeko bitarteko bat izatea baino gehiago, konputazioa modelatzea izan. Programazio-lengoaia funtzional askoren ezaugarria lambda kalkuluari itxura fin bat ematea izan da, eta lengoaia asko kalkulu horren bidez deskribatzen dira.
Proposatu zen lehen berezko programazio-lengoaia Plankalkül izan zen, Konrad Zuse-k 40etan diseinatu zuena, baina ez zen plazaratu 1972a arte (eta ez zen inplementatu 2000a arte, Zuse hil eta bost urte geroago). Arrakasta eta sona handiz ezagutu zen estreinako programazio-lengoaia FORTRAN izan zen, 1954 eta 1957 bitartean IBMko ikertzaile liberatuz osatutako talde batek garatua, John Backus-en zuzendaritzapean. FORTRANen arrakastak zientzialari-batzorde baten sorrera ekarri zuen, programazio-lengoaia "unibertsal" bat garatzea helburu; ahalegin horren emaitza ALGOL 58 izan zen. Beste alde batetik, MITeko John McCarthy-k LISP programazio-lengoaia garatu zuen (Lambda kalkuluan oinarrituz), mundu akademikoan garatutako lehen lengoaia arrakastatsua. Hasierako ahalegin horien arrakasta zela-eta, programazio-lengoaien gaia 1960ko hamarkadan, eta bai handik aurrera ere, ikergai nagusietako bat bihurtu zen.
Hona hemen programazio-lengoaien teoriaren historian harrezkero giltzarri izan diren beste gertaera batzuk:
* 1950eko hamarkadan, Noam Chomsky-k Chomsky-ren hierarkia garatu zuen, hizkuntzalaritzaren arloan; aurkikuntza horrek zuzeneko eragina izan zuen programazio-lengoaien teorian eta informatikaren beste adar batzuetan.
* 1960ko hamarkadan, berriz, Simula lengoaia garatu zuten Ole-Johan Dahl eta Kristen Nygaard-ek, askok objektuei orientatutako lehen lengoaiatzat hartzen dutena; Simulak korrutinaren kontzeptua ere ekarri zuen.
* 1970an:
** Xerox PARC-eko zientzialari talde txiki batek, Alan Kay-ren zuzendaritzapean, Smalltalk sortu zuen, objektuei orientatutako lengoaia bat, zuen garapen-inguruneari esker entzute handia lortu zuena, ez baitzen ordura arte halakorik ezagutzen.
** Sussman eta Steelek Scheme programazio-lengoaia garatu zuten, Lisp-en dialekto bat, esparru lexikoak, izen-espazio bateratu bat eta Aktore ereduko elementuak bere dituena, lehen mailako jarraipenak ere barne hartuz.
** Backusek, 1977ko Turing Sariko bere hitzaldian, industrian erabiltzen ari ziren lengoaien kritika gogorra egin eta programazio-lengoaien klase berri bat proposatu zuen, gaur egun programazio-lengoaia funtzional esaten diegunak, alegia.
** Process calculus delakoa, Robin Milner-en sistema komunikatuen kalkulua eta C. A. R. Hoare-ren prozesuen komunikatze sekuentziala agertu ziren; hala nola, Carl Hewitt-en Aktore eredua bezalako konkurrentzia-eredu antzekoak
** Moten teoria programazio-lengoaiei diziplina gisa aplikatu zitzaien, Milner buru zela; aplikatze horrek aurrerakuntza handia ekarri dio moten teoriari, urte gutxi batzuetan.
* 1990eko hamarkadan:
** Philip Wadler-ek monaden erabilera ekarri zuen, programazio-lengoaia funtzionaletan idatzitako programak egituratzeko.

## Azpiarloak eta eremu erlazionatuak

Hainbat azterketa-alor daude, programazio-lengoaien teoriaren beraren barrukoak edo, barrukoak izan gabe, berorrengan eragin handia dutenak; askotan nabariki gainjartzen dira.
* Konpiladoreen teoria da konpiladoreen (edo, eskuarki, itzultzaileen) sorkuntzaren azpian dagoen oinarri formala; konpiladoreak: lengoaia batean idatzitako programa beste forma batera itzultzen duten programak. Konpiladore baten ekintzak honela sailkatzen dira tradizionalki: analisi sintaktikoa (eskaneatzea eta parseatzea), analisi semantikoa (programak egin behar duena zehaztea), optimizazioa (errendimendua neurri batean hobetzea, exekuzio-abiaduraren aldetik tipikoki) eta kodearen sorkuntza (programa baliokide baten sortzea, nahi den lengoaian: CPU baten agindu multzoari dagokionean, eskuarki).
* Moten teoria mota-sistemen azterketaz arduratzen da; mota-sistemak "programa-portaera batzuen absentzia frogatzen duten metodo sintaktiko tratagarriak dira, sententziak konputatzen dituzten balio moten arabera sailkatzen dituztenak." (Types and Programming Languages, MIT Press, 2002). Programazio-lengoaia asko beren mota-sistemen ezaugarriek bereizten dituzte.
* Semantika formala ordenagailu-programa eta programazio-lengoaien portaeraren zehaztapen formala da.
* Programen transformazioa programa bat forma (lengoaia) batetik beste batera eraldatzeko prozesua da; programen analisia programa bat bere ezaugarri nagusien arabera aztertzean datza (programa-errore klase zenbaiten falta, esaterako).
* Exekuzio-garaiko sistemez hitz egiten denean, programazio-lengoaien eta berorien osagaientzako runtime inguruneen garapenaz hitz egiten da, hau da, makina birtualak, zaborraren bilketa eta kanpo-funtzioentzako interfazeak.
* Programazio-lengoaien analisi konparatiboak, berriz, programazio-lengoaiak mota desberdinetan sailkatzen ditu, beren ezaugarrietan oinarrituz; programazio-lengoaia kategoria zabalei konputazio-paradigma esaten zaie maiz.
* Metaprogramazioa ordena handiagoko programen sorkuntza da; programa horiek, exekutatzen direnean, programak sortzen dituzte (beste lengoaia batean edo jatorrizko lengoaiaren azpimultzo batean, beharbada) emaitzatzat.
* Lengoaia dedikatuak problemak domeinu jakin batean bereziki eta modu eraginkor batean ebazteko sortuak izan diren lengoaiak dira.
Gainera, PLTa baliatzen da matematiken, software-ingeniaritzaren eta hizkuntzalaritzaren beste adar batzuetaz, bai eta zientzia kognitiboarenez ere.

## PLTari buruzko aldizkari eta argitalpen berezituak

Hona hemen programazio-lengoaien teoriaren gaineko ikerketaren berri ematen duten aldizkari zenbait:
* ACM Transactions on Programming Languages and Systems
* Computer Languages, Systems, and Structures
* Journal of Functional Programming, The
* Journal of Functional and Logic Programming, The
* Journal of Symbolic Computation, The
* Theoretical Computer Science
Bibliografia osoago bat -n aurki daiteke; ikus, halaber, informatikari buruzko argitalpenen zerrenda.

## Ikus, orobat

* Eranskina: Programazio-lengoaien kronologia
* Lambda the Ultimate

## Kanpo estekak

* The History of Haskell
* Computer Languages History
* Frank Atanassow's PLT Online
* Programming Language Research
* Types and Programming Languages by Benjamin Pierce (MIT Press 2002)
* Programming Language Pragmatics, 2nd Edition by Michael Scott (Morgan-Kaufmann, 2006)
* Essentials of Programming Languages by Daniel P. Friedman, Mitchell Wand, and Christopher T. Haynes (MIT Press 2001)

## Kanpo estekak

* Datuak: Q2670534
* Multimedia: Programming language theory / Q2670534