Haskell
- Okunuşu
- heskıl
Kısaca
Haskell, tembel değerlendirme kullanan, saf fonksiyonel ve statik tipli bir dildir; anlatımı güçlü tip sistemi ve matematiksel kesinlikteki koduyla bilinir.
Haskell nedir?
Haskell, bir araştırmacı komitesi tarafından tasarlanan ve ilk kez 1990'da tanımlanan, genel amaçlı ve saf fonksiyonel bir programlama dilidir. Adını mantıkçı Haskell Curry'den alır. Dil, Haskell 2010 raporunda standartlaştırılmıştır; uygulamada ise neredeyse tüm kod, birçok isteğe bağlı dil uzantısı ekleyen Glasgow Haskell Compiler'ı (GHC) hedefler.
Haskell'de fonksiyonlar varsayılan olarak saftır: bir fonksiyon, tipi IO tipi aracılığıyla izin vermedikçe değişkenleri değiştiremez ya da girdi ve çıktı işlemi yapamaz. Tembel değerlendirme kullanır; yani ifadeler yalnızca değerlerine gerçekten ihtiyaç duyulduğunda hesaplanır, bu da sonsuz listelerle çalışmak gibi zarif yöntemlere izin verir. Statik tip sistemi çoğu tipi otomatik çıkarır ve tipler arasında paylaşılan davranışı tanımlamak için, diğer dillerdeki arayüzlere benzer biçimde, Eq ve Show gibi tip sınıfları (type classes) kullanır.
Haskell; derleyicilerde ve programlama dili araştırmalarında, finansal sistemlerde, statik analiz araçlarında ve doğruluğun önemli olduğu arka uç servislerinde kullanılır. Bugün ana akım dillerde yaygın olan tip çıkarımı, örüntü eşleme, cebirsel veri tipleri ve eksik değerler için Option benzeri tipler gibi birçok fikir Haskell'de ve akrabalarında olgunlaştırıldı. Haskell yazmak sıkça matematiksel tanımlar yazmaya benzetilir: bir değerin ne olduğunu anlatırsınız, parçaların birbirine uyup uymadığını da derleyici denetler.
Haskell sıklıkla, güçlü tip çıkarımı olan statik tipli fonksiyonel diller olan F# ve OCaml ile kıyaslanır. Temel fark şudur: F# ve OCaml ifadeleri hevesle (eager) değerlendirir ve yan etkilere her yerde izin verir; Haskell ise varsayılan olarak tembeldir ve yan etkileri tip sisteminde izler, bu da onu daha katı ve öğrenmesi daha özgün kılar.
Önemli noktalar
- Haskell saf fonksiyoneldir: yan etkiler,
IOgibi tipler aracılığıyla tip sisteminde izlenir. - Tembel değerlendirme kullanır; değerleri yalnızca gerektiğinde hesaplar.
- Statik tip sistemi çoğu tipi çıkarır ve paylaşılan davranış için tip sınıfları kullanır.
- GHC, neredeyse tüm Haskell kodunda kullanılan derleyicidir.
- Birçok modern dil özelliği Haskell'de ve akrabalarında olgunlaştırıldı.
Örnek
-- A type signature: takes a list of Ints, returns an Int
sumOfSquares :: [Int] -> Int
sumOfSquares xs = sum (map (^ 2) xs)
-- Lazy evaluation: an infinite list, only the needed part is computed
evens :: [Int]
evens = [0, 2 ..]
main :: IO ()
main = do
print (sumOfSquares [1, 2, 3]) -- 14
print (take 5 evens) -- [0,2,4,6,8]Sık sorulan sorular
Haskell neden saf fonksiyonel olarak adlandırılır?
Çünkü sıradan Haskell fonksiyonlarının yan etkisi olamaz. Dosya okumak ya da metin yazdırmak gibi eylemler, çalışma zamanının yürüttüğü IO tipinde değerlerdir; bu yüzden bir fonksiyonun tipi, dış dünyayı etkileyip etkileyemeyeceğini söyler.
Haskell sektörde kullanılıyor mu?
Evet, ancak niş bir tercihtir. Şirketler, güçlü doğruluk garantilerinin öğrenme eğrisine değdiği finansal sistemlerde, derleyicilerde, geliştirici araçlarında ve arka uç servislerinde onu kullanır.
Haskell'de monad nedir?
Monad, olası başarısızlık (Maybe), birden çok sonuç (listeler) ya da girdi ve çıktı (IO) gibi ek bağlam taşıyan hesaplamaları zincirlemek için kullanılan bir örüntüdür. Haskell'in do gösterimi, bu zincirleme adımları okunaklı, ardışık bir tarzda yazmak için bir sözdizimidir.
İlgili sayfalar
- Fonksiyonel programlamaProgramlamanın Temelleri, s. 21Fonksiyonel programlama, paylaşılan verileri değiştirmeyen saf fonksiyonlarla yazılım kurma stilidir; kodu daha öngörülebilir ve test etmesi kolay yapar.
- Saf fonksiyonProgramlamanın Temelleri, s. 47Saf fonksiyon, aynı girdi için her zaman aynı çıktıyı döndüren ve yan etkisi olmayan, yani kendi dışındaki hiçbir şeyi değiştirmeyen fonksiyondur.
- Tür çıkarımıProgramlamanın Temelleri, s. 53Tür çıkarımı, derleyicinin bir değişkenin ya da ifadenin türünü otomatik olarak belirlediği bir özelliktir; her tür bildirimini yazmanız gerekmez.
- DeğişmezlikProgramlamanın Temelleri, s. 11Değişmezlik, bir değerin oluşturulduktan sonra değiştirilememesi demektir; her güncelleme, orijinali yerinde değiştirmek yerine yeni bir değer üretir.
- F#Programlama Dilleri, s. 11F#, .NET için fonksiyonel öncelikli, statik tipli bir dildir; tip çıkarımlı özlü kodu, .NET ekosistemine ve C# kütüphanelerine tam erişimle birleştirir.
- GenericsProgramlamanın Temelleri, s. 23Generics, tam tür güvenliğini korurken birçok veri türüyle çalışan fonksiyonlar, sınıflar ve türler yazmanıza olanak tanıyan bir dil özelliğidir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin