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

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.

Sınırları Geçmek: Haskell ile Fonksiyonel Programlamayı Keşfedin

FZ

Better, Faster, Lighter Java ve Beyond Java kitaplarının yazarı Bruce Tate, Crossing Borders (Sınırları Geçmek) makale dizisinin bu bölümünde Haskell ile fonksiyonel programlamaya giriş yapıyor, bu paradigmayı ve dili iyi bildiği Java ve Ruby gibi geliştirme ortamları ile kıyaslıyor.

FM'de daha önce yayınlanmış Haskell ile ilgili makalelere buradan erişebilirsiniz.

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.

Haskell E-Posta Listesi

aycanirican

Haskell programlama konusunda açtığımız tartışma listesine tüm Haskell programcılarını bekliyoruz.