Lisp
Tipus | llenguatge de programació multiparadigma, llenguatge de programació funcional, llenguatge de programació procedural, reflective programming language (en) , metaprogramming language (en) i llenguatge interpretat |
---|---|
Data de creació | 1958 |
Disseny | John McCarthy |
Desenvolupador | John McCarthy i Steve Russell |
Paradigma de programació | programació funcional, programació procedimental, metaprogramming (en) , programació multiparadigma i reflexió |
Influenciat per | Information Processing Language |
Etiqueta d'Stack Exchange | Etiqueta |
Lisp (o LISP) és un dels grans pioners dels llenguatges de programació,[1] creador del paradigma funcional. Originalment especificat l'any 1958 per John McCarthy,[2] Essent un dels primers llenguatges, Lisp també va introduir nous conceptes al món de la programació.[3] Entre ells trobem les estructures en forma d'arbre i els tipus dinàmics.[1]
Història
[modifica]Lisp va ser inventat per John McCarthy en 1958 mentre estava a l'Institut Tecnològic de Massachusetts (MIT). McCarthy va publicar el seu disseny en 1960 en un article de Communications of the ACM titulat «Funcions recursives d'expressions simbòliques i el seu còmput a màquina, Part I»[2] (la «part II» mai va ser publicada). Allí va mostrar que amb alguns operadors simples i una notació per a les funcions, un pot construir un llenguatge Turing complet per a processament d'algorismes.
Des de 1955 o 1956, l'Information Processing Language va ser el primer llenguatge d'IA, i ja havia inclòs molts dels conceptes, com ara a procés per llista i recursiu, que van venir a ser usats a Lisp.
La notació original de McCarthy usava «expressions M» en claudàtors que serien traduïdes a expressions S. Com un exemple, l'expressió M car[cons[A,B]]
és equivalent a l'expressió S (car (cons A B))
. Una vegada que Lisp va ser implementat, els programadors ràpidament van triar usar expressions S, i les expressions M van ser abandonades. les expressions M van emergir una altra vegada amb els intents efímers del MLISP[4] d'Horace Enea i el CGOL de Vaughan Pratt.
Lisp va ser implementat primer per Steve Russell en un ordinador IBM 704. Russell havia llegit l'article de McCarthy, i es va adonar (per a la sorpresa de McCarthy) que la funció eval de Lisp podia ser implementada en codi de màquina. El resultat va ser un intèrpret de Lisp funcional que podia ser usat per fer funcionar programes Lisp, o més correctament, «avaluar expressions Lisp».
Dues rutines de llenguatge assemblador per l'IBM 704 es van convertir en les operacions primitives per descompondre llistes: car (contingut del registre d'adreça) i cdr (contingut del registre del decrementador). Els dialectes de Lisp encara usen el car i cdr (Plantilla:Pron y /ˈkʊdər/) per a les operacions que retornen el primer element i la resta de la llista respectivament.
El primer compilador complet de Lisp, escrit en Lisp, va ser implementat en 1962 per Tim Hart i Mike Levin en el MIT.[5] Aquest compilador va introduir el model Lisp de compilació incremental, en el qual les funcions compilades i interpretades poden entremesclar-se lliurement. El llenguatge en els memos de Hart i Levin és molt més proper a l'estil modern de Lisp que l'anterior codi de McCarthy.
Genealogia i variants
[modifica]Sobre la seva història de cinquanta anys, Lisp ha produït moltes variacions en el tema basi d'un llenguatge d'expressió S. D'altra banda, cada dialecte donat pot tenir diverses implementacions, per exemple, hi ha més d'una dotzena d'implementacions del Common Lisp.
Les diferències entre els dialectes poden ser molt visibles, per exemple, el Common Lisp i el Scheme utilitzen diferents paraules clau per definir funcions. Dins d'un dialecte que està estandarditzat, no obstant això, les implementacions conformades suporten el mateix llenguatge basi, però amb diferents extensions i biblioteques.
Relació amb la intel·ligència artificial
[modifica]Des del seu inici, Lisp estava estretament relacionat amb la comunitat d'investigació de la intel·ligència artificial, especialment en sistemes PDP-10.[6] Va ser usat com la implementació del llenguatge de programació Micro Planner que va ser la fundació per al famós sistema d'IA SHRDLU. En els anys 1970, a mesura que la investigació de l'IA va engendrar descendents comercials, l'acompliment dels sistemes Lisp existents es va convertir en un problema creixent.
Lisp era un sistema difícil d'implementar amb les tècniques de compilador i maquinari comú dels anys 1970. Les rutines de recol·lecció d'escombraries, desenvolupades pel llavors estudiant graduat del MIT, Daniel Edwards, van fer pràctic córrer Lisp en sistemes de computació de propòsit general, però l'eficàcia encara seguia sent un problema. Això va portar a la creació de les màquines Lisp: maquinari dedicat per córrer ambients i programes Lisp. Avanços tant en el maquinari de computadora com a la tecnologia de compiladors aviat van fer obsoletes a les màquines de Lisp, en detriment del mercat de Lisp.
Durant els anys 1980 i 1990, va ser fet un gran esforç per unificar els nombrosos dialectes de Lisp en un sol llenguatge (més notablement, InterLisp, Maclisp, ZetaLisp, MetaLisp, i Franz Lisp). El nou llenguatge, Common Lisp, va ser essencialment un subconjunt compatible dels dialectes que va reemplaçar. En 1994, l'ANSI va publicar l'estàndard del Common Lisp, «ANSI X3.226-1994 Information Technology Programming Language Common Lisp». En aquell moment el mercat mundial per Lisp era molt més petit del que és avui.
Des de l'any 2000
[modifica]Havent decaigut una mica els anys noranta, Lisp va experimentar un nou auge enfocat en les implementacions obertes de Common Lisp i en el desenvolupament d'aplicacions i de noves biblioteques portàtils. Una mostra d'aquest interès va ser el que la versió impresa de Practical Common Lisp (Common Lisp Pràctic) de Peter Seibel, un tutorial per a nous programadors publicat en 2004,[7] estigués breument a Amazon.com com el segon llibre de programació més popular. El llibre és accessible en línia sense cost.[8]
Molts nous programadors de Lisp van ser inspirats per escriptors com Paul Graham i Eric S. Raymond lluitant per un llenguatge que uns altres consideren antiquat. Els nous programadors de Lisp freqüentment descriuen el llenguatge com una experiència que obre els ulls i afirmen que és substancialment més productiu que altres llenguatges.[9] Aquest augment de consciència pot ser contrastat amb el «hivern de la intel·ligència artificial» i el breu creixement de Lisp a mitjan 1990.[10]
En la seva enquesta de les implementacions del Common Lisp, Dan Weinreb prepara onze implementacions activament mantingudes. Scieneer Common Lisp és una nova implementació comercial que va bifurcar (fork) del CMUCL amb un primer llançament en 2002.
La comunitat del codi lliure ha creat la nova infraestructura de suport: Cliki és un Wiki que recull la informació relacionada amb Common Lisp, la llista recursos de Common Lisp directory, el #lisp és un canal popular d'IRC (amb suport per un Bot escrit en Lisp), lisppaste Arxivat 2021-06-09 a Wayback Machine. suporta la distribució i l'intercanvi i comentari de retazos de codi (snippets), el Planet Lisp recull el contingut de diversos blogs relacionats amb Lisp, en el LispForum Arxivat 2018-03-14 a Wayback Machine. l'usuari discuteix tòpics sobre Lisp, Lispjobs és un servei per anunciar ofertes de treball i hi ha un nou servei de notícies setmanals (Weekly Lisp News).
Han estat celebrats els 50 anys del Lisp (1958-2008) en LISP50@OOPSLA. Hi ha diverses reunions d'usuari locals regulars (Boston, Vancouver, Hamburg…), Reunions Lisp (European Common Lisp Meeting, European Lisp Symposium) i una International Lisp Conference.
La comunitat Scheme manté activament més de vint implementacions. S'han desenvolupat en els últims anys diverses significatives noves implementacions (Chicken, Gauche, Ikarus, Larceny, Ypsilon). L'estàndard de Scheme Revised5 Report on the Algorithmic Language Scheme va ser àmpliament acceptat en la comunitat del Scheme. El procés Scheme Requests for Implementation ha creat moltes biblioteques i extensions gairebé estàndards pel Scheme. Les comunitats d'usuari d'implementacions individuals del Scheme continuen creixent. En 2003 un nou procés d'estandardització del llenguatge va ser començat i va conduir a l'estàndard R6RS del Scheme en 2007. L'ús acadèmic del Scheme per ensenyar ciències de la computació sembla haver declinat alguna cosa. Algunes universitats ja no estan usant Scheme en els seus cursos preliminars de ciències de la computació.
Hi ha també alguns nous dialectes Lisp. Notablement: Newlisp (un llenguatge de scripting), Arc (desenvolupat per Paul Graham) i recentment Clojure (desenvolupat per Rich Hickey) i NU per a la programació amb Cocoa d'Apple.
Dialectes importants
[modifica]Els dos principals dialectes de Lisp usats per a la programació de propòsits generals avui dia són Common Lisp i Scheme. Aquests llenguatges representen opcions de disseny significativament diferents.
El Common Lisp, descendent principalment de MacLisp, Interlisp, i Lisp Machine Lisp, és un superconjunt ampliat dels primers dialectes del Lisp, amb un estàndard de llenguatge gran incloent molts tipus de dades i formes sintàctiques incorporats, així com un sistema de l'objecte. El Scheme és un disseny més minimalista, amb un molt més petit conjunt de característiques estàndard però amb certes característiques d'implementació (tals com optimització de crida de cua i continuació completa) no trobades necessàriament a Common Lisp. El Common Lisp també va prendre prestades certes característiques de Scheme tals com àmbit de lèxic i clausura lèxica.
El Scheme, és un dialecte del llenguatge Lisp amb àmbit estàtic i cua recursiva autèntica inventat per Guy Lewis Steele Jr. i Gerald Jay Sussman. Va ser dissenyat per tenir una semàntica excepcionalment clara i simple i poques maneres diferents de formar expressions. Una àmplia varietat de paradigmes programats troben una expressió convenient en Scheme, incloent els estils imperatiu, funcional, i pas de missatges. El Scheme continua evolucionant amb una sèrie dels estàndards (Revisedn Report on the Algorithmic Language Scheme) i una sèrie de Scheme Requests for Implementation.
A més, els dialectes de Lisp són usats com a llenguatges de scripting en un seguit d'aplicacions, amb els més coneguts sent l'Emacs Lisp a l'editor d'Emacs, Visual Lisp a AutoCAD, Nyquist a Audacity.
Innovacions del llenguatge
[modifica]Va ser en Lisp on van néixer moltes idees de les ciències de la computació, incloent l'estructura de dades d'arbre, recol·lecció automàtica d'escombraries, tipat dinàmic, condicionals, funcions d'ordre superior com map i reduce, recursivitat, el compilador autocontingut i el REPL.[11][12]
Lisp va ser el primer llenguatge de programació homoicònic: tot el codi font del programa és al mateix temps una estructura de dades del llenguatge (llistes niades o arbres). Com resultat la metaprogramació en Lisp és relativament senzilla. Ja que el codi font de Lisp té una correspondència directa amb l'arbre sintàctic abstracte del programa, es pot crear codi de Lisp per manipular més codi de Lisp, o encara crear-ho des de zero, sense necessitat d'un extensiu anàlisi sintàctica (parsing) o manipulació de codi de màquina binari. Això generalment és considerat una dels avantatges primaris del llenguatge pel que fa al seu poder expressiu, i fa al llenguatge favorable a l'avaluació metacircular.
La ubiqua estructura IF THEN ELSE
, ara admesa com un element essencial de qualsevol llenguatge de programació, va ser inventada per McCarthy per a l'ús en Lisp, on va veure la seva primera aparença en una forma més general (l'estructura cond
). Va ser heretada per l'ALGOL, que la va popularitzar.
Lisp va influir profundament a Alan Kay, el líder d'investigació del Smalltalk, i llavors al seu torn Lisp va ser influenciat per Smalltalk, adoptant les característiques de la programació orientada a objectes (classes, instàncies, etc.) a finals dels anys 1970.
Lisp va introduir el concepte de recol·lecció d'escombraries, mitjançant el qual el sistema busca en el «heap» de memòria dinàmica per eliminar objectes obsolets sense intervenció explícita del programador.[13]
En gran part a causa dels seus requeriments de recursos pel que fa al primerenc maquinari computacional (incloent els primers microprocessadors), Lisp no es va fer tan popular anés de la comunitat de intel·ligència artificial, com el van ser el FORTRAN i el descendent del llenguatge ALGOL, el llenguatge C. Llenguatges més nous com Java i Python han incorporat algunes versions limitades d'algunes de les característiques de Lisp, però no poden necessàriament brindar la coherència i la sinergia dels conceptes complets oposats en Lisp. A causa de la seva conveniència per a aplicacions mal definides, complexes, i dinàmiques, Lisp estan gaudint actualment d'un cert ressorgiment de l'interès popular.
Aplicacions
[modifica]- L'important editor de textos Emacs va ser programat amb Lisp.
- El programa "Hola Món", en Lisp, pot ser així:
(format t "Hola, món!")
> "Hola, món!"
"Hola, món!"
>
(DEFUN HOLA-MON ()
"Hola, món"
)
> (HOLA-MON)
"Hola, món!"
>
> (let () (print (format '() "Hello Hell!!!")) (terpri)'ok)
"Hello Hell!!!"
OK
>
Vegeu també
[modifica]Referències
[modifica]- ↑ 1,0 1,1 Paul Graham. «Revenge of the Nerds». [Consulta: 14 març 2013].
- ↑ 2,0 2,1 John McCarthy. «Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I». [Consulta: 13 octubre 2006].
- ↑ Graham, Paul. «Revenge of the Nerds». [Consulta: 9 desembre 2021].
- ↑ David Canfield Smith. «MLISP Users Manual». Arxivat de l'original el 24 de setembre de 2006. [Consulta: 13 octubre 2006].
- ↑ Tim Hart and Mike Levin. «AI Memo 39-The new compiler». [Consulta: 13 octubre 2006].
- ↑ La mida de la paraula de 36 bits del PDP-6/PDP-10 va ser influenciat per la utilitat de tenir dos punters Lisp de 18 bits en una sola paraula. Lum Johnson. «The History of TOPS or Life in the Fast ACs». alt.folklore.computers, 18-10-1990.[Enllaç no actiu]
- ↑ «Practical Common Lisp going into 3rd printing». Arxivat de l'original el 20 de juny de 2009. [Consulta: 19 setembre 2009].
- ↑ Practical Common Lisp
- ↑ «The Road To Lisp Survey». Arxivat de l'original el 4 d'octubre de 2006. [Consulta: 13 octubre 2006].
- ↑ «Trends for the Future». Arxivat de l'original el 3 de juny de 2013. [Consulta: 19 setembre 2009].
- ↑ Chisnall, David. Influential Programming Languages, Part 4: Lisp, 12 de gener de 2011 [Consulta: 22 maig 2020].
- ↑ «Revenge of the Nerds». www.paulgraham.com. [Consulta: 22 maig 2020].
- ↑ LiebermanHenry; HewittCarl «A real-time garbage collector based on the lifetimes of objects» (en anglès). Communications of the ACM, 01-06-1983. DOI: 10.1145/358141.358147 [Consulta: 22 maig 2020].