Haskell: Farklı Bir Programlama Dili

0
FZ
Değerli FM üyelerinden roktas'ın bana son yazdıklarını paylaşmadan edemedim.

Konu Haskell programlama dili ile ilgili. Debian'ın saygıdeğer isimlerinden John Goerzen, Free Software Magazin isimli dergide Haskell: A very different language başlıklı güzel ve detaylı bir makale yazmış.
"Lazy evaluation", "type inference", açık olarak döngü yapılarına ihtiyaç duyulmaması, CLOS'takine benzer (ve C++, Java, Ruby, C#, Python'dakinden farklı şekilde) bir OOP paradigmasını benimsemiş olması, metaprogramlama, vb. güçlü özelliklere kısaca değinen Goerzen bu konuları çarpıcı bir üslupla somut birkaç örnek üzerinden açıklıyor.

Haskell Cafe tartışma listesindeki Haskell Lisp'e karşı tartışması da ilgi çekici.

Görüşler

0
ttk
Haskell, ismi gayet garip bir programlama dili.

Haskell Cafe'deki tartışmayı okumaya çalıştım anlayabildiğim kadarı ile bir kısmına baktım.
Lisp'e yapılan başlıca iki tane eleştiri dikkatimi çekti :
    - Recursive işlemlerin güvensizliği, sistem hafızası açısından beklenmedik şekilde problemler çıkarabilmesi. Bunu buradaki Lisp'le ilgili bir yazıdaki tartışmalar arasında Bm de belirtmişti yanlış hatırlamıyorsam bunu. Scheme'de recursion da emniyet sağlanmışken Common Lisp'te bu yokmuş.
    - Özellikle de windows ortamı için ticari amaçlı bir Lisp programı geliştirilmesi gerektiğinde epey yüklü lisans ödemelerinin gerekmesi, Royalty mi ne bir de bu problem.
Bunlara dair aydınlatıcı cevap almamız mümkün mü ? Daha da tartışmaya bakayım diyeceğim ama kafam da zamanım da şu ara dar.
0
FZ
Haskell lafı matematikçi Haskell Curry'den geliyor [0]. Curry diye de bir programlama dili varmış.

Bir ara sanki burada Haskellci arkadaşlar vardı diye hatırlıyorum, Bilkent'ten galiba, şu FP yarışmalarına katılan...

Common Lisp ile ilgili gerçekten detaylı teknik bilgi almak için aslında en iyi yer USENET'teki comp.lang.lisp grubu. (Anket mi yapsak ne, USENET'i duydum diyenler, duydum ama tam anlamadım diyenler, USENET'te yaşıyorum ben zaten kod yazmadığım zamanlarda diyenler).

Wikipedia da fena bir kaynak değil.

Ben bildiğim kadarını söyleyeyim, daha iyi bilen düzeltir beni. Özyineli fonksiyonlar (recursive functions), "tail recursive" yapılabildikleri sürece "stack" problemi yaratmıyorlar [1]. Scheme olarak isimlendirilmiş Lisp türü programlama dilinin tanımında bu işlevsellik de tanımlanmış durumda dolayısı ile Scheme dil tanımına uyduğunu iddia eden implementasyonlar bunu gerçekleştirmek zorunda [2].

Common Lisp'e gelince dilin ANSI standardında bu yok ancak önemli mesele olduğu için CL üreticileri "tail call optimization" özelliğini genellikle uyguluyorlar ve programcı bu optimizasyonu isterse bundan faydalanabiliyor [3]. Dolayısı ile Common Lisp'te bu yokmuş demek gerçeği yansıtmıyor.

Ticari program geliştirmeye gelince bu açıdan da bir sorun olduğunu düşünmüyorum. MS Windows için de bedelsiz CL derleyicileri mevcut. Öte yandan bildiğim kadarı ile ticari CL geliştirme ortamı olan LispWorks [4] yazılım süiti de profesyonel yazılım üreten için pahalı değil ve bir kez ödeme yapılıyor, öyle yüksek lisans bedelleri söz konusu değil. Bildiğim kadarı ile o durum sadece Franz Inc. tarafından üretilen Allegro Common Lisp için geçerli [5].


