Haskell gerçek dünyada ne için kullanılır? [kapalı]


475

Haskell çevresinde çok fazla hype var, ancak gerçek dünya uygulamalarında nasıl kullanıldığı hakkında bilgi almak zor. Haskell'in en popüler projeleri / kullanımları nelerdir ve neden bu sorunları çözmede mükemmeldir?


56
Hayır, yapmayacağım çünkü bu kesin bir cevap. Görüş ve benzeri için kıpır kıpır oda. Sadece dilin ne için yaratıldığını bilmek istiyorum.
Sergio Tapia


12
@ Papuccino1, bekleyin, ne için yararlı olduğunu veya ne için yaratıldığını bilmek ister misiniz ? İlki, sorunun sorduğu şey ve orada görüş için çok fazla alan var ...
bdonlan

3
@ Papuccino1 - Başlığınızdaki ekstra kelimeler soruya ne fayda sağlıyor? Ayrıca, bu bağlamda "fonksiyonel" teriminin kullanımını yanlış anladığınızı düşünüyorum, ancak bunu söylemek zor.
Chris Lutz

2
Kendi web sitelerine göre birçok şirket farklı amaçlar için kullanıyor ... haskell.org/haskellwiki/Haskell_in_industry
Julian

Yanıtlar:


309

Bu dilin bazı yaygın kullanımları nelerdir?

Hızlı uygulama geliştirme.

"Neden Haskell?" Bilmek istiyorsanız, fonksiyonel programlama dillerinin avantajlarını ( https://c2.com/cgi/wiki?AdvantagesOfFunctionalProgramming adresinden alınmıştır ) düşünmeniz gerekir :

  • Fonksiyonel programlar, ImperativeLanguage meslektaşlarına göre çok daha kısadır. Bu genellikle programcı verimliliğinin artmasına neden olur

  • FP hızlı prototiplemeyi teşvik eder. Bu nedenle, ExtremeProgrammers için en iyi yazılım tasarımı paradigması olduğunu düşünüyorum ... ama ne biliyorum?

  • FP, ObjectOrientedProgramming'in farklı bileşenlerin boyutunda modüler olduğu işlevsellik boyutunda modülerdir.

  • Kek yapma ve yemek yeteneği. İletileri işleyen karmaşık bir OO sistemi olduğunu düşünün - her bileşen iletiye bağlı olarak durum değişiklikleri yapabilir ve ardından iletiyi bağlantılarının bulunduğu bazı nesnelere yönlendirebilir. Çağrı hiyerarşisinde derin bir nesne mesajın kusurlu olduğuna karar verdiyse, her değişikliği kolayca geri alabilmek çok güzel olmaz mı? Farklı devletlerin geçmişine sahip olmaya ne dersiniz?

  • Sizin için yapılan pek çok temizlik görevi: veri yapılarının yapısını bozmak (PatternMatching), değişken bağlamaları (kapaklı LexicalScope) depolamak, güçlü yazma (TypeInference), GarbageCollection, depolama ayırma, kutulu (işaretçi-değere) veya doğrudan kutulu (doğrudan değer) ) temsil ...

  • Güvenli çoklu kullanım! Değişmez veri yapıları veri yarışı koşullarına tabi değildir ve sonuç olarak kilitlerle korunmaları gerekmez. Mevcut nesneleri yıkıcı bir şekilde değiştirmek yerine her zaman yeni nesneler tahsis ediyorsanız, kilitleme ayırma ve GarbageCollection sisteminde gizlenebilir.

Bunun dışında Haskell'in kendine özgü avantajları vardır:

  • Matematiksel gösterimden esinlenilen açık, sezgisel sözdizimi.
  • Mevcut listelere dayalı bir liste oluşturmak için kavrayışları listeleyin.
  • Lambda ifadeleri: açık adlar vermeden işlevler oluşturun. Bu nedenle büyük formülleri kullanmak daha kolaydır.
  • Haskell tamamen referans olarak şeffaftır . G / Ç kullanan tüm kodlar bu şekilde işaretlenmelidir. Bu şekilde, yan etkileri olan kodu (örn. Ekrana metin koymak) olmadan (hesaplamalar) koddan ayırmanızı önerir.
  • Tembel değerlendirme gerçekten güzel bir özelliktir:
    • Bir şey genellikle hataya neden olsa bile, sonucu kullanmadığınız sürece yine de çalışır. Örneğin, 1 / 0bir listenin ilk öğesi olarak koyabilirsiniz ve yalnızca ikinci öğeyi kullandıysanız da çalışmaya devam eder.
    • Bu sudoku çözücü gibi arama programları yazmak daha kolaydır, çünkü her kombinasyonu aynı anda yüklemez - sadece ilerledikçe üretir. Bunu başka dillerde de yapabilirsiniz, ancak bunu varsayılan olarak yalnızca Haskell yapar .

