Kent Pitman Lisp ve ötesi ile ilgili soruları yanıtladı - Bölüm 2

0
FZ
Kent Pitman, 2001 yılının sonuna doğru Slashdot camiasının Lisp/Scheme, standartlar, yazılım geliştirme ve diğer konulardaki sorularını cevapladı, meraklarını giderdi. Bir hayli detaylı olan bu soru cevap seansı uzunluğundan ötürü iki bölümde yayınlandı. İkinci ve son bölümü, Bilkent Üniversitesi, Bilgisayar Müh. bölümü öğrencisi Hayrettin Gürkök'ün çevirisi ile karşınızda... (1. bölüm burada, 2. bölümün ilk kopyası ise ileriseviye.org adresinde)
12) Scheme öğrenmek için iyi metinler
drenehtsral

Son zamanlarda, vakit buldukça Scheme çalışıyorum. Hedefim Scheme tabanlı bir betik sistemi geliştirmek ve bunu büyük, çok kullanıcılı bir macera oyunu için kullanmak. Öyle bir oyun düşünün ki içinde çevre simülasyonundan (av/avcı çevrimleri,vs.), üç boyutlu modellere kadar (betiklerle birleştirilmiş geometrik algoritmalar, örn. enteresan doğa görüntüleri oluşturmak işin gelişigüzel sayı üreticilerini temel alarak büyüyen agaçların grafikleri) pek çok sey. Scheme ilgi çekici görünüyor çünkü basit, güçlü ve iş parçacıklı yorumlayıcı fikrine iyi uyuyor.

Scheme'i her yönüyle öğrenmek için "The Little Schemer" ve ayrıca "Structure and Interpretation of Computer Programs"ı okuyordum. Önerebileceğiniz başka iyi Scheme programlama metinleri var mı?

KMP: Kitapların bir listesini Schemers sitesinde bulabilirsiniz. Eğer bu çok sayıdaki ihtimalleri daraltmaya yardımcı olabilecek belirli bir gereksinim ya da tercih belirtebiliyorsanız, comp.lang.scheme haber grubuna daha detaylı bir bilgi isteği göndermenizi tavsiye ederim.

13) Lisp'in gözden kaçan pratik yönleri
hding

Sizce insanlar niçin çok sık Common Lisp'in çıkış koruması, bütün koşul sistemi (whole condition system) (ki siz elbette bununla yakından ilgilisiniz) gibi, günlük programlama için çok kullanışlı olan mükemmel özelliklerini gözardı ediyorlar ve sizin özellikle altını çizeceğiniz, var olan ya da tam tersine standart olmasını umduğunuz halde var olmayan özellikler nelerdir?

Bu arada, comp.lang.lisp'e büyük cömertlikle ve düzenli olarak kattığınız tüm bilgiler için teşşekkür ederim.

KMP: Açıkçası, insanlar bildikleri araçlarla programlama yaparlar. Birinin, ilk dil tercihi olmadığı sürece, Common Lisp'in alışık olmadığı özelliklerini gözardı etmesi kolay olur. Burada biraz çelişki var çünkü çoğu zaman, insanların bir dili kullanmaktan vazgeçmelerinin sebebi, bu dille yapabileceklerinin sınırına ulaşmış olmaları ve daha fazla güce ihtiyaç duymalarıdır. Bu yüzden insanların ısrarla yeni dilin, eskiden kullandıklarından farklı olan özelliklerini aramalarını beklersiniz. Tabii muhtemelen bazıları bunu yapar. Ama haklısınız, bazıları da eski dildeki operatörlerden buldukları güvenlik ve alışkanlıklara tutunurlar ve böylece yeni dilin onlara önereceklerini kaçırırlar.

İyi ki çıkış koruması sonunda (finally) Java'da da mevcut (kinaye için kusura bakmayın). Ve aynı zamanda Common Lisp koşul sisteminin ipuçları bunu Java'ya sevketti. Böylece Common Lisp'e Java'dan gelen insanlar, muhtemelen bu özellikleri aramaya eğilimli olacaklardır. Ama keşfedilecek çok daha fazla başka şey var ve umarım yeni kullanıcılar meraklarının peşine düşer ve araştırmak için zaman ayırırlar.

