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