0. http://en.wikipedia.org/wiki/Haskell_Curry

1. http://en.wikipedia.org/wiki/Tail_recursion

2. http://en.wikipedia.org/wiki/Scheme_programming_language

3. http://en.wikipedia.org/wiki/Common_Lisp

4. http://www.lispworks.com

5. http://www.franz.com/
0
ttk
Cevaplar için teşekkür ederim.
Usenet'e Lisp için en azından şu an için hiç bakmışlığım yok her ne kadar Usenet nedir bilsem de :)
Recursion'da da emniyet, söylediklerinizden ve verdiğiniz kaynaktaki bilgilerden anladığım kadarı ile programcının işi usulüne uygun yapmasına bağlı.
Öğrenecek epey bir şey var desenize :)
0
FZ
Öğrenecek çok şey var, o yüzden kaynak olarak kitapları ve doğru dürüst etkileşimli kaynak olarak da USENET'ti ve freenode'daki #lisp kanalını tavsiye ediyoruz.
0
myavuzselim
Ayrica:
- haskell'in tembel olusu
- haskell'in veri tipleri konusunda cok daha kati olusu (static type checking). O tartismadan hatirladigim kadariyla lisp runtime type checking yapiyormus.
Sadece veri tipleri de degil, sanki cesitli acilardan cok daha kati. Hangi acilar mi? Ben de onu anlamaya calisiyorum, ama su saatte uykulu uykulu kafam calismiyor :)
0
Aruz
Freenode'da hangisi döver diye sorunca bana kızdılar. :)
Görüş belirtmek için giriş yapın...

İlgili Yazılar

Betik Diliyle Monad Kavramını Öğrenin

anonim

Fonksiyonel programlama yapabilmek için önemli bir teknik olan ve Haskell dili sayesinde duymaya başladığımız Monad kavramını evinizde betik diliyle öğrenmek için bir kılavuz.
Monad kullanımı saf fonksiyonel programlama dışında şart olmasa da bu kavramın getirdiği programlama disiplininin öğrenmeye değer olduğu vurgulanıyor. Ufkunuzu biraz daha genişletmek ve ilerde Haskell öğrenirseniz konuya aşina olmak için okuyabilirsiniz.

Gerçek Dünyada Programlama için Haskell: Real World Haskell

FZ

Pratik ve gerçekçi örnekler üzerinden güçlü ve modern Haskell programlama dilini anlatan Real World Haskell kitabının yazılması tamamen bitti. Kitap yakında O'Reilly tarafından basılıp satılacak ancak Internet üzerinden bedelsiz olarak sunulmaya devam edilecek. Kitapla ilgili gelişmeleri blogundan takip edebilirsiniz.

Linspire: Temel işletim sistemi geliştirme işleri için Haskell kullanıyoruz

FZ

Clifford Beshers, 13 Mayıs 2006 tarihli e-posta iletisinde kısaca böyle diyor.

Haskell ile ilgilenmek için bir sebep daha.

Beshers'ın iletisinde dikkati çeken bölümlerden biri ise şöyle:

Frag: Haskell ve Oyun Programlama

FZ

Frag, Haskell programlama dili ile geliştirilmiş üç boyutlu bir FPS tarzı oyun. GPL olarak sunulan oyun fonksiyonel programlama yöntemleri ile nasıl oyun kodlanabileceğine dair bir örnek.

Oyunun web sitesi: http://haskell.org/hawiki/Frag

Bursa'dan Küçük Bir Haskell Dersi

FZ

Bay Bursa, zaman zaman Powered by Ph.D. şakalarına maruz kalan Haskell programlama dilini kullanarak "bakın gerçek hayatta mesela şu işimize yarayacak" dercesine bir CSS "eniyileştirici" (optimizer) örneği vermiş: Factor CSS.