Haskell'den kazanılan bilgi ve becerileri ihraç etmek için en uyumlu, yaygın olarak kullanılan üretim dili nedir?


14

Haskell'i seviyorum, sade ve basit. Haskell üretim yazılımında kullanılırken, gördüğümden özellikle yaygın bir şekilde konuşlandırılmıyor. Üretim projelerinde en benzer ve hala yaygın olarak kullanılan dil nedir, böylece bir kartopunun endüstride benzer şekilde harika bir şey kullanma şansım olabilir mi?

Ayrıca ilk bölümden aynı dil çok sayıda platformda mevcut mu? Değilse, geniş platform dağıtımına sahip en iyi alternatif nedir? Büyük bir sürü veya aile yerine yapılacaklar listeme koymak için tek bir dil istiyorum. Zor kanıtlar bir artı olacaktır.

Yanıtlar:


21

Haskell en çok ML dil ailesiyle ilişkilidir. Bu, elbette OCaml gibi şeyleri değil, aynı zamanda .NET platformundaki F # 'ı da içerir. Bu diller Haskell ile tip sisteminin temelini ve verilerin nasıl kullanıldığını paylaşmaktadır - cebirsel veri türleri, örüntü eşleştirme, tip çıkarımı, vb. Bunlar elbette diğer noktalarda Haskell'den önemli ölçüde farklı olabilir - çoğu ML katı ve saf değildir. başlangıç ​​olarak ve Haskell'in tip sistemlerinde ve dil tasarımında araştırma için bir araç olarak popülerliği, ML tarzı dillerin çoğunun daha az güçlü (ancak anlaşılması daha kolay) tip sistemlere sahip olma eğiliminde olduğu anlamına gelir. Muhtemelen özleyebildiğini söylemek güvenlidirHaskell ile ilgili bazı şeyler, özellikle ilk başta, çoğu Haskell programcısı muhtemelen bir ML'de oldukça hızlı bir şekilde, temel bir şeyler yapma seviyesinde rahat hissedecekti. Haskell ile aynı genel yapıya sahip bir dil istiyorsanız , bir ML en iyi seçimdir.

Scala'nın işlevsel tarafıML geleneğinden de büyük ölçüde yararlanır ve ayrıca Haskell'den tanıdık bazı gelişmiş tip sistem özelliklerinin yanı sıra yukarıdakilere entegre edilmiş daha standart bir OOP sistemi de çeker. ML tarzı dillerde OO daha çok "temel fonksiyonel araçlarla model OO" olarak ele alınma eğilimindeyken, Scala Java tarzı OO'yu yaşıyor ve nefes alıyor. Bu, tahmin edebileceğiniz gibi Java birlikte çalışma için avantajlara sahiptir ve OO programcıları için daha tanıdık bir çalışma ortamı sunar. Bununla birlikte, bir Haskell geçmişinden gelen, Scala'da bir şeyleri karıştırmanın işlevsel deyimleri daha karmaşık hale getirme ve çoğu Java API'sinin kötü tasarlanmış ve gereksiz yere kullanımı zor olma yollarından rahatsız olma olasılığınız daha yüksektir.

Son olarak, dikkate alınması tuhaf görünse de, Clojure'un Haskell ile daha felsefi bir düzeyde ortak noktaları vardır. Clojure'un devlete ve değerlere karşı kimliklere yaklaşımında bulacağınız şeylerin çoğu, Haskell'in tür sistemi aracılığıyla şekillendirdiği şeye çok yakındır. Buna uygun olarak, Clojure, Java birlikte çalışmasını daha küçük bir dereceye vurguluyor ve OOP'de sürükleme konusunda endişelenmiyor, bu nedenle Clojure'un işlevsel programlamaya yaklaşımı, zaten bildiğiniz şeylere en yakın olabilir. Bence bu konuda söylüyorum, bildiğim kadarıyla Clojure, Haskell'in yanı sıra STM uygulaması olan tek dildir.bu basit, etkili ve sadece işe yarıyor. Öte yandan Clojure, Lisp geleneğinden gelmektedir ve ML'den etkilenen dillerde bulunan cebirsel veri türlerine ve desen eşleşmesine önem vermemektedir. Ve elbette bu bir Lisp, ki bu da bazı insanlar için olumsuzdur (nedenini bilmiyorum).

Kendim için konuşurken, fonksiyonel programlama ile ilgili ilk deneyimimin Scheme'de olduğu feragatiyle, muhtemelen Clojure'a yaslanacağım, OCaml muhtemelen ikinci bir seçim.


