2009-08-21 13 views
17

Ciao, mi piacerebbe prendere un linguaggio FP (è sempre un dolore quando lavori in una posizione che non richiede di imparare molto), e dopo aver fatto qualche ricerca, io ho sentito che Erlang e OCaml sono i due che mi piacerebbe davvero bagnarmi i piedi per i seguenti motivi:Erlang vs OCaml (migliore nicchia per adattarsi)

1) Lavoro principalmente su sistema back-end web server ad alta disponibilità in C++. Ho sentito che Erlang è un'ottima soluzione per la scalabilità e la tolleranza ai guasti. Anche se non penso che la mia attuale compagnia abbia qualche progetto in Erlang, sento che Erlang potrebbe essere una buona lingua per il mio sviluppo di carriera a lungo termine.

2) Ho un collega che è veramente bravo in OCaml, cioè che è veramente bravo in questo (ma non lavora su questo per il suo lavoro quotidiano ora. Conserva diverse librerie). Quindi ho pensato che potrebbe essere una buona risorsa se imparassi OCaml.

I miei interessi sono principalmente su sistemi distribuiti (il mio lavoro attuale è un lavoro di sviluppo midldle-ware) e calcolo ad alte prestazioni (indovina, ho avuto un paio di anni di ricerca sulle scuole di specializzazione, in particolare PDE in applicazioni finanziarie - quindi ho sempre pensato che potrei tornare a fare qualche lavoro di modellazione finanziaria forse qualche tempo dopo)

Qualche suggerimento? Si prega di non suggerire "imparare entrambi", come io non sono così intelligente :-)

Grazie

+0

Sono un programmatore di Erlang e penso che sia "facile" costruire sistemi "reali" in Erlang. Sistemi con buona affidabilità, stabilità, latenza, ecc. Sistemi in grado di gestire molti clienti/clienti e avere ancora una bella architettura semplice e semplice (non saprei comunque di OCaml, quindi li postò solo come commento). –

risposta

6

OCaml è un grande linguaggio - uno dei miei preferiti - ma se il vostro interesse è distribuito sistemi di me Consiglio di andare con Erlang, che è avanti e indietro rispetto agli altri linguaggi di FP per quanto riguarda i sistemi distribuiti (anche se c'è una propaggine di Ocaml chiamata Jocaml che ha alcuni aspetti interessanti).

Ocaml è più debole anche quando si guarda al parallelismo, data la sua architettura di base. Sia Haskell che Clojure hanno storie migliori qui, imho. (Ciò detto: una volta ottenuto un linguaggio FP, sarete in grado di trasferire i principi fondamentali in altri linguaggi abbastanza facilmente, e potrebbero essere utili in futuro. Sia Scala che Clojure potrebbero facilmente introdursi nelle organizzazioni in virtù di JVM.)

2

Vorrei anche considerare F # (specialmente quando VS 2010 è fuori). Imparare una nuova lingua è molto più facile e più conveniente con un IDE piacevole. F # e OCaml sono molto simili, come si può vedere in altri thread SO (ad es here)

3

Se si dispone di un collega che è "veramente buono" con OCaml allora sembra che tu abbia una grande risorsa supponendo che s/è disposto a rispondere alle tue domande. È sempre più facile imparare quando c'è qualcuno a conoscenza che puoi fare domande se ti blocchi.

Sì, è vero che OCaml non ha la migliore storia quando si parla di parallelismo, ma ci sono modi per ottenere il parallelismo in OCaml mappa parallela: http://github.com/kig/preludeml/tree/master). Inoltre, sembra che la concorrenza di Erlang basata sugli attori sia davvero abbastanza facile da duplicare in altre lingue. Forse tu e il tuo collega potreste lavorare a un progetto per sviluppare una libreria di concorrenza basata su attori per OCaml? Questo ti darebbe un bel progetto di apprendimento che tu collaboratore probabilmente troveresti abbastanza interessante per lavorare con te ... inoltre potresti finire per creare qualcosa di utile per l'intera comunità OCaml.

5

Penso che Ocaml sia un ottimo modo per iniziare in FP, ed Erlang non è molto difficile una volta che si hanno i concetti base di FP.

Ma il suggerimento da "aneccodeal" è fantastico - vale a dire., se sei interessato a Ocaml e hai un amico che è già forte in esso, crea con tutti i mezzi una libreria di concorrenza (forse MPI).

Tenere presente, tuttavia, che uno degli ostacoli a rendere concomitante Ocaml è la mancanza di garbage collection simultanea (o così ho letto).