2009-08-19 7 views
11

Con "concurrency" intendo processi leggeri come gli attori di Erlang e GC simultanei che mirano a far funzionare senza problemi tali processi.INRIA sta per aggiungere le primitive di concorrenza a OCaml?

Sarebbe molto bello se INRIA si liberasse di quegli inconvenienti dell'attuale implementazione OCaml per rendere OCaml più preparato per il futuro multicore.

P.S. F # non è quello che sto cercando.

risposta

9

no

non posso essere più conciso, senza riprodurre la sua spiegazione. Parla da solo. Sì, questo è del 2002, ma non l'ho sentito influenzare il problema, e dal testo, non sembra affatto probabile che si tirerebbe indietro da questi obiettivi.

Per gli attuali sviluppi sulla programmazione funzionale simultanea, possibilmente soluzioni MPI (with ocaml bindings) potrebbero essere una soluzione al problema. Ovviamente questo non è il parallelismo della memoria condivisa. C'è anche concurrent ML.

+1

Non sono pronto a scavare negli archivi proprio ora, ma sono sicuro che ci sono stati più recenti thread in cui sono stati espressi sentimenti simili. INRIA è focalizzato sul supporto del linguaggio OCaml così com'è, non spingendo avanti con grandi nuove funzionalità come LWP o un runtime simultaneo. Non è in parte il punto di HLVM di Jon Harrop? –

+0

ocaml4multicore è disponibile (con limitazioni), vedere: http: //www.algo-prog.info/ocmc/web/ – nlucaroni

+1

Vale la pena notare: ciò che M. Leroy ha consegnato quella lezione alla lista OCaml nel 2002, è stato il caso che le macchine SMP non erano così comuni come lo sono oggi. Tuttavia, resta da vedere se aggiungere il parallelismo della memoria condivisa al runtime di OCaml sia un vantaggio rispetto all'approccio più tradizionale all'ottimizzazione per i sistemi SMP: fork/exec e la comunicazione tra processi. Sembra che l'INRIA abbia ancora fatto annunci che la sua mente collettiva sia cambiata. –

2

C'è J&oCaml, che è ...

Objective Caml più (&) la join calculus, cioè OCaml esteso per la programmazione concorrente e distribuita.

+3

Ma anche con JoCaml è necessario chiamare esplicitamente il fork se si desidera utilizzare più core. – aneccodeal

0

Il Thread module nella libreria standard fornisce primitive di concorrenza ed è stato aro e per un bel po '. Esistono anche third parte libraries che forniscono API di concorrenza di livello superiore/diverso.

Ma sembra che tu sia conflating concurrency and parallelism.

OCaml ovviamente non interferisce con il parallelismo. Puoi eseguire OCaml su migliaia o milioni di macchine contemporaneamente. Esistono anche MPI bindings per semplificare la programmazione per i supercomputer massivamente paralleli. Ma l'attuale implementazione di riferimento OCaml non parallelizza automaticamente i programmi concorrenti, che penso sia quello che ti interessa di più.

Potresti essere interessato a Multicore OCaml che fornisce un supporto migliore per il parallelismo della memoria condivisa, come i computer SMP sono diventati abbastanza prevalente negli ultimi vent'anni e sarebbe davvero bello ottimizzarne più facilmente. Sembrano fare progressi lenti ma costanti e cercano di farlo bene.