Back to site
Since 2004, our University project has become the Internet's most widespread web hosting directory. Here we like to talk a lot about web servers, web development, networking and security services. It is, after all, our expertise. To make things better we've launched this science section with the free access to educational resources and important scientific material translated to different languages.

Kletva Lipsa


Kletva Lispa

od Rudolfa Vajnstoka

Ovaj esej je još jedan pokušaj da se pomiri moć Lisp programskog jezika sa nesposobnošću Lisp zajednice da ponovi svoja pre- AI Winter postignuća. Bez sumnje, Lisp je bio uticajan izvor ideja, čak i u vreme povlačenja. Ta činjenica, uz brilijantnost različitih arhitektura Lisp mašina i tekuću renesansu Lispa, nakon više od decenije lutanja, pokazuje da pobornici Lispa sigurno imaju neko opravdanje za svoje samozadovoljstvo. Ipak, oni nisu uspeli da prenesu moć Lispa u pokret nezadržive snage.

U ovom eseju, tvrdim da je ekspresivna snaga Lispa takođe i uzrok nedostatka te snage.

Snaga Lispa je sama svoj najgori neprijatelj.

Evo misaonog eksperimenta koji to potvrđuje: Uzmite dva programska jezika, od kojih ni jedan nije objekt-orijentisan. Vaš zadatak, ukoliko ga prihvatite, je da ih učinite objekt-orijentisanima, ali da očuvate kompatibilnost sa izvornim jezicima, izuzimajući neke granične slučajeve. Ako uključite bilo koja dva programska jezika u ovaj misaoni eksperiment, videćete da je ovo sa nekima lakše nego sa drugima. To je poenta misaonog eksperimenta. Evo prostog primera: Intercal i Pascal.

Hajde da učinimo ovaj eksperiment zanimljivim: Zamislite da dodamo objekt-orijentaciju programskim jezicima C i Scheme. Učiniti Scheme objekt-orijentisanim je domaći zadatak za studente druge godine. Sa druge strane, dodavanje objekt-orijentacije C-u zahteva programerske veštine Bjarna Stroustrupa.

Posledice ovog nesklada u potrebnom talentu i trudu prouzrokuju Kletvu Lispa:

Lisp je toliko moćan da su problemi koji su tehničke prirode u drugim programskim jezicima, socijalni problemi u Lispu.


Razmotrimo ponovo slučaj Schemea. Pošto je tako lako učiniti Scheme objekt-orijentisanim, mnogi Scheme hakeri su to i učinili. Tokom 1990-ih, ovo je dovelo do nastanka čitavog skladišta objekt-orijentisanih pakovanja za jezik. Sam paradoks izbora je zagarantovao da nijedno od njih neće postati standard. Da neke Scheme implementacije imaju sopstvene objekt-orijentisane postavke, to i nije tako loše. Ipak, činjenica da su mnoga od ovih pakovanja bila delo usamljenih individualaca je dovela do problema o kojima je pisao Olin Šivers u dokumentaciji Scheme Shell-a (scsh).

Programi koje pišu individualni hakeri imaju tendenciju da prate svako-se-čese-gde-ga-svrbi model. Ovi programi će rešiti problem koji haker ima, a da pri tome ne rešavaju srodne delove problema, što bi program učinilo korisnijim i drugima. Dalje, program će sigurno raditi na postavci tog pojedinačnog hakera, ali možda neće moći da se prenese na druge Scheme implementacije na drugim platformama. Dokumentacija može da nedostaje. Pošto je to, u biti, projekat rađen u hakerovo slobodno vreme, program će trpeti ukoliko se pojave obaveze iz stvarnog života. Kako je Olin Šivers primetio, to znači da ovi samostalni projekti imaju tendenciju da rešavaju samo osamdeset procenata problema.

Esej dr. Marka Tarvera, Bipolarni Lisp Programer, sadrži dobar opis ovog fenomena. On piše o ovim usamljenim Lisp hakerima i njihovoj

