Çoğu programlama dili, tek bir dil olarak evrimleşir. Python, Java, JavaScript, C++... Yeni sürümler ve standartlar, birden çok uygulama olsa da, aynı dil olarak kalırlar. C ve C++ GCC veya Clang ile derlenebilir, Python CPython veya PyPy ile çalıştırılabilir, aynı JavaScript Firefox ve Chrome'da çalışır, Java programları JVM veya GraalVM'de çalışabilir. Lisp ise böyle değildir. Lisp, bir programlama dili ailesidir. Aynı temel sözdizimini paylaşırlar ancak operatörleri, semantikleri, standart kütüphaneleri ve dil yetenekleri farklılık gösterir. Wikipedia sayfasında 20'den fazla farklı lehçe listelenmiştir. Bu da yeni başlayanlar için seçim yapmayı zorlaştırabilir. Ancak endişelenmeyin: Hangi lehçeyi seçerseniz seçin, Lisp'in temel kavramlarını öğrenecek ve birini öğrendikten sonra diğerine geçmek nispeten kolay olacaktır.
Common Lisp (CL), en olgun ve kapsamlı Lisp lehçesidir. 1994'te ANSI standardı ile resmileştirilmiş, eski okul Lisp olarak kabul edilir. Birden çok uygulaması vardır; en ünlüsü SBCL'dir. SBCL, doğrudan makine koduna derleme yapar, hızlıdır ve açık kaynaktır. İyi yazılmış Common Lisp kodu, C ve Rust ile karşılaştırılabilir performans elde edebilir. Common Lisp, en geniş özellik setini sunar. Örneğin, derleme ve değerlendirme işlemlerini dil içinden yönetmek için COMPILE, LOAD, EVAL, COMPILE-FILE gibi fonksiyonlar barındırır. Ayrıca, DISASSEMBLE ile derlenmiş bir fonksiyonun makine kodunu inceleyebilirsiniz.
Common Lisp'in en güçlü yanlarından biri, condition and restart sistemidir. Çalışma zamanında bir durum oluştuğunda, programı durdurup değişkenleri incelemenize ve ardından işlemi yeniden denemek veya devam etmek gibi seçenekler sunar. Bu, REPL'in çalışan sistemle derinlemesine entegre olması sayesinde mümkündür. Uzak bir sunucuda hata alırsanız, REPL'e bağlanıp canlı süreci inceleyebilirsiniz. Common Lisp, çoklu gönderim ve jenerik fonksiyonlar gibi özellikler sunan gelişmiş bir nesne sistemi olan CLOS'a sahiptir. Dinamik tipli olmasına rağmen, isteğe bağlı tip bildirimleri ile zengin ve ifade gücü yüksek bir tip sistemi vardır.
Common Lisp'in standardizasyonu, dilin kararlı olmasını sağlar. 1994'teki ANSI Common Lisp hala kullanılmaktadır. Bu sayede geriye dönük uyumsuzluk nadirdir; eski kodlar genellikle sorunsuz çalışır. Örneğin, Peter Norvig'in 1991 tarihli PAIP kitabındaki kodların çoğu modern uygulamalarda hâlâ çalışır. Common Lisp, Ruby ve Python gibi dillerdeki uyumsuzluklardan çok daha az etkilenir. Ancak, Common Lisp yeni dillerde yaygın olan bazı kolaylıklardan yoksundur: daha geniş veri yapıları için kısa gösterimler, kalıcı değişmez koleksiyonlar, tembel diziler ve yerleşik genel amaçlı örüntü eşleme gibi. Dil, 1980'lerde mevcut Lisp lehçelerini birleştirerek tasarlandığından, eski sözdizimini ve kalıpları korumuştur.
Detaylar ve Etkileri
Common Lisp'in merkezi bir yönü veya kurumsal sponsoru yoktur. Topluluğu nispeten küçüktür ve çeşitli uygulamalar, projeler ve iletişim kanallarına dağılmıştır. Çoğunlukla dili canlı tutmaya yardımcı olan gönüllülerden oluşur. Rehber ve yardım bulmak biraz zor olabilir: eğitimler genellikle çok basit veya çok ileri düzeydedir ve dokümantasyon her zaman kolay bulunmaz. Yine de, Common Lisp sağlam ve kanıtlanmış bir dildir; büyük ölçekli projeler ve performans kritik uygulamalar için idealdir.
Sonuç ve Değerlendirme
Scheme, Common Lisp'in aksine minimalist ve akademik bir lehçedir. 1970'lerde MIT'de geliştirilmiş, küçük ve temiz bir çekirdek üzerine inşa edilmiştir. Scheme, makrolar, süreklilikler (continuations) ve kuyruk çağrısı optimizasyonu gibi kavramlarıyla bilinir. Özellikle bilgisayar bilimi eğitiminde yaygın olarak kullanılır. Clojure ise modern, fonksiyonel odaklı bir Lisp lehçesidir. Java Virtual Machine (JVM) üzerinde çalışır ve Java kütüphaneleriyle sorunsuz etkileşime girer. Clojure, değişmez veri yapılarını, tembel dizileri ve eşzamanlılık desteğini vurgular. Web geliştirme, veri analizi ve dağıtık sistemlerde popülerdir. Emacs Lisp (Elisp) ise Emacs metin düzenleyicisini genişletmek için kullanılır; Emacs kullanıcıları için vazgeçilmezdir.
Yeni başlayanlar için hangi Lisp lehçesini seçmeli? Cevap, hedeflerinize bağlıdır. Genel amaçlı, sağlam ve kanıtlanmış bir dil arıyorsanız Common Lisp iyi bir seçimdir. Akademik ilgi veya dil tasarımı öğrenmek istiyorsanız Scheme idealdir. Modern, fonksiyonel programlama ve JVM ekosistemi ile entegrasyon istiyorsanız Clojure'u tercih edebilirsiniz. Emacs kullanıcısıysanız, Elisp öğrenmek doğal olacaktır. Hangi lehçeyi seçerseniz seçin, Lisp'in temel kavramları - sembolik ifadeler, makrolar, birinci sınıf fonksiyonlar - size farklı bir programlama düşüncesi kazandıracaktır. Unutmayın: Lisp öğrenmek, yeni bir programlama türü öğrenmektir. Bir lehçeyi öğrendikten sonra diğerine geçmek kolaydır.
Kaynak: scotto.me