FZ, Perşembe, 6 Ocak 2005 (07:06 TSI) (13078 okuma)
Güncelleme (31 Temmuz 2005): SLIME ile ilgili güzel video adresleri belgenin sonuna eklendi
Şimdiye dek fazlamesai.net sitesinde Lisp ile ilgili bazı belgeler, çeviriler, röportajlar yayınladık*. Yaklaşık 50 yıldır geliştirilen ve hala pek çok yeni dile ilham kaynağı olan Common Lisp ile ilgili çalışmalara başlamak isteyenlerin ilk ihtiyacı olan şey güçlü bir geliştirme ortamı ve sıra bunu anlatmaya geldi!
Bu belgede GNU/Linux sisteminiz üzerine tam teşekküllü, güçlü bir
Common Lisp geliştirme ortamı kurmanız ve ilk
Common Lisp denemenizi yapıp test etmeniz için gerekenler
anlatılacaktır.
Common Lisp'e en iyi destek veren GNU/Linux dağıtımlarından biri olan Debian GNU/Linux esas alınmıştır ancak burada yazılanların hepsini herhangi bir GNU/Linux ya da UNIX uyumlu bir sisteme kurmak mümkündür.
Temel Bileşenlerin Kurulumu
Common Lisp programlarını düzenlemek için kullanabileceğiniz
en güçlü editör Emacs'tır. GNU/Linux üzerinde en yaygın
kullanılan Emacs olan GNU Emacs'ın bilgisayarınızda
kurulu olup olmadığını test etmekle işe başlayalım.
Komut satırında aşağıdaki komutu verdiğinizde:
$ emacs --version
Şuna benzer bir çıktı alıyorsanız sisteminizde
GNU Emacs yüklü demektir:
GNU Emacs 21.3.1
Copyright (C) 2002 Free Software Foundation, Inc.
GNU Emacs comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of Emacs
under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING.
Tabii son sürüm Emacs kullanıyor olmanız şart değil,
dolayısı ile sürüm numarası olarak 20.li bir sayı
görürseniz özel bir şey yapmanıza gerek yok. Ancak eğer
sisteminizde Emacs kurulu değilse ya da son sürümü
istiyorsanız, root yetkilerine sahip olduktan sonra:
Yok eğer XEmacs tercih ediyor ve halihazırda XEmacs kullanıyorsanız
benim bir şey dememe gerek yok zaten. Bu belgeyi yazarken Emacs
ailesine ilk kez merhaba diyecek olan kişiler göz önünde bulundurulmuştur.
# apt-get install emacs21
(ya da komut satırı yerine
Synaptic
gibi bir grafik arayüz kullanarak) diyerek Emacs editörünün son
sürümünü yükleyebilirsiniz.
Common Lisp (ve başka pek çok dilde) programlarken eliniz ayağınız
olacak GNU Emacs editörünü sisteminize kurduktan sonra artık doğrudan Lisp'e
yönelik paketlerin kurulumuna geçebiliriz:
# apt-get install cl-clx-sbcl
Common Lisp ile X Window sistemi arasında bir tür köprü görevi
gören bu paket kurulduktan hemen sonra size iki soru soracaktır.
Kısa Lisp site ismi ve uzun Lisp site ismi. Şimdilik bunların
bizim için önemi yok. Bunlara sisteminizi ve Lisp'i çağrıştıracak
kısa birer isim yazıp geçebilirsiniz. Ardından Lisp'in diğer
dillerle iletişim kurmasını sağlayacak olan
"Universal Foreign Function Interface" paketini kuralım:
# apt-get install cl-uffi
Şimdi sıra geldi Common Lisp sistemimizin en büyük bileşenini
yani Lisp derleyicisini kurmaya. Pek çok farklı Lisp derleyicisi
var ve şimdilik bizim tercihimiz Steel Bank Common Lisp:
# apt-get install sbcl
Internet'ten kurulum yaptığınızı varsayarsak yukarıdaki
komutun Lisp derleyicisini çekip sisteminize kurması birkaç
dakika sürecektir.
Bu işlemden sonra Common Lisp ile karmaşık ve sofistike
grafik uygulamalar
geliştirmenize olanak sağlayan McCLIM paketini, örneklerini ve
belgelerini kuracağız:
# apt-get install cl-mcclim cl-mcclim-doc cl-mcclim-examples
Ve temel bileşenler listesinin bu aşamasında metin işleme
konularında bize yardımcı olacak RegExp yani Düzenli İfadeler
ile ilgili Lisp paketini yükleyelim:
# apt-get install cl-ppcre
Lisp Dokümantasyanu: Hyperspec ve CLTL2
Sağlam bir başvuru kaynağı olmadan, ciddi bir referans
olmadan bir dile tamamiyle hakim olmak mümkün değildir.
Bu kaynak içinde ne kadar çok çapraz bağlantı taşıyorsa
o kadar iyidir. Kaynak ne kadar güzel örnekler sunuyor
ve derinlemesine dili tarif ediyor, dolayısı ile tanımlıyorsa
sizin işinize o kadar çok yarar.
Common Lisp için en önemli iki kaynak Hyperspec ve CLTL2
isimli belgelerdir. "Common Lisp The Language, 2nd edition"
Lisp'e dair bulabileceğiniz en detaylı ve hacimli eser olup
açık olarak Internet'te kamuya sunulmuştur. Hem Hyperspec
referansına hem de CLTL2'ye Internet erişmeniz mümkündür
ancak bunların bilgisayarınızda durmasının bir sakıncası
yoktur, böylece gereksiz yere bantgenişliğimizden de çalmamış
oluruz Lisp çalışırken:
Bu aşamada Debian kullanıcıları biraz şaşırabilir çünkü
Debian paketi gibi görünen cltl ve hyperspec aslında Debian
yazılım deposunda değil farklı bir yerde barındırılmaktadır
dolayısı ile sisteminiz size bu kaynakları Internet çekmeyi
isteyip istemediğinizi sorduğunda şaşırmayın. Evet deyerek
devam edin. Birkaç dakika içinde Lisp ile ilgili en önemli
iki kaynak bilgisayarınıza uygun şekilde kurulmuş olacaktır.
SLIME: Superior Lisp Interaction Mode for Emacs
Sıra geldi Emacs ile Lisp derleyicimiz/yorumlayıcımız SBCL
arasında iletişim kuracak olan SLIME'ı kurmaya. SLIME ile
Emacs'ın gücüne güç katmış olacaksınız Lisp programlama
bağlamında.
Tam teşekküllü bir Common Lisp IDE (Integrated
Development Environment) sistemine sahip olmaya bir
adım daha yaklaşmak için SLIME'ı
resmi web sitesinden
tar.gz dosyası olarak
çekebileceğiniz gibi eğer son sürüm kullanmayı sevenlerdenseniz
SLIME geliştiricilerinin en son sundukları paketi CVS'ten
çekebilirsiniz kolayca. Bu arada, artık apt-get ile işimiz
kalmadığı için root kullanıcısı olmaktan çıkabilir ve normal
kullanıcı olarak devam edebilirsiniz. Tavsiyem kendi ev
dizininizde olmanız, yani /home/kullanici-ismi dizini:
komutu ile hangi CVS sunucusuna bağlanacağımızı
belirtiyoruz ve ardından:
$ cvs login
her şey yolunda gitti ise SLIME CVS sunucusu bize parola soracaktır.
Parola: anonymous ancak eğer herhangi bir hata mesajı verirse
tekrar deneyin ve ne yazdığınıza dikkat edin. Büyük ihtimalle ikinci
denemede (eğer CVS sunucusunda bir sorun ya da yavaşlık yoksa)
login işlemi gerçekleşir ve sistem size hiçbir mesaj vermeden sizi
tekrar komut satırına döndürür. Artık SLIME'ın son sürümünü
CVS üzerinden çekmeye hazırsınız:
$ cvs checkout slime
Kısa süre içinde ekranda dosya ve dizin isimleri kaymaya
başlar ve ev dizininize slime dizini oluşturulur, gerekli
dosyalar buraya yerleştirilir CVS tarafından. Eğer CVS
ile problem yaşarsanız üzülmeyin, yukarıda da belirttiğim
gibi her zaman için .tar.gz formatındaki dosyayı çekip
açmak sureti ile kullanabilirsiniz.
SLIME'ı çektikten sonra yapmamız gereken küçük bir iki
ayarlama kaldı. Eğer daha önce hiç kullanmadıysanız tüm zamanların
en güçlü editörlerinden birini kullanmak için iyi bir fırsat!
Ev dizininize geçmiştiniz değil mi? Öyleyse:
emacs .emacs
yani .emacs isimli kişisel konfigürasyon dosyamızı Emacs
editörünü kullanarak düzenleyeceğiz. Emacs karşınıza
boş bir .emacs dosyası ile geldiğinde lütfen aşağıdaki satırları
yazın:
kullanıcı-ismi yerine kendi kullanıcı isminizi yani login
olurken, sisteme giriş yaparken kullandığınız ismi yazmayı
ihmal etmeyin!
Şimdi .emacs dosyası içine bir şey yazdığımıza göre
bunu kaydetmekte fayda var. Bunun için C-x C-s
tuş kombinasyonunu kullanacaksınız. Yani bir eliniz Ctrl
tuşuna basılı iken önce x tuşuna ve eliniz yine Ctrl'yi
basılı tutuyorken s tuşuna basacaksınız. Emacs editörün
en alt bölümündeki bilgi alanında size .emacs isimli dosyayı
kaydettiğini söyleyecek.
Bir programa girmek kadar ondan düzgün şekilde çıkmasını
bilmek de önemlidir. Emacs'tan çıkmak için C-x C-c
tuş kombinasyonunu kullanmanız yeterli.
Emacs'tan çıktık ve şimdi tekrar girmemiz gerekiyor ancak
bu sefer herhangi bir dosyayı düzenlemeyeceksiniz. Sadece Emacs'ı
çalıştırmakla yetineceksiniz:
Yukarıdaki ifadenin anlamı şudur: Emacs söz konusu olduğunda
M- ile başlayan ifadeler, söz gelimi M-x ALT tuşu
ile aynı anda basılacak tuşları gösterir, yani misal eliniz
ALT tuşunda iken x tuşuna basacaksınız ve Emacs'in en alt
bölümündeki bilgi satırına dikkat edeceksiniz, M-x yazdığını
ve sizden bir şeyler yazmanızı beklediğini göreceksiniz ve
şimdi slime yazıp ENTER bastığınızda Emacs içinde
bazı dosya isimlerinin akıp gittiğini, arada "... compiling ..."
gibi mesajlar verdiğini göreceksiniz. Aklınızda bulunsun eğer
C- ya da M- şeklindeki Emacs kombinasyonlarında kafanız karışır
yanlışlıkla bir şeylere yol açıp Emacs'i şikayet ederken
ya da kafa karıştırıcı bazı şeyler sorarken bulursanız
tek yapmanız gereken: C-g yani CTRL ve g
tuşlarına basmak, bu içinde bulunduğunuz Emacs komutu durumundan
sizi çıkaracaktır, sonra istediğiniz tuş kombinasyonunu tekrar
deneyebilirsiniza. Eğer .emacs kişisel konfigürasyon dosyanızı
düzenlerken ya da yukarıdaki SBCL paketini kurarken bir hata
yapmadıysanız (oluşmadıysa) bir müddet Emacs'ın içinden SLIME
dosyalarının, yani birtakım Lisp dosyalarının derlendiğini
göreceksiniz. Bir süre işlem bitecek ve SLIME, Emacs ile
entegre olarak çalışmaya hazır hale gelecektir.
Şimdi tekrar Emacs'tan çıkalım. Birkaç paragraf yukarı
bakarsanız Emacs'tan hangi tuş kombinasyonu ile
çıkılacağını hatırlarsınız.
İlk Common Lisp Programımızı Yazmaya Başlıyoruz
Artık ilk Lisp dosyamızı oluşturup ilk Lisp programlama
denemelerimizi yapabiliriz. Bunun için komut satırından
Emacs'a .lisp uzantılı bir dosyayı düzenlemek istediğimizi
söylemek yeterli:
emacs ilk.lisp
Şu anda Emacs penceresi size boş bir ilk.lisp dosyasının
içini gösteriyor olmalı. Örnek bir Lisp programını
yazmadan önce lütfen Emacs'in üst kısmındaki ana menüdeki
Options menüsüne gidin (pekala, tamam, şimdi fare kullanabilirsiniz ;-)
ve o menüden aşağıdaki menü maddelerini fare ile tıklamak
sureti ile işaretleyin sırayla:
Syntax Highlighting
Active Region Highlighting
Paren Match Highlighting
Save Option
Ve tabii slime'ı devreye sokmak için M-x slime yapmayı
ihmal etmiyoruz. Merak etmeyin, slime'ın devreye girmesi
yukarıdaki gibi uzun sürmeyecek, o bir kereliğine olan bir şeydi,
slime artık derlenmiş olduğu için anında karşınıza gelecek. Tabii
bu sizi şaşırtabilir çünkü SLIME devreye girdiğinde bir anda
Emacs'in görünen kısmını ele geçirecek ve siz de belki "e ama
benim ilk.lisp dosyam nereye gitti, ben onu açmıştım az önce
onun içine bir şeyler yazıp deneme yapacaktım" diyeceksiniz. Dosyanız
bir yere gitmedi, Emacs'taki "buffer"lardan birinde duruyor. Yukarıdaki
"Buffer" menüsünü kullanarak ya da daha kolayı C-x b basarak
(DİKKAT! CTRL ile aynı anda x basın ve sonra elinizi klavyeden
çekip b basın) ve ardından ENTER basarak ilk.lisp dosyanızı
düzenlemeye başlayabilirsiniz.
Dosyayı kaydedin (nasıl yapacağınızı hatırlamak için birkaç paragraf
yukarı bakın).
İlk Lisp programınızı derleyip test etmeye hazır mısınız? O halde
C-x C-k tuş kombinasyonunu basın sıra ile. Yukarıdaki SLIME
menüsüne bakacak olursanız bunun "Load and Compile File" işlemine
karşılık geldiğini görürsünüz. Eğer her şey yolunda gitti ise Emacs
penceresi ikiye bölünecektir, yukarıda dosyanız, aşağıda ise Lisp
REPL (Read Evaluate Print Loop) ortamı. Alttaki bölümde dosyanızın
hatasız derlendiğine dair bir mesaj alırsınız ve Lisp sizi
CL-USER>
yazısı ile bekler. Bir nevi Lisp komut satırı gibi düşünebilirsiniz.
Programı test etmeniz için tek yapmaniz gereken CL-USER satırında
*global-degisken* yazıp ENTER basmak, bir satır aşağıda
3 cevabını alıp tekrar Lisp komut satırına döndüyseniz her
şey yolunda demektir. Eğer ikiye bölünmüş pencereler arasında
geçiş yapmak isterseniz yani CL-USER'da iken bir üste çıkmak
Lisp programınızı düzenlemeye devam etmek ya da Lisp programınızı
düzenlerken Lisp komut satırının olduğu diğer pencereye inmek
isterseniz pencereler arası geçiş tuş kombinasyonunu kullanabilirsiniz:
C-x o
Artık Emacs ile nasıl bir Lisp dosyası oluşturabileceğinizi,
SLIME'ı nasıl devreye sokacağınızı ve dosyanızın içine Lisp
programları yazdıktan sonra nasıl derleyip test edebileceğinizi
biliyorsunuz. Tebrikler!
Aşağıda gördüğünüz FLASH video, ne tür şeylerle karşı karşıya olduğunuza
dair kabaca bir fikir vermesi için, deneyimli Lisp programcılarından ve FM üyelerinden BM tarafından hazırlanmıştır. Ackerman fonksiyonu ile oynarken Emacs'ın tuş kombinasyonlarından faydalanıp Lisp'e özgü bazı kıvrak şeyleri nasıl yaptığına (tek harekette imlecin bulunduğu yerden sonra gelen
s-ifadesinin [s-expression] silinmesi gibi) dikkat edin. Emacs'ın otomatik
parantez tamamlama, hizalama, vs. gibi özellikleri de ilginizi çekebilir. Lisp
sözdizimi ile birleştiğinde bu editörün gücünü süreç içinde daha iyi
anlayacaksınız. Tabii önemli olan gördüğünüz kodu anlamanızdan ziyade genel bir izlenime
sahip olmanız.
Emacs ile ilgili en temel bilgileri edinmek için yine Emacs'tan
faydalanabilirsiniz, C-h t ile Emacs öğreticisi
devreye girer ve size Emacs'ı uygulamalı olarak anlatır.
Bu güçlü editörün sadece çok çok basit birkaç temel özelliğine
ve kullanım şekline değindik şimdiye kadar. Emacs'a alıştıktan
sonra editörün içinden çıkmadan Linux komut satırına erişmeniz,
CVS ile kaynak kod kontrol depolarına bağlanıp diğer yazılımcılarla
ortaklaşa ve kontrollü yazılım geliştirmeniz, e-posta yazıp okumanız,
USENET haber gruplarını takip etmeniz, oyun oynamanız, doktora tezinizi
yazmanız, müzik dinlemeniz ve bahçedeki bitkileri sulamanız mümkün.
Peki ya Lisp? Bu yazının amacı başlığından da anlaşılabileceği
gibi Lisp öğretmek değil, Lisp öğrenmeye başlamanız için
gerekli entegre yazılım geliştirme ortamını kurmanız için
size yardımcı olmak. Lisp ile ilgili öğretici belgelerle yakında karşınıza çıkacağız, bizi izlemeye devam edin ;-)
Burada anlatılanları ve çok daha fazlasını görmek, deneyimli bir Lisp programıcısını SLIME'da kıvrak iş yaparken izlemek için lütfen aşağıdaki adreslerde belirtilmiş videoyu çekip izleyin:
Bu Flash anmasyonu isinize yariyorsa daha duzgununu anlasilirini filan da yapatiz. Su anda vaktim yok, ama ses cikartirsaniz vaktim oldugu zaman yaparim.
Hmm... Bu yazıyı okumadan önce kendi çapımda bir LISP ortamı kurmuştum aynı şekilde sbcl, emacs, mcclim vs... kullanarak. Fakat SLIME yerine Debian'da hazır paketi bulunan ilisp'i tercih etmiştim. Acaba bu ikisi arasında ne gibi farklar olduğunu, ilisp yerine SLIME kullanmanın getireceği avantajlar/dezavantajlarını açıklayabilecek biri var mı?
Not: Bu arada uzun zamandır emacs'ta alt ve üst buffer'lar arasında geçiş yapmaya yarayan tuş kombinasyonunu arıyordum. Sayenizde öğrenmiş oldum.
Bu arada bu kadar emacs ve Common Lisp reklamindan sonra 'iyi de bana bunu ogrenecek proje lazim' diyenler icin CLIM+Common Lisp ile yazilmakta olan climacs'in sayfasindaki proje listesine bakmalarini tavsiye ederim. Bence bunlardan iyi bitirme projeleri (lisans icin) yahut OO projeleri cikabilir. CLIM de Common Lisp de buyuk ihtimalle okulda ogretilen seylere pek benzemedigi icin ufkunuz da acilir.
Süper bir yazı olmuş ! Henüz hepsini okuyamamış olsam da Tebrikler :)
Bu arada ne bu böyle gerçekten siteyi Emacsçılar basmış :)
Ben de Emacs Lisp ile yazılmış CEDET projesinin adresini vereyim. Henüz geliştirme aşamasında ben de çok az kullanmama rağmen çok kullanışlı buldum:
http://cedet.sourceforge.net/semantic.shtml
Yalnız Emacs konusunda bir iki söylenti duydum, öncelikle emacs kullananların sol el yüzük parmaklarında ciddi deformasyonlar olduğu (sözkonusu parmak on parmak yazarken x harfini basmak için kullanılır ;) ve başta RMS olmak üzere bütün emacs projesinde çalışanların dünyanın önde gelen klavye üretim firmalarında hisseleri olduğu (x tuşu çok basılmaktan bozuluyor ya) alenen söylenir olmuş.
Ne yapalım derseniz www.vim.org derim ;) Eğer çok hardcore gelirse Cream derim; http://freshmeat.net/projects/cream/
Not: Yeter ama di mi o kadar Emacs dediniz sesimizi çıkartmadık, herşey de bir yere kadar :)
... ve o dedi ki "vi kullanmayı bilenlere, hiçbir Unix'de editör sıkıntısı çekmeyecekleri vadedilmiştir. emacs kullananlara ise ... tetris ?"
Merak ettiğim şey şu: Bu yazıyı okuyan (şöyle bir bakan değil, okuyan) kaç kişi bu yazıdan faydalandı? Yani buradaki kılavuzu kullanarak bir Lisp geliştirme ortamı kurdu? Takıldığı bir yer oldu mu? Ya da tam olarak anlamadığı bir yer?
Bir başka soru: Bu yazıyı ve sonunda verilen diğer Türkçe Lisp makalelerini okuyan kişiler içinde eğer ki Lisp'e heves etmiş olan birileri var ise acaba bundan sonra ne tür bir yazı görmek isterler? Misal:
- Eğlenceli karikatürlerle desteklenmiş ve en temel Common Lisp bilgilerinin kullanılarak geliştirildiği metin tabanlı bir macera oyunu.
- SQL benzeri bir dilin geliştirildiği ve bunun bir tür CD veritabanı kurmak, sorgulamak için kullanıldığı basit bir Common Lisp örneği.
abakana @ Çarşamba, 12 Ocak 2005 (03:22 TSI) (#12053)
Paul Graham' ın Great Hackers adlı seminerini http://www.itconversations.com/shows/detail188.html ' den dinleyebilirsiniz. Bir süre önce sanırım FZ bunun çevirisini yapmıştı.