1
F # 'nin OCaml'den türetilmemişse esinlendiği söylenir. Önceki bir SO sorusu olan F # ve OCaml , bu ilişkinin iyi bir tartışmasını kapsar. .NET tarafındaysanız, F # mükemmel bir seçim olacaktır ve Microsoft artık F # 'ı birinci sınıf bir .NET dili olarak görmektedir. JVM tarafında, Scala'nın endüstriyel kullanım konusunda bir sicili var ve Clojure grafiklerde yükseliyor gibi görünüyor. Şu anda herhangi bir en iyi seçim bilmiyorum, çünkü pazar yeri henüz bu nesne-fonksiyonel alanda net bir kazanan ilan etmedi.
John Tobler

4

Hiç kullanmadım, ama Scala'nın bazen bloglarda veya proje açıklamalarında ortaya çıktığını görüyorum ve Haskell'den önemli kavramlar aldığını düşünüyorum. Scala, JVM'ye kadar derler ve Java ile birlikte çalışabilir.


3

İşlevsel bir alternatif Erlang'dır . Çok eşzamanlı bir dil olsa da, sıralı altküme, işlevsel dillerin özelliklerinin çoğuna sahip, örneğin kapanmalar, değiştirilemez veriler ve desen eşleşmesi gibi saf bir işlevsel dildir. Linux, çeşitli unix'ler, pencereler ve macosx gibi birçok platformda çalışır. Artık JVM'de bir uygulama var, erjang . Kolayca iletişim kurabilir ve diğer dillerle birlikte var olabilir, bu sıklıkla kullanılır.

Ana siteye göz atın .


3

Clojure giderek daha fazla kullanılmaktadır ve yüzeysel düzeyde Haskell gibi görünmese de, biraz daha derine bakarsanız, Haskell'den çok fazla ilham alır ve çok benzer bir işlevsel stili teşvik eder.

Haskell kullanıcılarının tanıdık ve ilgi çekici bulabilecekleri Temel Clojure özellikleri:

  • Çekirdek dil tamamen işlevseldir - yan etkiler mümkün olsa da, belirli yerlerde gömülürler (örn. STM referansları, IO işlevleri, Java birlikte çalışabilirliği)
  • Tüm veri yapıları değişmez ve kalıcıdır
  • Tembellik - büyük ölçüde Clojure'un her yerde tembel dizileriyle elde edildi, bu Haskell kullanıcılarına çok tanıdık gelecek. Sonsuz tembel sekanslar iyidir.
  • Yazılım İşlemsel Bellek - Clojure'da değiştirilebilir durumu ele almanın ana yoludur. Rich Hickey'in Clojure'un kimlik ve devlet yaklaşımını açıkladığı bu mükemmel videoyu izlemeye değer: http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey

Temel farklılıklar (bakış açınıza bağlı olarak olumlu veya olumsuz olabilir):

  • Her ne kadar benim gözlemim, deyimsel Clojure stilinin mümkün olan her yerde saf fonksiyonlar yapıştırmak olduğu gözlemim.
  • Statik yazımdan ziyade dinamik (performans optimizasyonu için isteğe bağlı olarak statik tür ipuçları kullanılabilir)
  • Tüm Java kütüphanesi ekosistemine kolay erişime sahip bir JVM dili - bu bence gerçek dünyanın uygulanabilirliği açısından en büyük avantaj
  • Lisp sözdizimi. Böylece , tüm parantezler aracılığıyla görmeyi öğrenmek zorunda kalmadan , homoikonisitenin tüm faydalarını elde edersiniz :-)

Kişisel bakış açısı: Haskell'i Clojure'dan önce öğrendim ve Haskell'i şıklığı ve matematiksel saflığı nedeniyle sevdim. Clojure çok ilham alır ve Haskell'den birçok iyi özellik ödünç alır, ancak çok daha pragmatik / pratik bir dildir. Özellikle Java kütüphanesi ekosisteminden yararlanabilmenin devasa değerini saydığınızda, "işleri halletmek" için harika bir dildir.


1

Haskell'i seviyorsanız, ancak JVM için kod yapmak zorundaysanız, frege sizin için ilginç olabilir. Haskell 2010'a olabildiğince yakın olacak şekilde tasarlanmıştır, ancak Java kodu üretir.

Tabii ki, frege kendisi "yaygın olarak kullanılan üretim dili" gibi bir şey değildir (yakın zamanda yayınlanmıştır), ama Java kesinlikle.

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.