İçeriğe atla

Haskell

Haskell
Haskell logosu
Paradigmasıfonksiyonel, tembel/kesin olmayan, modüler
İlk çıkışı1990
TasarımcıSimon Peyton Jones, Lennart Augustsson, Dave Barton, Brian Boutel, Warren Burton, Joseph Fasel, Kevin Hammond, Ralf Hinze, Paul Hudak, John Hughes, Thomas Johnsson, Mark Jones, John Launchbury, Erik Meijer, John Peterson, Alastair Reid, Colin Runciman, Philip Wadler
Kararlı sürümHaskell 2010 (Temmuz 2010 (14 yıl önce) (2010-07))
Test sürümüHaskell 2011
Önemli uygulamalarıGHC, Hugs, NHC, JHC, Yhc, UHC
LehçeleriHelium, Gofer, Hugs, Ωmega
İşletim sistemiÇapraz platform
Olağan dosya uzantıları.hs, .lhs
Web sitesihaskell.org

Haskell, isim babası matematikçi Haskell Curry olan arı işlevsel programlama dilidir. Haskell'i birçok programlama dilinden ayıran özellikleri tembel değerlendirme, monadlar ve tür sınıflarıdır. Haskell, Miranda dilinin semantikleri üzerine kuruludur. Akademide ve endüstride yoğun olarak kullanılmaktadır.

Öğretim, araştırma ve endüstriyel uygulamalar için tasarlanan Haskell, tip güvenli işleç aşırı yüklemesine olanak tanıyan tip sınıfları ve monadik giriş/çıkış (IO) gibi bir dizi programlama dili özelliğine öncülük etmiştir. İsmini mantıkçı Haskell Curry'den almıştır.[1] Haskell'in ana uygulaması Glasgow Haskell Derleyicisidir (GHC).

Haskell'in semantiği tarihsel olarak, ilk Haskell çalışma grubunun çabalarına odaklanmaya hizmet eden Miranda programlama dilinin semantiğine dayanmaktadır.[2] Dilin son resmi spesifikasyonu Temmuz 2010'da yapılırken, GHC'nin gelişimi Haskell'i dil uzantıları yoluyla genişletmeye devam etmektedir.

Özellikler

Haskell tembel değerlendirme, örüntü eşleme, tip sınıfları, tip polimorfizmi özelliklerini barındırır. Fonksiyonlarının yan etkilere sebep olmaması nedeniyle arı işlevsel bir dil olarak bilinir.

Haskell'in birçok gerçeklenimi bulunmaktadır. Bunlar arasında de-facto lider olan Glasgow Haskell Compiler'dır. GHC ve diğer araçlar GHCup yükleyicisi kullanılarak edinilebilir.

Kod örnekleri

Örnek bir Merhaba dünya Haskell kodu:

module Main where

main :: IO ()
main = putStrLn "Merhaba Dünya!"

Haskell'de farklı yaklaşımlarla yazılmış faktöriyel fonksiyonu örnekleri:

-- Tip tanımı (opsiyonel)
factorial :: (Integral a) => a -> a

-- Özyineleme kullanılarak
factorial n | n < 2 = 1
factorial n = n * factorial (n - 1)

-- Özyineleme ve guard kullanılarak
factorial n
  | n < 2     = 1
  | otherwise = n * factorial (n - 1)

-- Örüntü eşleme (Pattern matching) kullanmadan özyineleme kullanarak
factorial n = if n > 0 then n * factorial (n-1) else 1

-- Liste kullanılarak
factorial n = product [1..n]

-- fold kullanılarak (product fonksiyonunu implement ederek)
factorial n = foldl (*) 1 [1..n]

-- Point-free stili ile
factorial = foldr (*) 1 . enumFromTo 1

Bir hızlı sıralama uyarlaması:

quickSort :: Ord a => [a] -> [a]
quickSort []     = []                               -- Boş liste zaten sıralıdır
quickSort (x:xs) = quickSort [a | a <- xs, a < x]   -- Listenin sol tarafını sırala
                   ++ [x] ++                        -- Pivotu iki sıralı liste arasına yerleştir
                   quickSort [a | a <- xs, a >= x]  -- Listenin sağ tarafını sırala