Dilde neye sahip olmamız gerektiğine gelince, en eksik detay; bir tür sistem tanımlama aracı (make'in Lisp içi benzeri). 1988'de ANSI Common Lisp'e özellik eklemeyi dondurmamız fakat 1994'e kadar standardı çıkartmamamız çok yazık oldu. Böyle bir aracı ekleme fikri de dondurma sonrasındaki bölüme kadar gelmedi. Tüm üreticiler böyle bir imkan sunuyorlar ama birörnek bir çözüm olsaydı, programlar daha kullanışlı olurdu.

Ayrıca Common Lisp hakkında, aynı veya benzer biçimde, neredeyse tüm uygulamalarda bulunan bir hayli şey var. Çoklu-görevlendirme, yuvalar, veritabanı erişimi, harici işlev çağırma, pencerelendirme Bunların herhangi birini içermiş olmak fena olmazdı ama gerçek şu ki bunlar 1988'deki standardizasyon için hazır değillerdi. Gerçi bu noktada ilerlemek için standartlar değil de, başka yöntemlerin doğru yol olduğunu düşünüyorum.

Lisp topluluğu, yeni bir yararlığın dağıtım yönteminin, yeni bir dil spesifikasyonu olmasını bekler. Ama bu, standart kurumlarının oybirliğinin sağlanmasını gerektirir. Problem, doğalarından dolayı, standart kurumlarının eşleme düzenekleri olmalarıdır. Oldukçe paralel bir dünyada, bu eşleme düzenekleriyle olan problem, işleri yavaşlatmalarıdır. Dünya bizim yavaşlamamızı beklemeyecektir, bu yüzden dışarıdan etkilenen belirli bir ilerleme hızıyla, daha iyi çalışan mekanizmalar geliştirmemiz gerektiğini düşünüyorum.

Bence bu, Lisp'in topluluk olarak cevap vermekte geç kaldığı bir alan. Topluluğumuzun üreticiliğinin faydalarını en iyi şekilde almayı sağlayacak, insanların Lisp'te yaratmakta olduğu mükemmel ticari ve şahsi paketleri paylaşmak için, topluluk mekanizmaları olması gerekiyor. Bunun değiştiğine dair belirtiler görüyorum. Common Lisp Open Code Collection (CLOCC) (Common Lisp Açık Kod Koleksiyonu), açık kaynak koda hitap eden bu mekanizmalardan biri. Özel mülk olan ürünlerin değişimi için de benzer mekanizmaları görmek isterdim.

comp.lang.lisp haber grubundaki gönderilerime gelince, teşekkür ederim. Hoşunuza gittiğine sevindim. Açıkçası, kimsenin kafasını ütülemediğimi duyduğum her anı, bir zafer sayıyorum. Arka planda, Lisp hakkındaki bazı kitapları bir araya toplamaya çalışıyorum ama bu işlerin bitip bitmeyeceği belli olmuyor. comp.lang.lisp'i bir çeşit sigorta poliçesi olarak görüyorum ve kariyerim boyunca gördüğüm ve yaptığım şeylerin en azından bir kısmının bireysel bellekten, küresel grup belleğine transfer olduğuna ikna oluyorum.

Bence tarih için, kişisel deneyimleri korumak epey önemlidir. Gelecekte, online işbirliği araçlarının tuttuğu günlükler sayesinde, bu doğal olarak gerçekleşecektir. Ama ben özellikle 1960 (programlama dillerinin doğuşu) ile 1994 (WWW'nin doğuşu) arasında olanların kayıtları hakkında endişeliyim. Bu zaman sürecindeki çoğu şey kağıda kayıtlı ve sonuç olarak kaybolacak. Gelecekten geriye bakınca, bilgi toplumunun nasıl doğduğunu anlamanın, teleskopla evrenin doğuşunu görmek kadar kafa karıştırıcı olacağını düşünüyorum. Çok yaklaşacaksınız ama sonunda hiçbir şey göremeyeceğiniz bir noktaya geleceksiniz. Büyük bilgisel patlama. Ben eski yazılı araştırmalarımın webde yayılması için çalışıyorum ve umarım bu alanda çalışan diğerleri de aynısını yapmayı üstlenirler.

14) Lisp - Scheme - ML
Tom7

CMU gibi birçok büyük akademik (eskiden) Lisp üreticisinin Lisp'ten, ML ve benzerlerine geçtiğini biliyorum. Bunun için öne sürülebilecek nedenlerden bazıları şunlar:

  • Programınız çalışmadan hataları yakalayan, güvenliği sağlayan gelişmiş tür sistemleri.
  • Tür kullanan derleme yöntemi sayesinde, daha fazla verimlilik. (http://www.bagley.org/~doug/shootout/craps.shtml).
  • Arttırılmış modülerlik ve soyutlama.
  • Örüntü eşleştirme, (bence) daha doğal sözdizim.

Aslında ben de bu insanlardan biriyim. Lisp kullanıcıları benle dalga geçiyorlardı ama çoğu daha önce hiç ML kullanmamışlardı. Ama ben açık fikirlyim, o yüzden çağdaş diller çerçevesinde Lisp ve Scheme ne faydalar sağlıyorlar? Bu faydaların, türü belirlenmiş diller ile gerçekten elde edilemeyeceğini düşünüyor musunuz?

KMP: Öncellikle belirlenmiş demek ile statik olarak belirlenmiş demek istediğinizi varsayıyorum. Ben Lisp'i dinamik olarak değişken türü belirtilen düşünüyorum ve çoğu makine dilini de değişken türü belirlenmemiş olarak görüyorum. Statik olarak değişken türü belirtilen dillere bazen sağlam olarak tür belirtilen diller dendiğini duyuyorum ve sıkça ister istemez ben de bu terimi kullanıyorum ama bunu sevmemeye başladım çünkü bence sağlamlık tür denetiminin yapılıp yapılmayacağı anlamına geliyor, ne zaman yapılacağı değil. Statik ve dinamik terimleri konuyu kalbinden vurmak için bana daha iyi geliyor.

Abraham Lincoln'ün dediği gibi, bu bağlamın biraz dışında kaldığını kabul ederek, "Bu tür bir şeyi seven insanlar, bunu sevdikleri türden bir şey olarak bulacaklardır." Lincoln'ün açıklamalarını kabaca çağdaş bağlamda, sonuca mecburen birazcık siyasi yön vererek, tekrar yorumlarsak: Fonksiyonel dillerin, onları seven kişileri çektiği gerçeği, bu dillerin genel amaç için çekici olduklarını kanıtlamaz.

Bence CMU'nun (ya da bağış destekli üniversitelerin) yönünü değiştirmesinin gerçek sebebi, "yeni ve farklı" araştırmalar için verilen iyi bağış kaynaklarıdır. Böyle bir kayma, geride kalanın "denenmiş ve doğru olmadığı" anlamına değil, sadece denenmiş ve doğru olanın araştırma için gereken dolarları getirmediği anlamına gelir. Araştırma sürekli bir hareketlenme yaratmak zorundadır ama bu önceden gelmiş olanın modasının geçtiği anlamına gelmez. Bu yüzden, bundan çok fazla şey çıkarmayın.

Bahsettiğiniz bütün konuları ayrıntılarıyla cevaplamak ayrı bir makale gerektirebilir ama kısaca her birine değineceğim:

  • Programınız çalışmadan hataları yakalayan, güvenliği sağlayan gelişmiş tür sistemleri. Tür kullanan derleme yöntemi sayesinde, daha fazla verimlilik.
  • Aslında, hem CMU projesinden bahsedip hem de bu yorumları yapmanız tuhaf. Common Lisp'ten uzaklaşmadan önce CMU kitlesi, Lisp topluluğunun kanaatine, Common Lisp dilinin tasarımıyla sunulan ve bugün uygulamalarda hala işlenmemiş olan tür çıkarsama açısından muazzam olanakları göstermede başarılıydı. Bu hakikaten bir pazarlama meselesi, dil tasarlama meselesi değil. Gerçek şu ki, diğer diller çok daha fazla tür çıkarsaması yapmalarına rağmen, satıcılar tür çıkarsamanın programcılar ile onların ürünlerinin ticari başarısı arasında olduğuna dair, öyle çok sayıda hata raporları almıyorlar. Zaman içerisinde, zannediyorum çok daha ilginç tür incelemelerinin yapıldığını göreceksiniz ama bu tip bir iş her zaman kullanıcıların diğer ihityaçları ile dengelenir; CORBA, COM, RMI ve KA (Kullanıcı Arayüzü) araç takımları ve ayıklama seçenekleri gibi web arayüzleri. Gözlemlediğim zaman, sık sık yaptığım gibi, dillerin siyasi parti olması derken bunu kasdediyorum. Her biri dünyanın değil, sadece kendi seçmenlerinin ihtiyaçlarına karşılık verirler. Ve Lisp seçmenleri, tür çıkarsaması konusunda ilgisiz olmasa da, bu konuyu bir numaralı öncelik olarak görmezler.

  • Artırılmış modülerlik ve soyutlama.
  • Bu bir hayli çok boyutlu bir alan. Bence Lisp modülerlik ve soyutlama için diğer dillerin sağlamadığı kadar mükemmel olanaklar sunuyor. Ve benim bazen hala istediğim gibi soyutlaştıramadığım şeyler var. Küçük bir eksiklik örneği: Common Lispin CLOS'u, Zetalisp'in New Flavors'ı gibi protokol soyutlaması yapmıyor; diğer şeylerin üstünde, kimse bazı gerçekleştirilmemiş yöntemlerin gerektiğini bildiremiyor. Ama büyük sistemlerin ve Meta-Object Protocol (MOP)ün (Üst Nesne Protokolü) kullanılması ile böyle bir şey eklenebilir. Dahası paket sistemi, benim sıkça arzuladığım kimi çeşit kalıt yeteneğinden yoksun ama ben yakınlarda oturup kendim kullanmak için defpackage'a, kendi araçlarımın kullanabileceği yetenekleri eklediğim sürümler yazdım ve hiç zorluk çekmedim. Genellikle, Common Lisp'in soyutlama yeteneklerinin sınırlarını derin değil, yüzeysel buldum ve sözdizimsel esneklik yeteneklerinin çok daha güçlü olduğunu gördüm.


  • Örüntü eşleştirme.
  • Lisp'in örüntü eşleştirme yapmadığı konusunda sanırım haklısınız 1. Bunun iyi ya da kötü bir şey olup olmadığı özneldir. Sanırım örüntü eşleştirmeyi seven insanlar da var, sevmeyenler de. Tarafsız olmak gerekirse, aslında, kariyerimde örüntü eşleştirmeyi çok aradığım zamanlarda, bunu kendim kolayca gerçekleştirebiliyordum. Ve, önemli olarak, Lisp'in sözdizimsel esnekliği benim yazdığım programlarda, dil tarafından özgün olarak sağlanmış gibi doğal görünen, kişisel gerçekleştirme yapmamı sağladı; çoğu diğer diller bana dile uygun yeni yararlık eklememi sağlayan sözdizimsel denetimi vermiyor. Bu yüzden şahsen, bunu önemli bir eksi olarak görmüyorum; daha çok bunu sizin ve sizin gibi diğerlerinin ihtiyaçlarını karşılayacak bir katmanlı kitaplık yaratma olanağı olarak görüyorum.

  • (Öznel olarak) daha doğal sözdizim.
  • Ben herhangi bir dilin büyük bölümünün doğal sözdizimine sahip olduğunu örneklemenin mümkün olmadığını düşünüyorum. COBOL ve HyperTalk bunun üzerinde çok çalıştı ve onlarla herhangi doğal bir dil arasında büyük bir fark var. Ben şahsen sesli söyleyebileeğiniz simgeler üzerinde odaklanan, bunları gruplamayı belirtmek için en düşük şekilde imleyen Lisp sözdizimini dikkat çekecek derecede doğal buluyorum. Diğer diller epey seçici yollarla kullanılan virgüller, noktalı virgüller, yıldız imi ve parantez çeşitleri gibi özel amaçlı imleçler içeriyorlar. Tüm bunlar demek oluyor ki bu konuda haklısınız: bu konu özneldir. Umarım ben de bunu adilce berabere bitirmişimdir.

15) Matematik Programlamada Lisp
İsimsiz Korkak

Gregory Chaitin'in "The Limits of Mathematics" isimli bir kitabı var. Burada, matematikçilerin Lisp'i sevmesi gerektiğini çünkü Lisp'in temel olarak küme kuramı olduğunu ve tüm matematikçilerin de küme kuramını sevdiğini iddia ediyor. Ben tüm kalbimle bu konuda kendisiyle hemfikirim, şaşırtıcı eksiklik sonuçlarına ne kadar çabuk ve sade varıldığını anlamak için Chaitinin Lisp programlarına bakmak yeterli. Böylece Lisp'in bu tür şeyler için mükemmel olduğunu biliyoruz; matematiksel bir araştırma için. Lisp'in bu kuramları gösteren ve keşfeden yönde devam ettiğini mi düşünüyorsunuz yoksa endüstriye mi kayacak? Yoksa endüstriye kaydı da haberimiz mi yok? NASA ve JPL benzerleri, Lisp ve Scheme'i ciddi bir biçimde kullanıyorlar mı? Eminim öyledir.

KMP:Lisp, matematik (mantık, genel matematik, asal sayılar, vb.) gibi soyut başlıklara ve yapay zekaya hitap etmek için bir yol olarak çıkmış olabilir ama uzun zaman önce ticari uygulamalara geçiş yaptı. Hem Scheme hem de Common Lisp, sizi şaşırtabilecek günlük hayat işleri için kullanılmış ve halen kullanılmakta. Bunların arasında (ki bunlarla sınırlı değil) havayolu tarifelendirmesi, ticari veritabanı idaresi, bilgisayar işletim sistemleri, biyomühendislik, web hizmetleri, belge biçim çevrimi ve, evet, hatta uzay araştırmaları var.Franz, Inc.in Lisp başarı hikayelerinin, bana bu soru için ayrılan yerde benim yapabileceğimden daha iyi, geniş, epey güzel bir sayfası var. Ve NASA/JPLden bahsederken, Lisp'in Java ve C++ ile karşılaştırılması çalışmaları var, bazıları ilginç bulabilir.

16) Bilgisayar Bilimlerinde Scheme
İsimsiz Korkak