...nemogućnosti da stvari ispravno dovrše. Fraza 'drži vodu' je apsolutno primenjljiva na ovakav dizajn brilijantnog bipolarnog uma (BBM) i koristi se u Lisp zajednici. Lisp vam omogućava da vrlo lako odbacite stvari, pa se uzima zdravo za gotovo. Uverio sam se u ovo pre deset godina kada sam tražio GUI za svoj Lisp. Nije bilo teško, postojalo je devet različitih ponuda. Problem je bio u tome što nijedan od devet nije bio bez grešaka, na pravi način dokumentovan. U suštini, svaka osoba je primenila sopstveno rešenje, koje je funkcionisalo za njih, i to je bilo dovoljno. Ovo je stav BBMa; meni radi i ja razumem. Do toga takođe dolazi zbog odsustva potrebe i želje za tuđom pomoći da bi se nešto obavilo.


Razmotrimo još jednom C programski jezik u onom misaonom eksperimentu. Zbog težine da se C učini objek-orijentisanim, učinjena su samo dva ozbiljna pokušaja da se problem reši: C++ i Objective-C. Objective-C je najpopularniji na Mekintošu, dok C++ vlada svuda drugde. Ovo znači da, na datoj platformi, na pitanje koju objekt-orijentisanu ekstenziju C-a upotrebiti, već je dat definitivan odgovor. To znači da su objekt-orijentisane postavke za ove jezike dokumentovane, da su ih integrisane razvojne sredine svesne, da su code libraries kompatibilne sa njima, i tako dalje.

Esej dr. Marka Tarvera o bipolarnim korisnicima Lispa iznosi zaključak:

U kontrastu, pristup C/C++ je poprilično različit. Užasno je teško uraditi išta pomoću pincete i lepka, pa će šta god značajnije da uradite biti istinsko postignuće. Želite to da dokumentujete. Takođe, biće vam potrebna podrška u bilo kakvom C projektu ozbiljnijih razmera, pa morate da budete društveni i sarađujete sa drugima. Podrška vam je neophodna da bi ste do nečega došli.

Sve ovo je, iz ugla poslodavca, privlačno. Deset ljudi koji komuniciraju, dokumentuju stvari i sarađuju su poželjniji od jednog BBMa koji hakuje Lisp, koji može biti zamenjen jedino drugim BBMom (ukoliko možete da ga nađete) u nimalo neverovatnom slučaju da će u jednom trenutku otići, bez mogućnosti zamene.

Zbog toga, oni koji već znaju C se ne pitaju "Koji sistem objekata bi trebalo da naučim?" Umesto toga, koriste C++ ili Objective-C, u zavisnosti od toga što koriste njihove kolege, pa se pitaju "Kako da upotrebim objekt-orijentisanu funkciju X?" Odgovor: "Googluj i pronaći ćeš."


Pravi hakeri, naravno, odavno znaju da objekt-orijentisano programiranje nije lek za sve kao što su njegove pristalice tvrdile. Pravi hakeri su prešli na naprednije koncepte kao što su nepromenljive strukture podataka, predviđanje tipova, lazy evaluacije, monade, arrows, pattern matching, constraint-based programiranje, i tako dalje. Pravi hakeri su, takođe, već duže vremena znali da C i C++ nisu pogodni za većinu programa koji ne moraju da obavljaju proizvoljnu manipulaciju bitovima. Ipak, Kletva Lispa i dalje opstaje.

Neki samozadovoljni ljubitelji Lispa su istražili trenutnu lepezu akademskih jezika (Haskell, Ocaml, itd.) i ocenili ih kao falične, govoreći kako su sve njihove funkcije već prisutne u Lispu, ili lako mogu da budu uključene — i unapređene — pomoću Lisp makroa. Verovatno su u pravu.

