it-swarm.dev

F # ve Scala arasındaki en büyük farklar nelerdir?

F # ve Scala her ikisi de geliştiriciyi yalnızca değiştirilemez veri türleri kullanmaya zorlamayan işlevsel programlama dillerindendir. Her iki dil de ML'ye dayalı görünüyor.

F # ve Scala F # .NET için tasarlanmış olmasına rağmen Scala Java = platform?

59
Jonas

Başlıca Farklılıklar:

  • Hem Scala hem de F #, OO tarafından zorunlu programlamayı ve işlevsel programlamayı tek bir dilde birleştirir. Yine de paradigmaların birleştirilmesi konusundaki yaklaşımları oldukça farklıdır. Scala İki paradigmayı bir araya getirmeye çalışır (buna nesne fonksiyonel paradigma diyoruz), F # ise iki paradigmayı yan yana sağlar. Örneğin, F #'daki cebirsel veri türleri, içinde OO'ness bulunmayan tamamen işlevsel yapılardır, oysa Scala içindeki ADT'ler hala normal sınıflar ve nesnelerdir. (Not: CLR bayt koduna derleme sürecinde, F # ADT'ler bile sınıf ve nesne olur, ancak kaynak düzeyinde F # programcısı tarafından görülemez.)

  • F #, tam Hindley-Milner tarzı tür çıkarımına sahiptir. Scala kısmi tür çıkarımına sahiptir. Alt tipleme ve saf OO-ness desteği, Hindley-Milner tarzı tür çıkarımını Scala için imkansız hale getirir.

  • Scala, F # 'dan çok daha minimalist bir dildir. Scala, dil boyunca yeniden kullanılan çok küçük bir dikey yapı kümesine sahiptir. F #, her küçük şey için yeni bir sözdizimi getiriyor gibi görünüyor, böylece Scala ile karşılaştırıldığında çok sözdizimi ağır hale geliyor. (Scala'nın 40 anahtar kelimesi vardır, F # ise 97'dir. Bu size bir şey söylemelidir. :-)

  • Bir Microsoft dili olan F #, Visual Studio biçiminde mükemmel bir IDE desteğine sahiptir. Scala tarafında işler o kadar iyi değil. Eclipse eklentisi hala işaretin üstünde değil. NetBeans eklentisi için de aynı şey geçerli. IDEA şu anda en iyi bahsiniz gibi görünüyor, ancak Java IDE'lerle elde ettiğinize bile yaklaşmıyor. (Emacs hayranları için ENSIME var. Bu paket hakkında çok iyi şeyler duydum, ama henüz denemedim.)

  • Scala, F # 'dan çok daha güçlü (ve karmaşık) bir tip sistemine sahiptir.


Diğer Farklılıklar:

  • F # işlevleri varsayılan olarak curried. Scala'da köri kullanılabilir, ancak çok sık kullanılmaz.

  • Scala'nın sözdizimi Java, Standart ML, Haskell, Erlang ve diğer birçok dilin bir karışımıdır. F # sözdiziminden OCaml, C # ve Haskell'den esinlenilmiştir.

  • Scala daha yüksek çeşit ve tip sınıfları destekler. F # yapmaz.

  • Scala, DSL'lere F # 'den çok daha uygundur.


PS: Hem Scala hem de F # 'ı seviyorum ve gelecekte ilgili platformlarının baskın dilleri haline gelmelerini umuyorum. :-)

61
missingfaktor
  • F # işlevsel yönlere yerleştirilirken scala nesne yönelimli yönlere dayanır).
  • F # daha iyi IDE Visual studio ile destek while Scala'nın Eclipse eklentisi açık kaynak IDE ve nispeten daha yavaştır).
  • F #, Scala'dan daha çok ML gibi, OCaml, Standart ML ve Şema'da olduğu gibi minimal bir lambda hesabı-y hissi veriyor. F # oldukça basit bir dil gibi görünüyor.
9
Ayush Goyal

Küçük ama önemli bir nokta lisanstır: Scala BSD (hemen hemen en izin verilen ücretsiz yazılım lisansı)), F # eskiden "Microsoft Research Shared Source lisans sözleşmesi" idi ama ticari ürün (günümüzde @Lorenzo'ya göre, hiçbir yerde daha spesifik lisans sözleşmeleri bulamadım).

0
Joonas Pulakka