Dünyadaki çoğu popüler BB (Bilgisayar Bilimleri) programlarının, öğretim dili olarak Scheme kullandığı görülüyor. Çoğu zaman öğrenciler, C ya da piyasaya uygun bir dil öğrenmeyi tercih ettiklerini söyleyerek, bundan şikayet ediyorlar. Ben de böyleydim ama artık düşüncemin yanlışlığını anladım. Yeni programların Scheme ile belki yazılamayabileceğine fakat Scheme öğrenmenin bir öğrencinin zamanına değeceğine, diğerlerini nasıl ikna ettiniz? Çoğu, okul dışında kullanmayacaklarsa bunu öğrenmemeleri gerektiği konusunda takılıyor. Bunları, parazitler yerine bilgin vatandaşlar yapmak için nasıl ikna edebiliriz?

KMP: Bence bir öğrenciye açıklanması gereken şey dünyanın sürekli değiştiği ve her şeyin aynı anda riske atılamayacağıdır. Buna ilaveten, farklı dillerin ve sistemlerin birlikte çalıştığı modern ortamlar çoğu zaman hiç türdeş değillerdir. Özellikle, iş dünyasındaki bir insanda olmayan zaman lüksüne sahip bir BB öğrencisinin, mümkün olduğu kadar fazla farklı programlama dilleri öğrenmeye zaman ayırması gerektğini düşünüyorum. Bu hem öğrencilerin düşünmek için alternatif yollar açığa çıkarmalarını sağlar, hem de sonradan düşünce tarzlarını veya ifade dillerini hemen değiştirebilmelerine zemin hazırlar. İşe girilince, kullanmayı gerektirdiği zaman yeni bir dili öğrenmek için çoğu zaman vakit ayrılamıyor. Önceden bilmek ve sadece bilgiyi tazelemek daha iyi.

