2011-03-04 10 views
8

Voglio imparare e usare ML ma ci sono molti compilatori là fuori. Ho bisogno:Apprendimento/utilizzo di ML. Quale sistema dovrei usare?

  • velocità
  • utilizzo della memoria bassa
  • filettatura
  • array mutevoli e tipi di record
  • continuazioni
  • pronti per il codice di produzione
  • facile ffi
  • aggiornati
  • ... aiuto biblioteche ful
  • portatili in una certa misura

non ho bisogno:

  • oggetti
  • GUI supporto
  • per le finestre

Per esempio ho trovato OCaml, OCaml Batteries include e MLton. Qualche consiglio per me quale dovrei scegliere?

+0

Penso OCaml batterie incluse non è una lingua propria, ma una piattaforma di sviluppo OCaml. – phimuemue

risposta

5

Bene per MLton:

  • Velocità
    • Il programma intero optimisa ti dà sicuramente una velocità migliore di OCaml, tuttavia la penalità che servi per ogni ricompilazione può essere abbastanza fastidiosa. Vedere this link per un semplice confronto informale MLton e OCaml
  • Threading
  • array mutevole e tipi di record
  • Continuazioni
  • pronto per il codice di produzione
    • dipende ovviamente le librerie che si utilizzano. Ma la libreria di base è solida, tuttavia MLton ha il proprio additions e pochi altri hanno repository con estensioni elencate here. Tuttavia lo MLton library project contiene un bel codice. Tuttavia, come con molte di queste librerie/estensioni, tendono a fare affidamento su altre estensioni fatte da loro stessi e quindi è difficile usarne solo piccole parti.
  • Facile ffi
    • ForeignFunctionInterface e NoLonger-FFI sono grandi. Ho comunque avuto problemi di velocità con la NL-FFI su basi di codice C di grandi dimensioni, che penso sia dovuto a MLton che non eliminava completamente i tipi di fantasma. Comunque questa è solo una supposizione, avrei potuto fare qualcosa di sbagliato.
  • portatile in una certa misura
+1

Si noti che MLTon, mentre ha "thread", non esegue effettivamente quei thread contemporaneamente. Eseguono tutti in un unico thread del sistema operativo. Pertanto, non si ottengono benefici da più core CPU. –

+0

anche la pagina mlton.org su ocaml ammette che ocaml compila più velocemente di mlton: http://mlton.org/OCaml – johnbakers

9

SML offre un supporto migliore per le continuazioni. Se hai un forte bisogno di continuazioni, è una scelta migliore; OCaml non ha supporto in lingua per loro, ma c'è la libreria Delimcc di Oleg per le continuazioni delimitate; essendo esterno, è probabilmente più lento delle implementazioni di SML. Altrimenti, OCaml sembra avere più trazione in questi giorni, quindi dovresti aspettarti che gli strumenti e le librerie siano leggermente migliori.

Più in generale, SML tende ad essere piuttosto più elegante, mentre OCaml ha alcune funzionalità più avanzate, stranezze e utenti. Per quanto riguarda le prestazioni, sono entrambi buoni.

(vedere this per un confronto sintattica dei frammenti per lo più comuni di entrambe le lingue; di oggetti naturalmente di OCaml e varianti polimorfiche non sono presentati.)

+0

+1 "Altre funzioni avanzate, stranezza e utenti." (e per una risposta generalmente buona) –

+1

Inoltre, @knivil, dovresti sapere che il supporto per il threading di OCaml non supporta i thread di calcolo paralleli in questo momento - esiste un blocco che mantiene più thread in esecuzione in parallelo. I thread OCaml sono ancora abbastanza utili per I/O (i moduli I/O standard rilasciano il blocco del thread quando si blocca per IO) e il codice C o FORTRAN può essere eseguito nel proprio thread mentre viene eseguito un altro codice OCaml.Per il vero parallelismo/concorrenza, ci sono Plasma (mappa distribuita/riduzione), Functional (calcolo parallelo) e OCamlNet 3 dispone di strutture di multiprocessing. –

5

OCaml soddisfa tutti i requisiti dal vostro elenco con l'eccezione di continuazioni . È veloce, efficiente in termini di memoria, portatile, ha associazioni di thread posix e buone librerie per thread cooperativi leggeri. La libreria standard è piuttosto limitata ma ci sono molti third-party libraries.

Ci sono molte aziende che utilizzano OCaml in produzione per tutti i tipi di cose. Alcune delle aziende sono citate nel sito Web Caml consortium.

vi consiglio anche la lettura di alcuni eccellenti relazioni sulle esperienze OCaml:

OCaml at Jane Street Capital

OCaml at XenSource

+2

Userò anche Ocaml, anche se ho scritto codice per MLton nel corso della giornata. Il punto è che SML è il linguaggio elegante e accademico, in cui OCaml è una bestia che ottiene il lavoro in pratica. Quindi dipende da cosa stai cercando di fare. –