Aşağıdaki bağlantılara göz atabilirsiniz:


20
Aşağıdaki düşünce genellikle aklımı keser: saf bir dilde, bir işlev aynı parametreleri geçtiğinde her zaman aynı sonucu döndürür. Bu bir garantidir. Bunun aksine zorunlu diller her şeyi "ifadelerin" üzerine inşa eder. Bir ifade herhangi bir garanti ile gelmez (yürütülmesi zaman tüketir ve ısı üretir). Bu yüzden temel zaten titriyor ve üstündeki her şey titriyor. Bana göre bu, haskell öğrenmenin nedenlerinden biriydi.
Martin Drautzburg

8
Bu sorunun sorulmasından ve Go programlama dilinin çıkışından bu yana 6 yıl geçti. Daha zayıf tip bir sisteme sahip olmasına ve genellikle "işlevsel / ML hayranlarına göre" objektif olarak daha düşük "olmasına rağmen, Haskell'in 26 yılında olduğundan 6 yıl içinde daha fazla (ve daha önemli) yazılım göndermeyi başardı. Bunu bir vaka çalışması olarak kastediyorum; işlevsel dilleri geride tutan şeyler açıkça vardır ve bunların hepsi hype ile ilişkilendirilemez.
weberc2

3
Bir noktayı unuttun - Haskell'de kodlama mutlak bir patlama;) Haskell'deki bazı problemlerde elimi denerken çok eğlendim.
J Atkin

8
@MartinDrautzburg Tabii ki ifadeler garantilidir. Ne tür faydalı bir dilin teminatsız ifadeleri vardır? Örneğin C'de x = 5;yürütüldükten sonra xdeğeri içerdiği garanti edilir 5.
user253751

5
@ E4z9 Evet ama C ++ 'da bunun operator =denildiğini garanti ediyor . Ve tanımlamazsanız ne olacağını garanti ederoperator =
user253751

234

Bence bu yazıdaki insanlar hiç işlevsel bir programlama dili kullanmayan herkes için en önemli noktayı kaçırıyor: zihninizi genişletmek. Fonksiyonel programlamaya yeniyseniz Haskell size daha önce hiç düşünmediğiniz şekilde düşünmenizi sağlayacaktır. Sonuç olarak, diğer alanlarda ve diğer dillerde programlamanız gelişir. Ne kadar? Ölçülmesi zor.


2
İPhone kullanıyorum Mac. Haskell nerede kullanılır? Yani kullandığım uygulamalar için veritabanı ve sunucular için Objective-C veya Swift + yazıyorlar. Swift de işlevsel olabilir. Yine nerede kullanıldığı konusunda kafam karıştı
Honey

2
Facebook onunla SPAM algılaması yapıyor: code.facebook.com/posts/745068642270222/…
Alex

25
Farklı bir tonda yazılan bu cevap, Haskell'in, IMO'nun genel amaçlı bir dil yapmadığı bir programcı için harika bir egzersiz olduğunu söylüyor
Passer By

5
Keera Studios'ta Haskell kullanarak iOS ve Android oyunları ve uygulamaları yazıyoruz.
Ivan Perez

1
Buna tamamen katılıyorum. Onlarca yıldır zorunlu dillerde çok sayıda kod yazdım. Haskell'i birkaç aydır araştırıyorum ve daha önce düşünmediğim şeylere aklımı açtı.
Adahus

87

Haskell gibi genel amaçlı bir dilin neye iyi geldiğine dair iyi bir cevap var: genel olarak programlar yazmak.

Pratikte ne için kullanıldığı için, bunu oluşturmak için üç yaklaşımım var:

Grafik, ağ, sistem programlama, veri yapıları, veri tabanları, geliştirme, metin işleme için iyi olduğunu gösterir ...

Ve son olarak, neyin gerçekten güçlü olduğuna dair fikrim:

Umarım bu, herhangi bir özgüllükle cevaplanacaksa, sorunuzun ne kadar geniş olduğuna dair bir fikir verir.


15
Etiket bulutu bozuk
Elliot Cameron

bulutu wordcloud kullanılarak oluşturuldu mu?
Janus Troelsen


18

Gönderen Haskell Wiki :

Haskell, havacılık ve savunma, finans, web girişimleri, donanım tasarım firmaları ve çim biçme makinesi üreticilerine kadar çeşitli ticari kullanım alanlarına sahiptir. Bu sayfa Haskell'in endüstriyel kullanımı ile ilgili kaynakları toplamaktadır.

