ctypes هي مكتبة للربط بمكتبات C باستخدام OCaml النقي. الهدف الأساسي هو جعل كتابة ملحقات C واضحة قدر الإمكان.
جوهر ctypes هو مجموعة من المجمعات لوصف بنية أنواع C - الأنواع الرقمية والمصفوفات والمؤشرات والبنيات والاتحادات والوظائف. يمكنك استخدام هذه المجمعات لوصف أنواع الوظائف التي تريد الاتصال بها، ثم ربطها مباشرة بهذه الوظائف - كل ذلك دون كتابة أو إنشاء أي لغة C!
افترض أنك تريد الارتباط بوظائف C التالية:
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 );
باستخدام ctypes يمكنك وصف الواجهات لهذه الوظائف على النحو التالي:
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 )
تحتوي الأسماء المرتبطة بهذا الرمز على الأنواع التي قد تتوقعها:
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
هذا كل ما في الأمر. على عكس الطريقة المعتادة لكتابة امتدادات لغة C، لا توجد وظائف C "كعب روتين" للكتابة، لذلك هناك فرصة أقل بكثير للخطأ.
يحتوي التوثيق وتوزيع المصدر على أمثلة أكثر تعقيدًا، تتضمن البنيات والاتحادات والمصفوفات ووظائف رد الاتصال وما إلى ذلك، ويوضح كيفية إنشاء واستخدام قيم C (مثل مثيلات sigset_t ptr
) في OCaml.
Cstubs_structs
لتحديد تخطيط البيانات بشكل موثوق