Kaynakça

  1. ^ "A History of Haskell: Being Lazy With Class April 16, 2007" (PDF). 21 Ağustos 2024. 20 Ağustos 2024 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 21 Ağustos 2024.  22. harf sırasında bulunan |başlık= parametresi line feed character içeriyor (yardım)
  2. ^ Edward Kmett, Edward Kmett – Type Classes vs. the World 17 Mart 2016 tarihinde Wayback Machine sitesinde arşivlendi.

Dış bağlantılar

İlgili Araştırma Makaleleri

<span class="mw-page-title-main">C (programlama dili)</span> programlama dili

C, yapısal bir programlama dilidir. Bell Laboratuvarları'nda, Ken Thompson ve Dennis Ritchie tarafından UNIX işletim sistemini geliştirebilmek amacıyla B dilinden türetilmiştir. Geliştirilme tarihi 1972 olmasına rağmen yaygınlaşması Brian Kernighan ve Dennis M. Ritchie tarafından yayımlanan "C Programlama Dili" kitabından sonra hızlanmıştır. Günümüzde neredeyse tüm işletim sistemlerinin yapımında %95'lere varan oranda kullanılmış, hâlen daha sistem, sürücü yazılımı, işletim sistemi modülleri ve hız gereken her yerde kullanılan oldukça yaygın ve sınırları belirsiz oldukça keskin bir dildir. Keskinliği, programcıya sonsuz özgürlüğün yanında çok büyük hatalar yapabilme olanağı sağlamasıdır. Programlamanın gelişim süreciyle beraber programlamanın karmaşıklaşması, gereksinimlerin artması ile uygulama programlarında nesne yönelimliliğin ortaya çıkmasından sonra C programcıları büyük ölçüde nesne yönelimliliği destekleyen C++ diline geçmişlerdir.

<span class="mw-page-title-main">Tam sayı</span> sıfırın sağında bulunan sayılar büyükken solunda bulunan sayılar küçüktür

Tam sayılar, sayılar kümesinde yer alan sıfır (0), pozitif yönde yer alan doğal sayılar ve bunların negatif değerlerinden oluşan negatif sayılardan oluşan sayı kümesidir.

<span class="mw-page-title-main">Doğal sayılar</span> sayma sayıları kümesine 0ın eklenmesiyle oluşan sayılar kümesi

Doğal sayılar, şeklinde sıralanan tam sayılardır ve kimi tanımlamalara göre 0 sayısı da bu kümeye dâhil edilebilir. Aralarında standart ISO 80000-2'nin de bulunduğu bazı tanımlar doğal sayıları 0 ile başlatır ve bu durum negatif olmayan tam sayılar için 0, 1, 2, 3, ... şeklinde bir karşılık bulurken, bazı tanımlamalar 1 ile başlamakta ve bu da pozitif tam sayılar için 1, 2, 3, ... şeklinde bir eşlenik oluşturur. Doğal sayıları sıfır olmadan ele alan metinlerde, sıfırın da dahil edildiği doğal sayılar bazen tam sayılar olarak adlandırılırken diğer bazı metinlerde bu terim, negatif tam sayılar da dahil olmak üzere tam sayılar için kullanılmaktadır. Özellikle ilkokul seviyesindeki eğitimde, doğal sayılar, negatif tam sayıları ve sıfırı dışlamak ve saymanın ayrık yapısını, gerçek sayıların bir karakteristiği olan ölçümün sürekliliğiyle karşıtlık oluşturmak amacıyla sayma sayıları olarak adlandırılabilir.

<span class="mw-page-title-main">GNU Compiler Collection</span>

GNU Compiler Collection, GNU Projesi tarafından üretilen ve çeşitli programlama dillerini destekleyen bir derleyici sistemidir. GCC, GNU araç zincirinin önemli bir parçasıdır. Henüz tamamlanmamış GNU işletim sisteminin resmî derleyicisi olmanın yanı sıra, diğer birçok modern Unix benzeri işletim sistemleri tarafından standart derleyici olarak benimsenmiştir. GCC, çok çeşitli işlemci mimarilerine taşınmış; ticari, perakende ve kapalı kaynak yazılım geliştirme ortamlarında yaygın bir araç olarak konuşlanmıştır. Windows'ta GCC kodlarını derlemek ve çalıştırmak için Cygwin, MinGW ve Tiny C Derleyici (TCC) gibi derleyiciler kullanılabilir.