Wikipedia'ya göre Haskell dili, mevcut işlevsel dillerin, fonksiyonel dil tasarımında gelecekteki araştırmalar için kullanılabilecek ortak bir dilde birleştirilmesi ihtiyacından yaratıldı.

Mevcut amacı gereğinden fazla büyüdüğü ve araştırmadan çok daha fazlası için kullanıldığı mevcut bilgilere dayanmaktadır. Şimdi genel amaçlı fonksiyonel programlama dili olarak kabul edilmektedir.

Kendinize hala "Neden kullanmalıyım?" Diye soruyorsanız, Neden kullanmalısınız? Wiki Giriş bölümü.


13

Haskell genel amaçlı bir programlama dilidir. Başka bir dili kullandığınız her şey için kullanılabilir. Kendi hayal gücünüz dışında hiçbir şeyle sınırlı değilsiniz. Ne için uygun? Hemen hemen her şey. İşlevsel bir dilin mükemmel olmadığı birkaç görev vardır.

Ve evet, ben Dreamincode'dan Rayne. :)

Vikipedi sayfasını okumadığınız takdirde, işlevsel programlamanın Nesne Odaklı programlama bir paradigma gibi bir paradigma olduğunu belirtmek isterim. Sadece bilmiyorsan. Haskell de çalıştığı gibi işlevsel; bu konuda gayet iyi çalışıyor.

Bir dilin Nesneye Yönelik bir dil olmaması, dilin herhangi bir şeyle sınırlı olduğu anlamına gelmez. Haskell genel amaçlı bir programlama dilidir ve Java kadar genel bir amaçtır.


9

Serin bir tane var, facebook PHP kodunu yeniden yazmak için otomatik bir araç oluşturdu. Kaynağı soyut bir sözdizimi ağacına ayrıştırırlar, bazı dönüşümler yaparlar:

if ($f == false) -> if (false == $f)

Nedenini bilmiyorum, ama bu onların özel tarzı gibi görünüyor ve sonra oldukça yazdırıyorlar.

https://github.com/facebook/lex-pass

Küçük etki alanına özgü diller oluşturmak için haskell kullanıyoruz. Büyük miktarda veri işleme. Web Geliştirme. Web örümcekleri. Test uygulamaları. Sistem yönetimi komut dosyaları yazma. Diğer taraflarla iletişim kuran arka uç komut dosyaları. İzleme komut dosyaları (munin ile birlikte iyi çalışan bir DSL'imiz var, uygulamalarınız için doğru monitör kodunun yazılmasını çok daha kolay hale getiriyor.)

Aslında her türlü şey. Matematiksel olarak eğimli iseniz, çok güçlü ve kullanışlı özelliklere sahip sadece günlük bir genel amaçlı dildir.


6
Re: FB tarzı, == önüne yanlış koyarak, sadece tek bir = unutursanız anlamına gelir ve o zaman ortaya çıkan davranış, istenmeyen bir atama işlemi sessizce yapmak ve normal şekilde devam etmek yerine daha açık bir şekilde yanlış olacaktır
Magnus

Bu zekice, o zaman bildiğiniz hata özellikle güç senin derlemek.
Edgar Klerks

@EdgarKlerks, PHP'nin derleme zamanı yoktur. Bu, istisnayı, garip davranışa veya uzak koddaki hatalara yol açmak yerine hatanın olduğu yerde ortaya çıkarmaya zorlar.
dfeuer

falseSolda yazmanın yararını görmeme rağmen , otomatik olarak yapmak için bir araç kullanma noktasını görmüyorum: zaten bir ==operatörünüz varsa, o parçanın lex-pass'ın yakalanması amaçlanıyor ve =bunun yerine bir şeyiniz varsa bunun kasıtlı olarak böyle olup olmadığını söylemenin kesin bir yolu yok.
Jeremy List

1
@JeremyList Belki de kodlama stiline sıkı sıkıya bağlıdırlar. Düzgün biçimlendirilmiş kod daha düzgün biçimlendirilmiş kod yazmaya davet ediyor görebilirsiniz. Sadece vahşi bir tahmin.
Edgar Klerks

6

Gönderen Haskell :

Haskell, katı olmayan anlambilim ve güçlü statik yazarak standartlaştırılmış, genel amaçlı tamamen işlevsel bir programlama dilidir . Bu, isimlendirici Haskell Curry'den almıştır.

Temel olarak Haskell, diğer genel amaçlı dilleri (örneğin C #, Java, C, C ++, vb.) Kullanarak oluşturacağınız hemen hemen her şeyi oluşturmak için kullanılabilir.


5

Örneğin, etkileşimli, gerçek zamanlı HTML5 web uygulamaları geliştirmek için. Bkz Elm Haskell ve Haskell çok şey ödünç hangi sözdizimi uygulanan derleyici hangi.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.