Quale lingua è migliore per la programmazione per scopi generici, F # o Haskell? [chiuso]

StackOverflow https://stackoverflow.com/questions/142878

  •  02-07-2019
  •  | 
  •  

Domanda

Attualmente sto imparando Haskell, quale lingua (F # o Haskell) preferisci per programmare applicazioni di uso generale?

Quale pensi sia il linguaggio più forte?

È stato utile?

Soluzione

Preferirei Haskell. HackageDB è una grande raccolta di librerie scritte appositamente per la lingua. Nel caso di F # dovresti usare principalmente librerie che non sono state scritte pensando a un linguaggio funzionale, quindi non saranno così "eleganti" da usare. Ma, ovviamente, dipende in gran parte da quanta programmazione funzionale vuoi fare e dai vincoli del progetto per cui vuoi usarlo. Anche "scopo generale" non significa che dovrebbe essere usato in tutti i casi;)

Altri suggerimenti

Preferisco Haskell.

L'affermazione di Jon Harrop secondo cui Haskell ha strumenti scadenti mi ha fatto riflettere un po ', dato che non sono affatto d'accordo. Penso che il problema qui sia in parte uno di stile di sviluppo. Confrontiamo alcune caratteristiche relative agli strumenti di F # e GHC:

  1. F # ha ampi strumenti visivi e GHC non ne ha. Per me, la mancanza di strumenti visivi è irrilevante: lavoro con vi, una riga di comando Unix e un sistema di compilazione fortemente personalizzato. La mancanza di supporto per il mio stile di sviluppo in F # mi proverebbe molto. D'altra parte, se preferisci lavorare in un ambiente di tipo Visual-Studio, avresti abbastanza l'opinione contraria.

  2. F # e / o .NET ho capito che ha un debugger molto buono. GHC ha solo un debugger limitato che viene eseguito nell'interprete. Non uso un debugger da anni (in gran parte a causa dell'utilizzo dello sviluppo test-driven) e quando lavori principalmente con funzioni pure, come in Haskell, un debugger è molto meno necessario. Quindi per me la mancanza di questo strumento è abbastanza irrilevante.

  3. Biblioteche. Questo dipende principalmente dalle librerie di cui hai bisogno, vero? Molti di quelli buoni non aiutano se quello di cui hai bisogno non c'è, e avere molte librerie mal progettate potrebbe non essere così utile. Haskell ha sicuramente meno librerie di .NET, ma ha una scelta ragionevole e la qualità del design dell'API in molte di esse è molto, molto alta.

Non so come sia l'interfaccia di F # nelle librerie di codici nativi, ma GHC è ottimo per questo, grazie al fantastico FFI. Ho scritto un server DDE di Windows interamente in Haskell (sì, non una riga di C, nemmeno per gestire i callback dalle librerie di Windows C) e ci è voluto molto meno tempo ed era considerevolmente più semplice che fare la stessa cosa in C o C ++. Se hai bisogno di interfacce di codice nativo, Haskell è sicuramente la scelta migliore.

L'imprevedibilità " di utilizzo e prestazioni della memoria è un buon punto. Haskell mi sembra in realtà ragionevolmente prevedibile se sai cosa stai facendo, ma non saprai cosa stai facendo quando inizi, e avrai molto da imparare. F # è molto più simile agli altri linguaggi .NET.

Nel complesso, questa domanda probabilmente dipende più dalla piattaforma che dalla lingua: l'enorme differenza tra il mondo "Unixy" di GHC che genera codice nativo e il "mondo Windowsy" di F # in esecuzione su .NET non è un problema di lingua.

Direi F #, dato che puoi accedere all'intero framework .Net. Tuttavia, è più una questione di biblioteca.

Dipende da cosa vuoi fare:

Haskell è il linguaggio più puramente funzionale dei due.

F # è più un linguaggio ibrido e non puramente funzionale, ma ha un grande set di librerie di classi base che puoi usare per fare cose moderne facilmente su Windows o Mono.

Penso che Jon Harrop abbia un grave inconveniente su Haskell per qualche motivo. Semplicemente non è vero che non viene utilizzato al di fuori del mondo accademico, in realtà è ampiamente utilizzato nell'investment banking e molto più di quanto lo siano F # e OCaml e per buoni motivi. Se desideri una programmazione funzionale al lavoro, impara Haskell in quanto vi sono molti più messaggi pubblicizzati per i programmatori Haskell rispetto a F # o OCaml. Sono sicuro che F # guadagnerà popolarità in quanto ha Microsoft alle spalle e sta iniziando da zero ma al momento Haskell ha un chiaro vantaggio.

Probabilmente 2 o 3 anni fa, OCaml ha guidato il campo in linguaggi funzionali pratici, ma da allora Haskell lo ha superato con più librerie, più funzionalità, prestazioni migliori e un uso commerciale più ampio.

Potresti trovare questo post sul blog di Neil Mitchell informativo:

F # From a Haskell Perspective

Anche i commenti sono illuminanti.

Direi che dipende dal motivo per cui lo stai imparando. Se lo stai facendo per l'esperienza di un linguaggio funzionale puro, scegli Haskell. Ma se hai sicuramente intenzione di usare la lingua per qualcosa di più, F # è la scelta migliore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top