<span class="mw-page-title-main">C++</span> bir programlama dili

C++, Bjarne Stroustrup tarafından 1979 yılında Bell Laboratuvarları'nda geliştirilmeye başlanmış, C'yi kapsayan ve çok paradigmalı, yaygın olarak kullanılan, genel amaçlı bir programlama dilidir.

<span class="mw-page-title-main">Özyineleme</span>

Özyineleme ya da yinelge, en genel anlamıyla bir yapının yinelenmesidir. Özellikle matematik ve bilgisayar biliminde kullanılır. Bu yapılara yinelgen yapılar denir. Yinelgen bir yapı eğer kendine gönderme yapma özelliğiyle yinelgen ise bu tür yapılara özgöndergeli ya da kendine-göndergeli yapılar denir.

Hamming sayıları ilk kez Richard Hamming tarafından tanımlanmış bir sayı dizisidir. Bunlar pozitif tam sayılar olup çarpanları sadece 2, 3 ve 5'in kuvvetleridir. İlk birkaç Hamming sayısı şunlardır: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, ... Hamming sayıları k-düzgün sayıları denen sayılar kategorisinin bir özel halidir. Bu tür sayıların kdan büyük asal çarpanı yoktur. Dolayısı ile Hamming sayıları da 5-düzgün sayılardır. Hamming sayılarını artan sırada hesaplama algoritmaları Edsger Dijkstra tarafından yaygınlaştırılmıştır.

<span class="mw-page-title-main">Birleştirmeli sıralama</span>

Birleşmeli Sıralama, bilgisayar bilimlerinde derecesinde karmaşıklığa sahip bir sıralama algoritmasıdır. Girdi olarak aldığı diziyi en küçük hale gelene kadar ikili gruplara böler ve karşılaştırma yöntemi kullanarak diziyi sıralar.

Ruby, nesneye yönelik, dinamik, reflektif ve esnek bir programlama dilidir. Ruby dili, Yukihiro Matsumoto tarafından Japonya'da tasarlanmaya ve geliştirilmeye başlanmıştır.

<span class="mw-page-title-main">Hızlı sıralama</span>

Hızlı sıralama, günümüzde yaygın olarak kullanılan bir sıralama algoritmasıdır. Hızlı sıralama algoritması n adet sayıyı, ortalama bir durumda, karmaşıklığıyla, en kötü durumda ise karmaşıklığıyla sıralar. Algoritmanın karmaşıklığı aynı zamanda yapılan karşılaştırma sayısına eşittir.

<span class="mw-page-title-main">Kabuk sıralaması</span>

Shell sıralaması, bilgisayar bilimlerinde kullanılan bir sıralama algoritmasıdır. Eklemeli sıralama algoritmasının aşağıdaki iki gözlem kullanılarak genelleştirilmiş biçimidir:

Matematik biliminde, özellikle yöneylem araştırması uygulamalı dalında, doğrusal programlama problemleri bir doğrusal amaç fonksiyonunun doğrusal eşitlik ve/veya eşitsizlik kısıtlamalarını sağlayacak şekilde optimizasyon yapılmasıdır. Bir optimizasyon modeli eğer sürekli değişkenlere ve tek bir doğrusal amaç fonksiyonuna sahipse ve tüm kısıtlamaları doğrusal eşitlik veya eşitsizliklerden oluşuyorsa, doğrusal (lineer) program olarak adlandırılır. Başka bir deyişle, modelin tek-amaçlı fonksiyonu ve tüm kısıtlamaları, süreklilik gösteren karar değişkenlerinin ağırlıklı toplamlarından oluşmalıdır.

Programlama dili teorisi (PDT), programlama dilleri olarak bilinen biçimsel dillerin ve bunların bireysel özelliklerinin tasarımı, uygulanması, analizi, karakterizasyonu ve sınıflandırılması ile ilgilenen bir bilgisayar bilimleri dalıdır. Matematik, yazılım mühendisliği, dilbilim ve hatta bilişsel bilime bağlı ve onu etkileyen bilgisayar bilimi disiplinine girer. PDT'ye adanmış çok sayıda dergide ve genel bilgisayar bilimi ve mühendisliği yayınlarında yayınlanan sonuçlarla tanınmış bir bilgisayar bilimi dalı ve aktif bir araştırma alanı haline gelmiştir.