İçinde olup biteni hisseden insan alternatif yaklaşımlar aramaya daha yatkındır; bilinmeyenden, ne kadar yardımı olsa da, çok kolay korkulur. O yüzden hazır imkan varken olabildiğince fazla şey tanıyın. Common Lisp ve Scheme, bu arada ben bunları çok farklı iki dil olarak görüyorum, her öğrencinin çalışmasında mutlaka yer almalıdır. Ama bunlar insanın çalışmalarındaki tek şeyler olmamalıdır. Benzer ya da farklı, profesyonel bir programcının sadece yarın değil, tüm hayatı boyunca gerçekten başarılı olabilmesi için bilmesi gereken çok şey var.

Oliver Wendell Holmes çoğunlukla şu sözleriyle anılır: "Yeni bir fikre genişlemiş bir zeka, asla eski özgün boyutuna dönmez." Bir öğrencinin zekasını genişletmek için, dil çeşitlerinin bir listesini yapmalarını ve mümkün olduğunca farklı çeşitleri öğrenmelerini öneriyorum. Akla gelen bazıları, ki benden farklı deneyimleri olanlar da epey katkıda bulunacaklardır, şunlar:

  • Blok yapılı bir dil; Algol, Pascal veya Scheme gibi.
  • Satır temelli bir dil; Fortran veya BASIC gibi.
  • Kural tabanlı bir mantık dili; Prolog veya EMYCIN gibi.
  • İngilizcemsi bir dil; HyperTalk veya Cobol gibi.
  • Bir yığın işleme dili; PostScript gibi.
  • Bir satır parazit dili (tek harfli işleçlerin çok önemli olduğu); APL veya Teco gibi.
  • Dinamik nesne yönelimli bir dil; Common Lisp veta Smalltalk gibi.
  • Sağlam olarak tür belirlenmiş, statik olarak incelenmiş bir dil; ML veya Haskell gibi.
  • Dinamik olarak tür belirtilen bir fonksiyonel programlama dili; Scheme gibi.
  • Bir dizgi ya da makro işleme dili; Perl, m4, TeX veya Teco gibi.
  • Bir veritabanı erişim dili; SQL gibi.
  • Soyut üst düzey bir assembly dili; Java gibi.
  • Somut üst düzey bir assembly dili; C gibi.
  • Alt düzey, geleneksel bir çevirici dili.
  • Bir betikleme dili; Javascript gibi.
  • Bir arayüz tanımlama dili; Visual Basic, HyperTalk veya Javascript gibi.
  • Bir belge yapılandırma dili; XSL veya TeX gibi.
  • Çağdaş bir hata sistemli bir dil; Common Lisp veya Dylan gibi.
  • Yansıtıcı/içgözlemli bir dil; Common Lisp veya Java gibi.
  • Sembolik bir programlama dili; Common Lisp veya Scheme gibi.
  • Güvenlik yönetimli bir dil; Java veya MOO gibi.
  • Hem program hem de verinin tamamen kalıcı olduğu bir dil; MOO veya HyperTalk gibi.