Šteta za Lisp hakere.


Dr. Mark Tarver — dvaput citiran ranije — je napisao dijalekt Lispa zvan Qi. Velik je manje od deset hiljada linija makroa povrh Clispa. Uključuje većinu funkcija svojstvenih Haskellu i OCamlu. U nekim stvarima ih Qi prevazilazi. Na primer, type inferencing engine Qija je Turing complete. Kratko rečeno dok su timovi talentovanih akademika bili potrebni da bi se napisao Haskell, jedan čovek, dr. Tarver, je napisao Qi potpuno sam.

Pročitajte taj pasus još jednom i izvucite zaključak.


Vežba za čitaoca: Zamislite da se razvije snažno rivalstvo između Haskella i Common Lispa. Šta bi se dogodilo?

Odgovor: Umešala bi se Kletva Lispa. Svaki drugi, ili treći ozbiljni haker Lispa bi razvio sopstvenu implementaciju lazy evaluacije, funkcionalne čistote, arrowsa, pattern matchinga, type inferencinga, i ostalog. Većina ovih projekata bi bili usamljenički poduhvati. Zbog toga bi imali osamdeset procenata funkcija potrebnih većini ljudi (različitih osamdeset u svakom slučaju). Bile bi loše dokumentovane. Ne bi bile prenosive širom Lisp sistema. Neke bi obećavale mnogo, pre nego što bi bile napuštene dok se onaj koji održava projekat bavi poslovima od kojih plaća račune. Nekoliko njih bi premašili Haskell u ovoj ili onoj dimenziji (opet, u drugoj u svakom slučaju), ali njihovo prihvatanje bi bilo otežano ratovima na comp.lang.lisp Usenet grupi.

Ishod: Kolekcija makroa nasumično izabranog starog Lisp hakera bi se dodala nedokumentovanoj, neprenosivoj, implementaciji osamdeset procenata Haskella prepunog bagova pošto je Lisp moćniji od Haskella.


Pouka ove priče je da su sekundarni i tercijarni efekti bitni. Tehnologija utiče ne samo na ono što možemo da uradimo s njom u odnosu na tehnološka pitanja, već i na naše socijalno ponašanje. Ovo socijalno ponašanje može zatim da se vrati i utiče na originalne tehnološke probleme koje razmatramo.

Lisp je bolno jasan primer ove lekcije. On je tako moćan, da hrabri individualnost i nezavisnost do tačke bezumlja. Ova nezavisnost je proizvela zadivljujuće dobre inovacije poput onih iz vremena Lisp mašina. Ista ta nezavisnost ometa napore da se obnove kompletni Lisp sistemi iz davnina; nijedan projekat za stvaranje Lisp operativnog sistema nije prevalio kritičnu masu još od propasti Sybolicsa i LMI.

Jedan od rezultata ovih sekundarnih i tercijarnih efekata je taj da čak i da je Lisp najekspresivniji jezik ikada, takav da je teoretski nemoguće napraviti ekspresivniji, korisnici Lispa će i dalje imati šta da nauče od drugih programskih jezika. Smalltalk momci su podučili sve — uključujući i Lisp hakere — nečemu o objekt-orijentisanom programiranju. I spoj programskih jezika Clean i Mozart/Oz može nečim da iznenadi.


Kletva Lispa ne protivreči načelu Stanislava Dackovskog: Poslodavci preferiraju smenjive nad produktivnim radnicima. Isuviše istinito. Teško mogu da se ispitaju dubine iskvarenosti menadžerske klase. Ipak, poslednji redovi njegovog eseja su problematični. Naime:

Što se tiče sveta “slobodnog softvera”, on se zdušno opire industrijskim dogmama na rečima, ali ni najmanje u praksi. Nijedan koncept odbačen od starne kancelarijskog pakla nije nikada zaživeo u amaterskim masama.

