Merhabalar, Belki bazilariniz hatirlar: yakin zamanda, fazlamesai.net'te bir Lisp gerekliydi, gereksizdi tartismasi yapildi. Benim acimdan ilgincti, cunku Turkce bir listede bu tip bir tartismayi daha once okumamistim. Sosyal acidan ilgincti. fakat sadece o degil: tartisma sirasinda Bulent Bey bana Steele'nin "Evolution of Lisp" adli makalesini tavsiye etti. Benden okuyunca ne dusundugumu yazmami da talep etti. Soz verdim asagida o sozumu tutuyorum.
Fakat oncelikle belirteyim: yazi sadece isin egitici/pedagojik yonuyle ilgili, yeni bir tartisma baslatmak, kimseyi elestirmek, vs. icin degil. Sadece makale bana neler dusundurdu, hangi konularda bana ipuclari/bilgi sagladi, neyi buldum, neyi bulamadim; bunlarla ilgili. Makale 100 sayfa kadar (tam versiyonu: ben onu okudum) ve minimal bir Lisp bilgisi gerekiyor. "Bilgi sahibi olmadan fikir sahibi olmak" istemedigim icin yaziyi sverek okudum. Zaman icinde yeniden yaziya donup uzerinde dusunecegim, fakat ilk birkac izlenimimi asagida veriyorum. Basliyoruz... Yazidan Lisp'in tarihcesi (belli bir donemden sonra; makale dogus donemi ve tasarlanma amaci, ilk sekli nasildi, vs. hakkinda pek fazla birsey icermiyor. Baska bir yaziya atifta bulunuyor: onu henuz okumadim) hakkinda bilgi edindim. Yazinin basligindan da tahmin edilebilecegi gibi ;). Standardizasyon donemini de kapsiyor yazi. Burada Common Lisp'in baslica Lisp Machine Lisp (Mac Lisp temelli) ve Interlispi (ama aslinda kimi teknik, kimi politik gerekcelerle daha cok birincisini) buyuk olcude standartlastirdigi filan... Bu kismi ilgincti ve ayni zamanda propaganda degil, gercek anlamda bir tarihce sunuyor. Lisp hakkinda sadece kronolojik bilgi degil, tarihi ve teknik bir perspektif edinmek icin herkes mutlaka bir baksin derim. Yazi bir iki onemli Lispcinin, ama oldukca objektif diyebilecegim bir tutumla kaleme aldigi bir kaynak. Uslup yer yer eglendirici. Benim burada cok detaylara girmemin anlami da imkani da yok. Fakat su kadarini soyleyeyim: kesinlikle Paul Graham'in kiskitici yazilari (bkz. Java hakkinda yazdiklari), veya Erik Naggum'un "klasik" mesaji (su XML ile ilgili olan), vs. hicbir ilgisi yok. Hem uslup, hem icerik onlarla kiyas bile kabul etmeyek derecede ileri ve bilgi yuklu. Benim tum yaziya serpistirilen su "cachet" (albeni) tespitiyle ilgili cekincelerim var. Ne kadar yerinde o tespitler bilmiyorum. Mesela her zaman canim memleketimde gazetelerin secimleri nasil etkiledigi yazilir cizilir: ama bir kez Allah icin tutturduklarini gormedim ;). Sanirim yazarlar biraz sosyal renk katmak istemis yaziya. [Ben tam versiyonu okudum: belki bu paragraflar basilan kopyada yoktur]. Fakat her zaman, bu gibi konularda kesin karara varmadan once degisik fikirleri almakta, yazilari okumakta fayda var. Bir buyuk ve onemli gorulen ozellik olarak CLOS'tan bahsedilmis (albeni unsuru olarak da bahsediliyor): oncesinde ne vardi (Flavors, vs.) diye merak edenler bir liste bulabilir yazida. Yazida standartlastirilan bazi uygulamalarin neden bugun olduklari sekilde karara baglandigini gormek de mumkun. Mesela makro sisteminin gelisimi. Yazidan, Lisp tarihinde belirgin bir AI ve sembolik programlama etkisi ve damgasi (DOE Macsyma) oldugu anlsiliyor. Tabii bunun gercek resmin % ne kadarini yansittigini anlamak icin benim yeterli bilgim yok. Bu konuda uzmanlarimizin goruslerini bekliyoruz. Unutmadan eklemem gereken bir nokta, Lisp'in bizzat bir programlama dilleri ve modern programlama modelleri laboratuvari olarak oldukca etkin olarak kullanilmis oldugu. Scheme, Planner, vs. bu baglamda bir miktar anlatiliyor. Bunlar hep yazida bulunabilir. DUSUNCELER (kimi hiperbolik) Tabii ki bir yazidan kazandiklariniz sadece yazarin ne yazip ne yazmadigi degil, ayni zamanda anlatilanlarin size ne cagristirdigi biraz da. Eger yazi size bilmediginiz birseyler ogretiyorsa, bildikleriniz hakkinda yeniden dusunme ihtiyaci hissediyorsaniz, veya bildiginizi zannettiginiz konulardaki yanlislarinizi gormenize yardim ediyorsa; evet tum bu hallerde yazi sizin icin, bazen yazarinin da kasdetmedigi tarzda faydali olabilir. Ben kendi deneyimimden 3-5 noktayi paylasip, uzerime duseni yapayim. (sirali degil, karmakarisik yaziyorum. Kusura bakmayin artik). 1)CL'de neden "4" floating point precision var? Boyle islerin dogrusu yanlisi olmaz, bir tercih meselesi: fakat neden bu boyle tercih edilmis? Benim icin ilginc oldugu icin aktariyorum: ******************************************* The S-1 was initially intended to be a fast signal processor. One of the envisioned applications was detection of submarines, which seemed to require a mix of numerical signal processing and artificial intelligence techniques. The project received advice from W. Kahan in the design of its floating-point arithmetic, so it ended up being quite similar to the eventual IEEE standard. It seemed appropriate to refine the techniques of the MacLisp compiler to produce good numerical code in S-1 Lisp [Brooks, 1982b]. The S-1 offered four different floating-point formats (18, 36, 72, and 144 bits) [Correll, 1979]. Influenced by S-1 Lisp, Common Lisp provides an expanded system of floating-point data types to accommodate such architectural variation. ********************************************** esasen bu paragraf ve daha bircoklari Lisp'in teknik uygulanabilirlik alanlari hakkinda iyi bir fikir verecektir. En azindan, bu dille programlama yapan insanlarin dusuncelerini... Bu, yakin zamanda Fazlamesai.net'teki tartismada ortaya atilan bazi iddialari da bana hatirlatti dogal olarak. Neyse, ona girmeyelim :) Dedigim gibi, ben bu konuda dogru yanlis aramiyorum, sadece kararin arkasindaki "gelenek" onemli burada: bu karar da daha pekcok karar gibi, daha once ilgili alanda ve kullanici kitlesinde begenilmis ve gunun sartlarinda iyi gorulen cozumlerden kaynaklaniyor. Dilin tarihini bilmeyen biri bunu anlayamaz ve gereksiz itirazlara kolayca basvurabilir. Fakat su anlasilmali ki standartlar gokten inmiyor: bazi meselelerde oncu, ama cogu konuda gozlemci ve hakem olarak gecmisi gelecege tasiyor. Bu cok onemli bir rol: cesitlilige saygi duymali ve tahammul etmeliyiz. Aksi halde hem gecmisle hem mevcutla surekli cene yaristirma ve kavga modunda oluruz. Ustelik, bicak degil el keser: tabii ki bicaginiz keskinse bu daha kolay olur ;). Ben *yine de* bu konuda standardin gozden gecirilmesinden yanayim. Ama cok da onemli degil. Bu arada beni sahsen ilgilendiren bir nokta: Gerry Sussman'in belli bir donemde numerik programlar ve numerik program generatorleri hakkinda calistigindan bahsedilmis. Bu noktayi ben bir yere kaydettim. unutmadim, aklimda :) 2) Bir baska ilginc bolum Scheme ve Lisp makro sistemlerinin gelisim ve karsilastirilmasi ile ilgili. Bu iki sistem birbirlerinden oldukca farkli. Ben birini otekine tercih etme konumunda degilim: fakat Common Lisp'in arkasinda yillarin evrimsel gelismesi, Scheme sisteminin temelinde de ayri kanaldan bir akademik altyapinin ve farkli kaygilarin bulundugunu gorebilirsiniz. Yazida ayrica pekcok referans ve tarihi bir perspektif var: detayli bilgi ve inceleme isteyenlerin ilgili dillerin kaynaklarina bakmasi gerek. Bu arada CL makrolarindaki ,', notasyonu bana sembollerle dusunmekle pointerler uzerinden dusunmeyi karsilastirtti, aradaki farki dusundurttu. Ilgilenenlere siz de bir dusunun derim (exercise ;)). Belki dolambacli bir yol oldu, fark bir problemin en iyi cozumu, sizin icin en dogal olanidir :). Fark temel olarak sembolik programlama ile C-temelli programlama dilleri ile yaptiginiz tarz programlama. Benim altyapim nedeniyle ilk gordugu gun Lisp'i ilginc bulmamin altindaki (suuralti :) ana sebep buydu helhalde, ama pek de uzerinde dusunmemistim makaleyi okuyana dek. Lisp'deki makro sistemi, benim aylar once Lisp'i ciddi olarak gozden gecirme istegimi uyandiran bir konuydu. (C++ template'leri ile ugrasirken)... Sonrasinda ilgim daha farkli bir duzleme kaysa da, orijinal etken buydu. Bunu tetikleyen ise benim o zamanlar kendimi, Bjarne Stroustrup'un gozunden olaya bakip, C++'in beni bir turlu kendisine isindiramayan dizaynini ve o kulturun felsefesini anlamaya calismam, programlamayi yeniden sevmeye ve kendim icin anlamli kilmaya calismamdi. Onun yapamadigini Lisp yapti benim icin. Su anda ben sahsen C++'i cozumun degil, problemin bir parcasi olarak goruyorum. Fakat ozellikle "ne yapmamali?" konusunda cok iyi bir ornek. Bir iki konuda ilginc fikirler icerse de dil, tarihi bir kaza benim gozumde. Amerikalilarin dedigi gibi, YMMV :). 3)Tabii bu makaleyi gercekten okuyup da true / false, T v. NIL hakkinda (ikincisi ilginc olarak bir Lisp implementasyonunun da adi: bununla ilgili bir saka da var yazida. Kendiniz okuyun :)) dusunmemek olmaz. Ben kendi adima bu konuda bayagi dusundum ve kendimce bir sonuca da vardim. Tabii, if ve benzeri yapilar da buna dahil. Ama bu notun ana konusu benim vardigim sonuclar degil, yazinin size hangi yonlerde katki saglayabilecegi. Dolayisiyla ben kendi dusuncelerimi kendime sakliyorum. 4)CLOS hakkinda herkes ne dusunuyor bilmiyorum, ama ben bu sistemi henuz yeterince bilmiyorum. Tek talihsiz (bilmiyorum, belki o kadar talihsiz degildir) nokta, OO paradigmanin tam olarak insanlarca anlsilmamis oldugunu gormem. Bu bana, keske Lisp ve Scheme topluluklari bu konuya daha ciddi olarak egilip meseleye katkida bulunsalar dedirtiyor. Genc arkadaslarimin Paul Graham gibi zatlarin negatif yaklasimindan dolayi bu konu uzerinde dusunmeyi birakmasindan endise ediyorum. Bu gercekten buyuk, inanilmaz buyuk bir kayip bana sorarsaniz. Tekrar CLOS'a donersek, bir yerde sembolik yeteneklere sahip bir programlama dilini bir type sistemi ile tamamladigi icin, ve bu gercekten onemli oldugu icin beni ilgilendiriyor. C ve kardeslerindeki tip sistemleri insanlari yanlis yonlendiriyor: ozellikle benim gibi CS egitimi almamis insanlari. O tarz bir type sisteminin gercekci ve modern anlamda bir type sistemi ile yakindan uzaktan ilgisi olmadigini ben bile gorebiliyorum. C++ kotu bir saka gibi, Java dogru yolda pekcok adim iceriyor gibi. Uzman degilim, ama dikkatlice dusunmeye calisiyorum. CLOS bu resimde nerededir, onu henuz bilmiyorum: firsat buldukca ogrenmeye calisacagim. Fakat acikcasi, makalede bu konuyla ilgili pek doyurucu birsey yok. Sadece birazcik yuzeysel tarih, o kadar. 5) Bir baska olmayan veya benim dikkatimi pek cekmeyen, fonksiyonel programlama ile Lisp arasindaki iliski, bunun meyveleri. Buna yeterince deginilmeliydi. Ben sahsen bu paradigma ile OOP arasindaki ideal sentez nedir, bunu ne kadar biliyoruz; bunlari merak ediyorum. 6)Son zamanlarda yine Fazlamesai'de bir XML - Lisp karsilastirmasi olmustu. Bu temel olarak m-exp v. s-exp. meselesi hakkinda da makalede eglenceli bir bolum var sonlara dogru. Herkese okumalarini tavsiye ederim. Ben, sahsen bu konuda insanlarin birbirlerine toleransli olmalari gerektigini soyleyip geceyim. Gercekten onemli olan fikirlerinizi nasil ifade etmeyi en uygun buldugunuz. Her ikisi icin argumanlar ileri surulebilir. Sunu ekleyeyim: bu konuda da uzun uzun dusundum, hala da dusunuyorum. fakat su var: bir fallback sintakina ihtiyac var. Ve s-exp sintaksi burada rakipsiz. Ben bazi uygulama domainlerinde Algol sintaksinin inkar edilemez avantajlari oldugunu dusunuyorum. Bu konuyu desmeyecegim. fakat bu konuda dogru yaklasim AST - sozdizimi karsilastirmasi yapip o yonden dusunmek degil bence (bu temel olarak fazlamesai.netteki yazida yapilan seydi). Benim icin bunun cevabi, "neden Hilbert uzaylari uzerindeki fonksiyonelleri ikililer olarak, tipki skaler carpim gibi gosteriyoruz?!" sorusu ile ayni (yillar once sorup cevaplamistim kendim icin :). Alt yapisi ve aldiklari egitim farkli olan arkadaslar farkli ornekler versinler dilerlerse. Ama mesele derleyiciyi memnun etmek degil, o sadece bir yan sonuc. 7) Bir baska onemli konu "distributed computing". Bu konudaki cabalar cok kisa geciyor yazida, ama benim fazlasina ihtiyacim var. Bu konu onemli bence. Mesela bir actor model konusu geciyor. Temel olarak closure kavrami olsa da, bu kavramin disinda kalan yonleri de var. Konu dogrudan Lisp ile ilgili degil, ama ben bu actor model yaklasimini ilk bu makalede gordum. Ozellikle scientific computing - distributed computing iliskisinden dolayi beni meraklandirdi bu. Vaktim oldugunda biraz ogrenmek istiyorum. 8) Son olarak... Nasil Turkce deyince sadece grameri kasdetmiyorsak, Lisp deyince de sadece sintaksi kasdetmiyoruz. Lisp bir entellektuel bakisi yansitiyor. Belli bir tarihi, kulturu, iyi destekledigi ve desteklemeyi *secmedigi* paradigmalar var. Sizin belli aktivitelerde dostunuz ve oldukca onemli bir problem tipi ve kumesi sozkonusu oldugunda saygideger bir fikir ifade araci. Ama, bunu kendiniz icin kesfetmeniz gerekli. Lehte ve aleyhte fanatiklere kulak asmayalim. Gerry Sussman'dan bir alintida, "redundant architecture" konusunda bilgisayar dunyasinin radikal adimlar atmasi gerektigini soyluyordu. Ben bunu son derece onemli bir tespit olarak goruyorum (bu alinti makalede degil, yanlis anlama olmasin). Ben bu konuyla programlama kulturu ve paradigmalari arasinda derin bir ilgi goruyorum. Boyle bir yapida C gibi dillerin tum avantajlarini kaybedecegini gormek icin kahin olmaya gerek yok. Umarim bu cabuk olur, zira beyin gucunun boyle bosa harcanmasi gercekten yazik oluyor... Neyse, devirdigim camlar icin ozur diliyor ve goz attiginiz icin tesekkur ediyorum. Saygilar, Nusret __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com _______________________________________________ cs-lisp mailing list [email protected] http://church.cs.bilgi.edu.tr/lcg http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp

