Skip to content

Eio

Eio — современный основанный на эффектах стек ввода-вывода для OCaml 5. Предлагает эффективный кроссплатформенный API, например, по работе с файловой системой, сетью, интенсивными CPU вычислениями и параллельностью.

Buf_read

Это модуль для разбора буферизованного ввода. Документация.

Неполный разбор

Стандартная функция Buf_read.parse ожидает, что принимаемый ею парсер читает весь поток данный. Если вы хотите прочитать только часть потока, то необходимо самостоятельно реализовать этот функционал.

Пример реализации:

ocaml
let of_flow ~initial_size ~max_size flow =
  let buf = Eio.Buf_read.of_flow flow ~initial_size ~max_size in
  Eio.Buf_read.format_errors parser buf

signed/unsigned integers

ТипЗнаковость
uint8unsigned
uint16unsigned
uint32signed
uint64signed

Почему uint32 и uint64 знаковые, но помечены как unsigned? У автора по этому безумные шизомысли.

Знаковый int8 и int16 своими руками

ocaml
module R = struct
  include Eio.Buf_read

  (* Простой способ, но не самый эффективный. *)

  let int8 = map (Fun.flip String.get_int8 0) (take 1)
  let int16_be = map (Fun.flip String.get_int16_be 0) (take 2)
end