U fusnoti, nudi Linux kao primer ove nevoljnosti da se slede različite ideje. Da budemo sigurni, ima pravo po pitanju operativnih sistema (naročito je komentar na vrhu iritantno glup). Nije u pravu po pitanju programskih jezika. Lisp je imao uticaj na Python i Ruby. Mnoge njihove pristalice iskazuju poštovanje prema Lispu i interesovanje za njega je podstaklo renesansu Lispa. Istini za volju, JavaScript je opisan kao "Scheme u odeći C-a" uprkos tome što je nastao u tom kancelarijskom paklu.

Ipak, uprkos svom uticaju i u korporativnom i open source svetu, Lisp i dalje ima samo delić developerskih umova koje je privukla tekuća lepeza naprednih jezika. Zatvorenost MBA ne može da bude jedino objašnjenje za ovo. Kletva Lipsa objašnjava mnogo toga.


Slobodna razvojna okruženja dostupna za Lisp daju dalje primere Kletve Lipsa.

Neprijatno je, ali ovo mora da se istakne. Zaboravite na Lisp mašinu; nemamo čak ni razvojne sisteme koji mogu da pariraju onome što prosečni Smalltalk haker uzima za normalno ("Uvek sam imao osećaj da je Lisp superiorni jezik, a Smalltalk superiorno okruženje." - Ramon Leon). Ukoliko ne plate hiljade dolara, Lisp hakeri i dalje ostaju na Emacs-u.

Džejms Gosling, autor prvog Emacs-a koji je radio na Unixu, ispravno je istakao da se Emacs nije značajno promenio više od dvadeset godina. To se nije desilo zbog toga što ljudi koji održavaju Emacs i dalje pakuju kod povrh dizajna određenog još u vreme kada je Emacs bio projekat postdiplomca u MIT AI Laboratoriji, to jest, dok je razvoj Emacs-a i dalje bio indirektno finansiran nacionalnim dugom. Slashdotter može da kaže kako je Emacs već dovoljno moćan i može da uradi sve što i neka druga razvojna sredina, samo bolje. Oni koji su koristili Lisp mašine se ne bi složili.

Ako je tako, zašto Lisp hakeri ne spuste Smalltalk momke na zemlju? Zašto ne naprave slobodni razvojni sistem koji podseća na slavne dane Lisp mašina, čak iako ne mogu da naprave novu?

Razlog iz kog se ovo ne dešava je Kletva Lispa. Mnogo Lisp hakera bi trebalo međusobno da sarađuju. Pogledajte pažljivije: Veliki broj onih ljudi koji postanu Lisp hakeri bi trebalo međusobno da sarađuju. Trebalo bi da sarađuju međusobno na dizajnu koji nije već od početka zadat. I niko ne bi sprovodio nikakvu spoljašnju disciplinu, poput smelog kapitaliste, ili korporacijskog gazde, koji bi ih usmeravali.

Kod svakog projekta dolazi do trvenja između članova, nesuglasica, sukoba oko stila i filozofije. Nasuprot ovih socijalnih problema stoji činjenica da nijedan veliki projekat ne može drugačije da se sprovede. "Svi moramo da se zbijemo jedni uz druge, ili ćemo biti bijeni ponaosob." Ali ekspresivnost Lispa slabi ovu ujediniteljsku silu; svako uvek može da započne sopstveni projekat. Zbog toga, individualni hakeri odlučuju da ovo jednostavno nije vredno truda. Tako, ili napuštaju projekat, ili se u njega uopšte i ne uključuju. Ovo je Kletva Lipsa.

Neko bi čak mogao i da hakuje Emacs kako bi dobio nešto dovoljno dobro. Stoga se Kletva Lispa priklanja devizi Gore je Bolje.


Ekspresivna moć Lispa ima mane. Ne postoji besplatan ručak.



Published (Last edited): 30-01-2013 , source: http://www.winestockwebdesign.com/Essays/Lisp_Curse.html