meditacija o lispu programih in življenju
DESCRIPTION
Ko ljudje z navdušenjem razlagajo o zmožnostih zadnjega "čudežnega" programskega jezika, se LISPerji le pokroviteljsko nasmihamo. Spokojni smo v vednosti, da je vse kar je žlahtnega, LISP imel že pred dvajsetimi leti, ostalo pa tako ni vredno našega ostrega uma in delikatnih prstov. Zaprisežen lisper Simon Belak bo na Pipinem odprtem terminu v torek, 13.10., ob 19h pokazal, zakaj je takšna skrajna aroganca skorajda upravičena in nas popeljal v zakulisje programabilnih programskih jezikov lisp. Predavanje se bo osredotočilo na program kot razmerje med podatki, kodo in izvajalnim okoljem. Vse to, popestreno z izdatno mero samovšečnosti in občasnimi opazkami o praktični uporabi.TRANSCRIPT
Meditacija o Lispu, programih in življenju
Lisp?
Srečno naključje
Lisp kot univerzalna funkcija
7 aksiomov
(quote x)(atom x)(eq x y)(car x)(cdr x)(cons x y)(cond (p1 e1) (p2 e2) ... (pn en))
Funkcije
Denotacija(lambda (p1 p2 ... pn) e)
Klic((lambda (p1 p2 ... pn) e) a1 a2 ... an)
Rekurzija Y-kombinator (lambda račun)
Metakrožni interpretator
Homoikoničnost
Koda = podatkiDrevo abstraktne sintakse
Makri
Program
ki piše program,ki piše program,ki piše program,ki piše program,
ki piše program,ki piše program,
ki piše program,
...
Programi vse do dna
Vstopanje v prevajalno okolje
ParserKontekstualna preoblikovanja Mini jeziki
Vsakdo si razvije svoj Lisp
Parser
Nova sintaksa#P”/home/simon/foo.bar” => #S(pathname :directory “/home/simon” :name “foo” :type "bar")
Kontekstualna preoblikovanja
Preoblikovanja kode glede na raboSuperprevajalnikiSuperoptimizatorji
(mapcar #’square (mapcar #’+ xs ys)=>(mapcar (lambda (x y) (square (+ x y))) xs ys)
Mini jeziki
Kontrolne strukutureRed vrednotenjaGeneriranje kodeSintaksa
Meje mojega jezika pomenijo meje mojega sveta.
– Wittgenstein
Svoboda misli
Funkcijsko programiranjeObjektno programiranjeLogično programiranjeImperativno programiranjeDeklerativno programiranjeAspektno programiranje
Ko pisanje prevajalnikov postane nekaj vsakdanjega
O življenju
Vsak program je utelešen
MejaMera
Meja
Jaz in drugiPlaniranje v nedeterminističnem okoljuIzmenjavanje določljivega in nedoločljivega
Zmagam lahko le, če prej ne zgubim
Program pred ogledalom
Samo-reprezentacijaMetakrožen interpretator
Dostop do prevajalnega okoljaDostop do izvajalnega okolja
RefleksijaIntrospekcija
Mera
Človek je merilo vsega . – Protagora
Ozemljitev pomenaPomen je uporabaReferenčna točka
Samozavedanje?
Genealogija Lispa
Common LispSchemeClojureEmacs Lisp
Razvojna okolja
EmacsLispWorksAllegro CLEclipse + Cusp