Skip to content

Ctypes

Ctypes — библиотека для написания биндингов к C библиотекам, используя pure OCaml. Избавляет разработчика от сложностей, связанных с рантаймом OCaml.

Имеет разные стратегии работы:

  • Динамическое подключение к shared библиотек посредством libffi;
  • Генерировать stubs из определений (наиболее гибкий и эффективный подход);

Смотрите также

  • Tdl.ml пример использования

Недостатки

Хоть решение и умеет генерировать stubs, она не поддерживает аттрибутов компилятора, вроде noalloc и unboxed. Из-за чего вызовы внешних функций оказываются дороже, чем могли быть.

Дурацкие ошибки

Ctypes_static.IncompleteType

Для решения этой проблемы определите поля стриктуры и сделайте seal.

Пример
ocaml
module Point_color = struct
  let t : point_color structure typ = structure "tdl_point_color"
  and color = uint
  let bg = field t "bg" color
  let fg = field t "fg" color
  let () = seal t
end