it-swarm-tr.com

Web hizmetleri için Haskell vs Erlang

İşlevsel bir dil kullanarak deneysel bir proje başlatmak istiyorum ve Erlang ve Haskell arasında karar vermeye çalışıyorum ve her ikisinin de gerçekten sevdiğim bazı noktaları var.

Haskell'in güçlü tip sistemini ve saflığını seviyorum. Gerçekten güvenilir kod yazmayı kolaylaştıracak bir his var. Ve Haskell'in gücünün yapmak istediğim şeylerden bazılarını daha kolay hale getireceğini düşünüyorum.

Eksi tarafta, Yesk gibi Haskell'de web işleri yapmak için bazı Çerçevelerin Erlang sayaç parçaları kadar gelişmiş olmadığı hissine kapılıyorum.

Erlang dişlere ve hata toleransına yaklaşımı seviyorum. Erlang'ın ölçeklenebilirliğinin büyük bir artı olabileceğini hissediyorum.

Bu da soruma yol açıyor, hem Haskell hem de Erlang'da web uygulaması arka uçlarını uygulamada insanların deneyimi ne oldu. Haskell'in Erlang'da sahip olduğu hafif iplikleri ve oyuncuları sunması için paketler var mı?

29
Zachary K

Sahip olduğum tek soru, web servisinizin ne yaptığıdır. Web hizmeti gerçekten işlevsel bir sorunsa, Haskell daha uygun olacaktır.

Erlang mutlaka işlevsel bir dil değildir. Devasa paralel sistemler için çok güçlü bir yürütme modeline sahip, prosedürel bir dildir. Telekom endüstrisi için tasarlanmıştır ve kesinlikle web servis taleplerine cevap vermek için mükemmel bir uyum sağlayacaktır.

Prosedürel ve fonksiyonel programlama arasındaki farklara genel bir bakış için bu sayfa * bölümüne bakınız. (Camgöbeği sayfasındaki çirkin siyah için şimdiden özür dileriz).

Web servisiniz desen eşleştirme ve kurallar uygulamak için adil bir miktar yapıyorsa, o zaman Haskell seçimdir. Yalnızca zaten bildiğiniz dillerden çok farklı olmayan ölçeklenebilir bir altyapı istiyorsanız, Erlang'ı seçin.

(* Wayback makinesi ile bağlantı. Orijinal dosya kaldırıldı)

19
Berin Loritsch

Bahsettiğiniz ikisi arasında kesinlikle Haskell akademik, Erlang gerçek hayatta yüksek ölçeklenebilirlik projelerinde kullanılıyor. Web servisleri için bu ikisinden Erlang'ı seçtim.

Ama üçüncü tercihiniz olduğunu söyleyebilirim: Scala , hem Haskell hem de Erlang'dan çok etkilenen bir dil. Twitter veya Oturaklı gibi birinci sınıf web hizmetleri oluşturmak için kullanılır. Hatta Lift , Rails ve Django'dan esinlenilen bir web çerçevesi var) biraz farklı, daha işlevsel bir yaklaşım Foursquare Lift kullanıyor.

10
vartec

Genellikle şunu söylüyorum: "konfor bölgenizden mümkün olduğunca çok şey öğrenin, pratikte hiç kullanmasanız bile sizi daha iyi bir programcı yapar".

Bu durumda, bu muhtemelen Haskell anlamına gelebilir; ama Erlang sadece neredeyse sosyal olarak kabul edilebilir olmakla kalmıyor; ancak ana noktalar (ışık süreçleri, mesaj geçişi, büyük ölçeklenebilirlik) diğer birçok 'pratik' platformda geliyor, bu yüzden öğrenilen dersler daha 'gerçek' iş üzerinde büyük ve acil uygulanabilirliğe sahip.

tavsiyem: eğlence içinse Haskell yapın. eğer eğitim içinse, Erlang'a git.

6
Javier

Haskell (GHC), yeşil iplikler (Erlang'ın 'işlemleri') için hazır desteğe sahiptir. Örneğin forkIO yeni bir yeşil iş parçacığı oluşturur ve iş parçacığı kimliğini döndürür.

forkIO :: IO () -> IO ThreadId

i̇leti geçirme mekanizması paket tarafından uygulanır dağıtılmış işlem ama çok iyi korunmaz.
Haskell'in veri paylaşım mekanizması Erlang'dan farklı. Haskell değişebilir küresel devletler fikrini benimser ve kullanımı güvenli hale getirmek için soyutlamalar ekler. Bunun en iyi örneği TVar ( [~ # ~] t [~ # ~] ransactioal Var etkin) birleştirilebilir atomik işlemleri etkinleştirir.
Haskell ayrıca etkileyici tür sistemini (bağımlı türler), örneğin hizmetçiyi kullanan çok üst düzey web hizmeti kütüphanelerine de sahiptir. REST API'nizi, tür güvenliğini sağlamak için derleme zamanında kullanılabilen tür düzeyinde DSL kullanarak belirtmenize olanak tanır.

Düzenle:
görünüşe göre dağıtılmış kapatma ayrıca staticptr yardımıyla kapatma serileştirme uygular

1
Poscat

Ayrıca düşünebilirsiniz Rust .

  • Tamamen işlevsel değildir, ancak yarı işlevsel bir tarzı teşvik eder
    • Kapaklar
    • Varsayılan olarak değiştirilemezlik
    • Daha işlevsel bir tarzda kod yazmak için makro yazmanıza (veya mevcut topluluk tarafından oluşturulmuş olanları kullanmanıza) izin veren güçlü ve güvenli bir makro sistemi vardır.
  • Her soyutlama seviyesi için kütüphaneler/çerçeveler vardır.
  • Etkin bellek güvenliğine güçlü bir vurgu yapar
  • Güçlü bir tip sistemine sahiptir
  • Her türlü eşzamanlılığı gerçekten kolaylaştırır (tüm güvenlik gereksinimlerini karşıladığınız sürece)
  • Geniş bir aktif topluluğu var
  • Açık kaynaklı (bahsettiğiniz diğerleri gibi)
  • vb.
0
Solomon Ucko