ctypes adalah perpustakaan untuk mengikat ke perpustakaan C menggunakan OCaml murni. Tujuan utamanya adalah membuat penulisan ekstensi C sesederhana mungkin.
Inti dari ctypes adalah sekumpulan kombinator untuk mendeskripsikan struktur tipe C -- tipe numerik, array, pointer, struct, union, dan fungsi. Anda dapat menggunakan kombinator ini untuk mendeskripsikan jenis fungsi yang ingin Anda panggil, lalu mengikat langsung ke fungsi tersebut -- semuanya tanpa menulis atau membuat C!
Misalkan Anda ingin mengikat fungsi C berikut:
int sigemptyset ( sigset_t * set );
int sigfillset ( sigset_t * set );
int sigaddset ( sigset_t * set , int signum );
int sigdelset ( sigset_t * set , int signum );
int sigismember ( const sigset_t * set , int signum );
Dengan menggunakan ctypes Anda dapat mendeskripsikan antarmuka ke fungsi-fungsi ini sebagai berikut:
let sigemptyset = foreign " sigemptyset " (ptr sigset_t @-> returning int )
let sigfillset = foreign " sigfillset " (ptr sigset_t @-> returning int )
let sigaddset = foreign " sigaddset " (ptr sigset_t @-> int @-> returning int )
let sigdelset = foreign " sigdelset " (ptr sigset_t @-> int @-> returning int )
let sigismember = foreign " sigismember " (ptr sigset_t @-> int @-> returning int )
Nama-nama yang terikat oleh kode ini memiliki tipe yang Anda harapkan:
val sigemptyset : sigset_t ptr -> int
val sigfillset : sigset_t ptr -> int
val sigaddset : sigset_t ptr -> int -> int
val sigdelset : sigset_t ptr -> int -> int
val sigismember : sigset_t ptr -> int -> int
Hanya itu saja. Berbeda dengan cara penulisan ekstensi C yang biasa, tidak ada fungsi "stub" C untuk menulisnya, sehingga peluang terjadinya kesalahan jauh lebih kecil.
Dokumentasi dan distribusi sumber berisi contoh yang lebih kompleks, yang melibatkan struct, union, array, fungsi callback, dan sebagainya, serta menunjukkan cara membuat dan menggunakan nilai C (seperti contoh sigset_t ptr
) di OCaml.
Cstubs_structs
untuk menentukan tata letak data dengan andal