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