Quali sono le maggiori differenze tra F # e Scala?

59

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

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

    
posta Jonas 03.10.2010 - 02:38
fonte

3 risposte

60

Differenze principali:

  • Sia Scala che F # combinano la programmazione imperativa OO e la programmazione funzionale in un'unica lingua. Il loro approccio verso l'unificazione dei paradigmi è tuttavia molto diverso. Scala tenta di fondere i due paradigmi in uno (lo chiamiamo paradigma funzionale-funzionale), mentre F # fornisce i due paradigmi fianco a fianco. Ad esempio, i tipi di dati algebrici in F # sono costrutti puramente funzionali senza OO in essi mentre gli ADT in Scala sono ancora classi e oggetti regolari. (Nota: nel processo di compilazione in codice bytec CLR, anche gli ADT F # diventano classi e oggetti ma non sono visibili al programmatore F # a livello sorgente.)

  • F # ha una deduzione del tipo di stile Hindley-Milner completa. Scala ha inferenza di tipo parziale. Il supporto per sottotipizzazione e puro OO-ness rende impossibile l'inferenza del tipo di stile 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 quindi molto sintattica rispetto a Scala. (Scala ha 40 parole chiave, mentre F # ha 97. Questo dovrebbe dirti qualcosa.: -)

  • F # essendo un linguaggio Microsoft ha un eccellente supporto IDE sotto forma di Visual Studio. Le cose non sono così buone sul lato Scala. Il plug-in di Eclipse non è ancora aggiornato. Lo stesso vale per il plugin NetBeans. IDEA sembra essere la soluzione migliore al momento, anche se non si avvicina nemmeno a ciò che ottieni con gli IDE Java. (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 tipi molto più potente (e complesso) di F #.

Altre differenze:

  • Le funzioni F # sono al curry per impostazione predefinita. In Scala, il currying è disponibile ma non usato molto spesso.

  • La sintassi di Scala è un mix di quello di Java, Standard ML, Haskell, Erlang e molti altri linguaggi. La sintassi F # è ispirata a quelle di OCaml, C # e Haskell.

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

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

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

    
risposta data 15.10.2010 - 20:26
fonte
9
  • F # si basa su aspetti funzionali mentre scala è basata su aspetti orientati agli oggetti.
  • F # ha un migliore supporto IDE con Visual studio mentre il plug-in Eclipse di Scala è per IDE open source e relativamente più lento.
  • F #, essendo più simile a ML rispetto a Scala, ha un minimo di calcolo lambda minimo come OCaml, Standard ML e Scheme. F # sembra essere un linguaggio notevolmente più semplice.
risposta data 13.10.2010 - 19:26
fonte
0

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

    
risposta data 13.10.2010 - 11:44
fonte