Skip to content

Performance

Стоит понимать, что оптимизирующий компилятор OCaml'а хоть и имеет под собой достаточно теории, но всё равно не сравниться с LLVM или GCC.

Документация

Склейка строк

Если вам требуется склеить больше двух строк — не используйте оператор Stdlib.(^). Заместо него используйте модули Format, Printf или подобное.

Пример

ocaml
(* Плохо! *)
let greet name = 
  (* Почему: две аллокации (по одной на каждую склейку) *)
  print_endline @@ "Привет, " ^ name ^ "!"

(* Хорошо *)
let greet name = 
  (* Почему: примерно одна аллокация *)
  Printf.printf "Привет, %s!\n" name

Компилятор никак не сворачивает строковые константы, то есть склейка констант производится в рантайме! Будьте осторожны.

Микрооптимизации

Использование буфера дает явный контроль над выделением памяти.

ocaml
let greet name = 
  let buf = Buffer.create (16 + String.length name) in 
  Buffer.add_string buf "Привет, ";
  Buffer.add_string buf name;
  Buffer.add_string buf "!\n";
  Buffer.output_buffer stdout buf