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