İnanıyorum ki, eğer insanlar bu dillerin her çeşidinden öğrenmek için gerçekten uğraşırlarsa, Lisp topluluğu bundan payını alacaktır. Ama dahası ben, Lisp topluluğuna gelen insanların diğer topluluklardan fikirleri de beraberlerinde getirmelerini umarım; böylece devamlı ilerleyebilmek için gereken iyi fikirlerden kaçmak yerine onlarla birleşebiliriz.

17) Kent için bir soru
MarkusQ

Alabileceğim bir Maclisp el kitabınız var mı?

KMP Maclisp'e alışık olmayanlar için, Common Lispin tasarımını büyük oranda etkileyen şey ondan önce var olan Lisp'in artık ölü olan lehçesidir.

1980lerde yazılı olarak yayınladığım The Revised Maclisp Manualı webe aktarmaya çalışıyorum. Çıkmak için henüz hazır değil ama çok da uzak olmayan bir zamanda olacak. Muhtemelen bir ya da iki ay. Daha fazla bilgi için maclisp.info sitesini takip edin.

18) Açık Gerçekleştirmeler
Martin Pomije

Gregor Kiczalesin Açık Gerçekleştirmeler fikri hakkında ne düşünüyorsunuz? Sizce onun fikri Lisp'in daha çok kişi tarafından kullanılmasına yardımcı olabilir mi?

Onu bu fikrini anlatırken burada görebilirsiniz: microsoft.com Video bu sitede sadece Windows Media Player biçiminde.

KMP: Gregor Kiczales'in Açık Gerçekleştirmeler üzerine konuşması'nı daha önce görmemiştim, bu yüzden hoşuma gitti. Gösterdiğiniz için teşekkürler!

Bu konuşma bana, uzun zaman çevresinde tartışmalar yapılmış çeşitli benzer fikirleri hatırlattı. Bunların hatırladığım kadarıyla ilki, 1970'lerin sonu veya 1980lerin başında MIT'deki Richard Zippel'in "Capsules" diye bir şey (Sınıfların çoklu gerçekleştirmeleri olmasına izin veren nesne yönetimli bir sistem) üzerindeki kısa bildirisiydi. Çoğu zaman, özellikle bir üniversite ortamında, insanlar böyle bir fikir oluşturur, üzerinde biraz tartışır ve sonra da başka bir şeye geçerler. Çok ilginç fikirler var ve bunlarla, özellikle Gregor gibi itinalı ve yetenekli biri tarafından, ciddi olarak uğraşıldığını gördüğüm için mutluyum.

