Недавно я играл с OCaml и быстро сделал свою любимую вещь, чтобы проверить, насколько хорошо развита VM/компилятор, и написал рекурсивную программу:
let rec f i =
Printf.eprintf "i = %d\n" i;
f(i+1);;
let () =
f 0;;
Программа работает, как и ожидалось, однако, рекурсия НИКОГДА обрывается, более того, у меня эта программа работала некоторое время (примерно 30 минут), перенаправляя stderr в файл, чтобы не засорять терминал. После проверки файла, я был поражен, когда заметил, что файл был около 7*GB* большой!
Как такое может быть? Разве у OCaml нет ограничений на рекурсию?