it-swarm.it

Quali sono le maggiori differenze tra F # e Scala?

F # e Scala sono entrambi linguaggi di programmazione funzionale che non obbligano lo sviluppatore a utilizzare solo tipi di dati immutabili. Entrambi supportano gli oggetti, possono utilizzare librerie scritte in altre lingue ed eseguire su una macchina virtuale Entrambe le lingue sembrano basate sulla ML.

Quali sono le maggiori differenze tra F # e Scala nonostante il fatto che F # sia progettato per .NET e Scala per Java = piattaforma?

59
Jonas

Differenze principali:

  • Entrambi Scala e F # combinano la programmazione imperativa OO e la programmazione funzionale in una lingua. Il loro approccio all'unificazione dei paradigmi è però molto diverso. Scala cerca di Fondere i due paradigmi in uno (lo chiamiamo paradigma oggetto-funzionale), mentre F # fornisce i due paradigmi fianco a fianco. Ad esempio, tipi di dati algebrici in F # sono costrutti puramente funzionali senza OO'ness in essi, mentre gli ADT in Scala sono ancora classi e oggetti regolari. (Nota: nel processo di compilazione in bytecode CLR, anche gli ADT F # diventano classi e oggetti ma non sono visibili al programmatore F # a livello di sorgente.)

  • F # ha un'inferenza di tipo Hindley-Milner completa. Scala ha un'inferenza di tipo parziale. Il supporto per sottotipi e pure-OO-ness rende impossibile l'inferenza di tipo Hindley-Milner per Scala.

  • Scala è un linguaggio molto più minimalista di F #. Scala ha una serie di costrutti ortogonali molto piccoli che vengono riutilizzati in tutto il linguaggio. F # sembra introdurre una nuova sintassi per ogni piccola cosa, diventando così molto sintassi pesante rispetto a Scala. (Scala ha 40 parole chiave, mentre F # ha 97. Questo dovrebbe dirti qualcosa. :-)

  • F # essendo un linguaggio Microsoft ha un eccellente IDE supporto sotto forma di Visual Studio. Le cose non sono così buone sul lato Scala. Il plugin Eclipse non è ancora lo stesso vale per il plugin NetBeans. IDEA sembra essere la tua scommessa migliore al momento, anche se non si avvicina nemmeno a quello che ottieni con Java IDE. (Per i fan di Emacs, c'è ENSIME. Ho sentito molte cose positive su questo pacchetto, ma non l'ho ancora provato.)

  • Scala ha un sistema di tipo molto più potente (e complesso) di F #.


Altre differenze:

  • Le funzioni F # sono predefinite. A Scala, il curry è disponibile ma non usato molto spesso.

  • La sintassi di Scala è un mix di quella di Java, Standard ML, Haskell, Erlang e molte altre lingue. La sintassi F # è ispirata a quelle di OCaml, C # e Haskell.

  • Scala supporta tipi e tipi di caratteri più alti. F # no.

  • Scala è molto più sensibile ai DSL che a F #.


PS: Adoro entrambi Scala e F #, e spero che diventino lingue predominanti delle rispettive piattaforme in futuro. :-)

61
missingfaktor
  • F # è basato su aspetti funzionali mentre scala si basa su aspetti orientati agli oggetti.
  • F # ha una migliore IDE supporto con Visual Studio while Il plug-in Eclipse di Scala è per open source IDE e relativamente più lento.
  • F #, essendo più simile a ML rispetto a Scala, ha più di un minimo lambda calcolo come lo sono OCaml, Standard ML e Scheme. F # sembra essere un linguaggio notevolmente più semplice.
9
Ayush Goyal

Un piccolo ma importante punto è la licenza: Scala è BSD (praticamente la licenza di software libero più permissiva che ci sia), F # era un "accordo di licenza di Microsoft Research Shared Source" ma è una pubblicità prodotto al giorno d'oggi (secondo @Lorenzo di seguito, anche se non sono riuscito a trovare accordi di licenza più specifici da nessuna parte).

0
Joonas Pulakka