Somutlaşmış bir çalışma olarak bu "görünüm yönetimli programlama" (Aspect Oriented Programming) konusu bana yeni 2. Bazı eski fikirleri yeni yollarla tekrar kullanıyor ve yenilerini üretiyor. Sadece yüzeysel olarak bu terime aşina oluyorum, bu yüzden açıkçası teorik açıdan konuşamam. Ama gelecek vaat ediyor gibi. Ayrıca uygulanabilirlik bakımından söyleyebilirim ki, The Software Smith'deki danışmanlık bağlantım kanalıyla, her gün iş üzerinde alıştırma yapıyorum. Görünüm yönetimli programlamanın presniplerine uygulamak için, Lisp'i bir araç olarak kullanıyorlar ve epey görülmeye değer sonuçlar alıyorlar.

19) Common Lisp'in döngü yapısı nasıl oluştu?
Jayson

Common Lisp'in döngü yapısı ile ilgili yapabileceğiniz bir şey var mıydı ya da yapabilecek birini biliyor muydunuz? Niçin aynen C dilindeki bir for döngüsü gibi görünüp, o hissi veriyor? (Graham kitabından):

(loop for x = 8 then (/ x 2)
   until (< x 1)
   do (princ x)
)

Bu benim Common Lisp hakkında çokça söylendiğim bir şey ve komitenin ortak yönetiminde neler geçtiğini çok merak ediyorum. Bu sözdizimin en azından temizlenmesi için hiç kimse karşı çıkmadı mı?

KMP: Verdiğiniz örnek epey basite indirgenmiş ve eğer bu LOOP kullanmak için tek sebep olsaydı, bunu kullanmazdık. Lisp'in böyle basit döngüler için birkaç tane yineleme operatörü var. Halbuki, LOOP kullanmak için asıl neden, çok daha karmaşık yineleme yolları ve derleme teknikleri düzenlemelerinin ifade edilebilmesidir. LOOP'un ne kadar gayriLispimtrak göründüğü konusunda hep söylenirdim ama zaman içerisinde inandım ki yararlar maliyeti bastırıyor. Şöyle bir döngünün:

(loop for x from 0
      for y in some-list
      when (good-result? y)
       collect (list x y)
)

yazımı ve bakımı kolaydır ve daha Lispimsi olan şu eşdeğer koda göre çok daha anlaşılırdır:

