сегодня на rsdn.ru был анонс JoCaml - join calculus поверх ocaml.
я немного поигрался с
jocaml - понравилось очень! одно удовольствие было читать jocaml'вские доки и переписывать erlang'вские примеры. забавно было видеть, как mpi реализуется буквально в две строчки.
и еще - как сказали на том же rsdn - потоки в jocaml "тяжелые".
вот пример того же самого, что
на форуме rsdn писали на хаскелле и эрланге:
let create_countdown n =
def count(n) & tick() = count(n-1)
or count(0) & wait() = reply to wait in
spawn count(n) ;
tick,wait ;;
let nthreads, nticks = 333333,3 ;;
(* jocamlopt *)
(* 10000, 100 = 1sec *)
(* 100000, 10 = 8sec *)
(* 333333, 3 = 28sec, эрланг здесь был ровно в 10 раз быстрей*)
(* 1000000, 1 = 83sec, и здесь*)
let do_tick times = let var = ref 0 in
for i=1 to times do
var := !var + 1
done;;
let tick, stop = create_countdown nthreads;;
print_string "start=";;
print_float (Unix.time());;
print_string "\n";;
for i=1 to nthreads do
spawn begin
do_tick(nticks);
tick();
end;
done;;
stop();;
print_string "end=";;
print_float (Unix.time());
print_string "\n";