<span class="mw-page-title-main">OpenCL</span>

OpenCL,, Apple tarafından 2008 yılında kâr amacı gütmeyen teknoloji şirketleri birliği Khronos Group'a önerilen, kabul gördükten sonra spesifikasyonu pek çok şirketin katkılarıyla hazırlanan heterojen hesaplama platformudur. OpenCL; destekli grafik işlemcileri, genel amaçlı işlemciler ve FPGA ler gibi farklı platformlarda hesaplama yapılmasına olanak sağlar. OpenCL AMD, Intel, NVIDIA ve ARM tarafından desteklenmektedir. Ayrıca OpenCL kullanılarak Sony Playstation cihazlarında kullanılan Cell işlemcilerde de hesaplama yapılabilmektedir.

<span class="mw-page-title-main">MATLAB</span>

MATLAB, çok paradigmalı sayısal hesaplama yazılımı ve dördüncü nesil programlama dilidir. Özel mülk bir programlama dili olan MATLAB, MathWorks tarafından geliştirilmektedir. MATLAB kullanıcıya, matris işleme, fonksiyon ve veri çizme, algoritma uygulama, kullanıcı arayüzü oluşturma, C, C++, Java ve Fortran gibi diğer dillerde yazılmış programlarla arabağlama imkânı tanır.

Swift, Apple tarafından iOS ve macOS platformlarına iOS ve Mac uygulamaları geliştirmek için oluşturulan, derlenerek çalışan güçlü ve kullanımı kolay, nesne yönelimli bir programlama dili.

Dart, ilk kez Google tarafından geliştirilen ve daha sonraları ECMA tarafından standart (ECMA-408) haline getirilen açık kaynaklı ve genel-amaçlı bir programlama dilidir. Dart dili kullanılarak web, sunucu, mobil uygulamalar ve IoT cihazları geliştirilebilir.

<span class="mw-page-title-main">Erlang (programlama dili)</span> programlama dili

Erlang, Ericsson firması tarafından 1986'da Joe Armstrong, Robert Virding ve Mike Williams önderliğinde geliştirilen genel amaçlı (general-purpose), eş zamanlı (concurrent), dinamik, fonksiyonel ve atık toplama (garbage-collected) özelliğine sahip olan bir dildir. Erlang veya alternatifi olan Erlang/OTP şeklinde tanımlamalar da kullanılabilir. Erlang/OTP işleyiş sürecinin bir parçasıdır ve birçok kullanıma hazır komponent/bileşen sunmaktadır. Erlang/OTP bileşenlerinin birçoğu Erlang programlama dili ile yazılmıştır. Erlang/OTP, bunların yanında bir dizi tasarım prensipleri de sunmaktadır.

ML genel amaçlı bir işlevsel programlama dilidir. Lisp'ten esinlenmiş dilde ifadelerin veri tipini otomatik olarak atayan Hindley-Milner sistemi kullanılmıştır. Örüntü eşleme ve atık toplama teknolojilerini de bünyesinde barındıran ML birçok programlama dili araştırmasına kaynaklık etmiş; derleyici tasarımı, otomatik teorem kanıtlama ve program doğrulama uygulamalarında kullanılmıştır.

<span class="mw-page-title-main">Carbon (programlama dili)</span>

Carbon, Google tarafından "C++ Ardıl Dili" olarak oluşturulmuş deneysel bir genel amaçlı programlama dilidir. İlk olarak 2022 yılının Temmuz ayında Carruth Chandler tarafından CppNorth konferansında halka sunuldu. Dil, C++'ın belirlenen çeşitli eksikliklerini düzeltmeyi amaçlar, ancak bunun dışında benzer bir özellik seti de sağlar. Hedeflerinden biri, mevcut C++ kodu ile beraber çift yönlü birlikte çalışabilirliktir. Dil, C++'ın kullandığı ISO sürecinin aksine GitHub üzerinde tasarlanacak ve geliştirilecektir. Dil, Apache Lisansı altında ücretsiz ve açık kaynaklı bir proje olarak geliştirilmiştir.