(do ((x 0 (+ x 1))
     (y-list some-list (cdr y-list))
(result '())
)

   ((null y)
     (nreverse result)
)

(let ((y (first y-list)))
   (when (good-result? y)
     (push (list x y) result)
)
)
)

Common Lisp topluluğu, okunabilirliği geliştirdiği yerlerde, geleneksel Lisp gösterimini önerirler ama gerektiğini öğrendiğimiz durumlarda başka gösterimleri de öneriyoruz. Hangi tarzı kullanacağı seçimini, programcının kişisel beğenisine bırakıyoruz. Common Lisp, bir şeyleri yapmak için tek bir yol öneren ya da insanları ısrarla tek bir programlama modeline zorlamaya çalışan, minimalist bir dil değildir.

Sırası gelmişken, bu ANSI Common Lisp'in tasarım felsefesi ile Scheme'in tasarım felsefesi arasındaki temel bir farktır. Scheme spesifikasyonunun girişinde şöyle denir:

Programlama dilleri özellik üzerine özellik yığarak değil, ilaveleri gerekli kılan zayıflık ve kısıtlamaları kaldırarak tasarlanmalıdır. Scheme gösteriyor ki, bugün kullanılan ana programlama paradigmalarının çoğunu destekleyecek kadar esnek, kullanışlı ve verimli bir programlama dili yaratmak için, ifadeleri oluşturmakta, bunların nasıl yaratıldıklarını kısıtlamadan, gereken çok az sayıda kural yeterli oluyor.

Tersine, ANSI Common Lispi tasarlayan X3J16'nın, X3J13 tüzüğünde şöyle denmiştir:

Varolan tatbikatı kurallaştıracak, kodun muhtelif gerçekleştirmelerde taşınırlığı sağlamak için yeni özellikler ekleyecek ve kuralcı Common Lisp programlama tatbikatı oluşturacaktır. Komite Common Lisp'te tanımlanan dilden başlayacaktır: Guy L. Steele Jr.ın (Digital Press, 1984), şu an Common Lisp'in geçerli olan dili. Standardın Common Lisp'ten farklı olması yolunda bir öneri olduğunda: komite bir değişikliğin kabul edilmesinin (ya da edilmemesinin) ilerideki maliyetini ve varolan kodun dönüştürülmesinin maliyetini tartacaktır. Estetik ölçüt ikincil konu olmalıdır.

Diğer bir deyişle, Scheme topluluğu, dil spesifikasyonunun mümkün olduğu kadar estetik ve boyutça az tutmaya yüksek derecede odaklanan, çok tutucu bir topluluktur. Tersine, Common Lisp topluluğu, uyumluluk, taşınırlık ve ticari ihtiyaç gibi daha karmaşık husuları göz önünde bulunduran bir endüstriyel standarttır. Common Lisp topluluğu estetik kaygı taşırken, estetiğin tasarım ölçütü olarak uygulanabilirliğe karşı baskın çıkmasına izin vermez.

Bununla alaksı şudur; Lisp dili ailesi temel fikirleri paylaşan daha küçük topluluklardan oluşmuştur ama gerçekten çok aykırı görüşleri vardır. Bunların her biri kendi hakkında çalışılmaya değerdir. Scheme'e bakıp da, Common Lisp için iyi bir sezgiye sahip olacağınızı (ya da tersini) düşünmemelisiniz.

1: (ÇN) Uzunca bir süredir Common Lisp için bir hayli güçlü bir örüntü eşleştirme (pattern matching) kitaplığı mevcut: CL-PPCRE isimli kitaplık Perl uyumlu düzenli ifade kalıplarını en az Perl kadar ve zaman zaman daha hızlı çalıştırıyor. Sistemi geliştiren Lisp programcısı Dr. Edi Weitz CL-PPCRE kullanarak bir de görsel RegEx düzenleyici ve hata ayıklayıcı sistemi olan RegEx Coach geliştirmiş durumda (Lisp ile Grafik Kullanıcı Arayüzlü program yazılabiliyor mu, setup.exe şeklinde MS Windows programı yazılabiliyor mu ki diye soranlara net bir cevap aynı zamanda).

2: (ÇN) AspectL isimli sistem Common Lisp geliştirme ortamına "aspect" tabanlı programlamayı getirmiştir.

Not: ileriseviye.org'daki orjinalinde Lisp kodunun biraz daha renkli ve parantez eşlemeli dinamik halini görebilirsiniz. Gecenin bir vakti bu konuda desteğini esirgemeyen ve colorize isimli Lisp programını kullanarak gerekli çıktıları bize ileten değerli FM üyesi BM'ye de teşekkürü borç biliriz.

Görüşler

0
FZ
Dün gece, Türkiye'de bir televizyon kanalında [1] ilk kez Lisp, Common Lisp, Emacs lafları ve hatta görüntüleri, animasyonları geçerken [2, 3] bu yazıyı buraya haber geçmek için uğraşıyor olmam hoş bir tesadüf oldu ;-)


1. http://www.teknolojitelevizyonu.com

2. http://www.teknolojitelevizyonu.com/tech_program.php?bolum=programdetay&progpid=116

3. http://www.fazlamesai.net/modules.php?name=News&file=article&sid=2652
0
FZ
Sanırım artık Lisp meta-muhabbeti yerine doğrudan Lisp kodları ile bir şeyler göstermenin zamanı geldi.

Acaba FM okurları ne tür örnekler görmek ister? Bir fikir vermesi açısından daha önce yayınlanmış bazı Lisp makaleleri, haberleri:

Fonksiyonel Geometri, Lisp, Escher, Postscript: Sanat ve Bilgisayarlar
http://www.fazlamesai.net/modules.php?name=News&file=article&sid=2626

Genişletilebilir Programlama Dilleri: 21. yy. İçin Tahminler
http://www.fazlamesai.net/modules.php?name=News&file=article&sid=2623

Bağlı Listeler, C, Lisp, Scheme...
http://www.fazlamesai.net/modules.php?name=News&file=article&sid=2600

Common Lisp Geliştirme Ortamı Kurulumu
http://www.fazlamesai.net/modules.php?name=News&file=article&sid=2580

Sıradışılıkla Kazanmak - Bir Common Lisp Başarı Öyküsü
http://www.fazlamesai.net/modules.php?name=News&file=article&sid=2511

Kent Pitman Lisp ve ötesi ile ilgili soruları yanıtladı - Bölüm 1
http://www.fazlamesai.net/modules.php?name=News&file=article&sid=2461

Python Paradoksu
http://www.fazlamesai.net/modules.php?name=News&file=article&sid=2330

ID3 - Öğrenen Karar Ağacı
http://www.fazlamesai.net/modules.php?name=News&file=article&sid=1570

`Hacker´lar ve Ressamlar
http://www.fazlamesai.net/modules.php?name=News&file=article&sid=1566

Yüz Yıl Sonraki Programlama Dilleri (ya da Perl vs. Lisp ve Lambda Calculus)
http://www.fazlamesai.net/modules.php?name=News&file=article&sid=1498

Dama Oynayan LISP kodu - Altüst (Minimax) Algoritması
http://www.fazlamesai.net/modules.php?name=News&file=article&sid=1477
0
bm
Soyle soyleyeyim: Common Lisp degisik ve [benim anladigim] Ingilizce bilmeyen Turk bilisimcisine yabanci bir suru kavram ve tarzi beraberinde getiren bir kulturu temsil ettigi icin bu tercume islerine kalkistik. Biraz ufuk acsin, bilisim dunyasinin [70lerden sonra] Unix/C yahut [80'lerden sonra MS], veya [90lardan sonra] Linux'dan ibaret olmadigi bunlarin o kadar ozel degil sadece _yaygin_ oldugunu hissettirip ilgili arkadaslarin aslinda ne kadar harikulade ve cok boyutta muazzam bir umman icinde olduklarini sezdirmek ve heveslendirmek istedik. CL hem benim kolayima geldigi ve hem de genelde anlayanin vakif olmak istedigi; vakif olanin vaz gecemedigi bir dil oldugu icin on plana cikiyor.

Biraz geri besleme alabilirsek belki daha pratige yonelik icerik de uretiriz (yolda baska surprizlerimiz de var). Mesela FZ'yi kandirirken kullandigim, C'de yapilamayacak kadar hizli program yazma oyunlari var:

http://groups-beta.google.com/group/comp.lang.lisp/msg/9f6a68f0c2e20417

Google'dan baktigimda anlasilmadigini gordugum macrolar var.
Genel amaxcli condition sistemi var (yukarida kosul sistemi denen, exception isinin genellesmisi. Mesela exception'in olustugu yere geri donup tamir edip devam etme ozellikleri vs. vs.) Var da var. Ama insanlarin ilgilendiginin haberini sadece dedikoduyla alirsak hangisini once yapacagimiza zor karar veriyoruz. Ilgililer konussunlar biraz lutfen.
Görüş belirtmek için giriş yapın...

İlgili Yazılar

Lisp ile TILSIMLI ve Renkli Programlama: Lisperati

FZ

Tüm zamanların en renkli Common Lisp programlama kılavuzlarından Lisperati artık anadilimizde.

Söz konusu belge İstanbul Bilgi Üniversitesi Bilgisayar Bilimleri Bölümü öğrencisi Seda Çelebican tarafından Türk diline çevrildi. Belgenin Türk kültürüne uyarlanmasında ve genel editörlük işlemlerinde İstanbul Bilgi Üniversitesi eMBA Yazılım Geliştirme ekibinden Emre Sevinç emek harcadı. Bu süreçte çok titiz eleştirileri, geri beslemeleri ile bize yardımcı olan Bilkent Bilgisayar Mühendisliği bölümü öğrencilerinden Hayrettin Gürkök'e ve Lisp konusunda yardımcı olan Bülent Murtezaoğlu'na teşekkürü bir borç biliriz. Belgedeki hatalardan çevirmen ve editör sorumludur. Orjinal belgenin yazarı Dr. Conrad Barski hiçbir maddi hatadan ötürü sorumlu tutulamaz. Belgeyle ilgili tartışma ve her türlü soru için bu haberin altına yorum yazabilir, iletişim kurabilirsiniz.

Lisperati belgesindeki kodları denemek için hiçbir şey kurmanıza gerek yok. Belgede anlatıldığı gibi uzaktaki bir telnet servisine kolayca bağlanıp kodları hemen derleyebilirsiniz ancak bu konularla daha ciddi ilgileniyor ve kendi Lisp ortamınızı kurmak istiyorsanız daha önce FM'de yayınlanan Common Lisp Geliştirme Ortamı Kurulumu kılavuzundan faydalanabilirsiniz.

Güncelleme (2/5/2005): Kılavuzu PDF olarak hazırlayıp Ayhan Barış'a çok teşekkür ederiz.

Core Kaynak Kod Ağacı Yeri Güncellemesi

eevrim

Merhaba,

Core-serveR Common-Lisp repolarının yeri değişti. Lütfen bağlantılarınızı güncelleyiniz.

Tüm kaynak kod ağacı: http://labs.core.gen.tr/repos/

Core-serveR Kurulum Betiği: http://labs.core.gen.tr/repos/core-server-installer-latest.tar.gz

Ünlü Bir Microsoftçunun Lisp Aşkı

FZ

Yazdığı kitaplarla Microsoft ortamlarında programlama yapanların yakından tanıdığı ve davet üzerine bir süredir Microsoft'ta çalışan Don Box, son yazılarından birinde "Scheme Is Love" başlığı ile konuya girmiş ve Scheme'e olan aşkını itiraf etmiş.

eXtreme Programming ve Bir Başarı Öyküsü

FZ

Bill Clementson son blog girdilerinden birinde birkaç gün önce gerçekleştirdikleri etkinlikte sunum yapan ve bir başarı öyküsü aktaran Ken Dickey'e yer vermiş.

Avustralya kökenli başarılı bir start-up olan Memetrics'in öyküsünü çarpıcı bir dille anlatan Dickey, eXtreme Programming metodolojisi ve Common Lisp'ten faydalanarak geliştirdikleri sistemi anlatan güzel bir sunum hazırlamış.

Keskin rekabetten ve gizli silahların gücünden hoşlananlar için incelenesi bir örnek. Afiyet olsun.

Object Persistence ve Lisp - Dabble ve Smalltalk

FZ

Şimşekleri üstüme çekmek pahasına böyle bir başlık atıyor ve diyorum ki Bill Clementson yine yapacağını yapmış ve acayip videolar hazırlamış.

Konu bu aralar pek bir revaçta olan ve "e peki nasıl yapacağız biz bu object persistence, serialization işini?" sorusu ile gündeme gelen konu. Bill Clementson en son gerçekleştirdikleri Vancouver Lisp Kullanıcıları Grubu Toplantısı çerçevesinde AllegroCache ile ilgili bir video hazırlamış.