OCaml a un FFI à interact with C code. Le code de la liaison doit être écrit en C, pas en OCaml (qui n'a pas de représentation directe des valeurs C, alors que C a des représentations des valeurs OCaml). Mon conseil serait:
- Du côté C, décider quelle serait la meilleure interface pour exporter que les programmeurs C voudraient (ou programmeurs Python écriture des liaisons Python à partir de l'interface C)
- Définir un « faible couche -level » sur le côté OCaml qui obtient votre valeur OCaml le plus près possible de la représentation C
- Ecrire des wrappers C pour convertir ce bas niveau de représentation OCaml à votre représentation optimale C
La raison de l'étape (2) est d'avoir l'étape (3) aussi petite que possible. La manipulation des valeurs OCaml à partir du côté C est un peu douloureuse, en particulier vous risquez d'avoir une mauvaise interaction avec le Garbage Collector, ce qui signifie des segfaults - en plus vous n'obtenez aucune sécurité de type. Donc, moins vous devez faire de travail du côté C, mieux c'est.
Il y a quelques projets pour faire un peu de travail d'emballage pour vous. Par exemple, CamlIDL, et je pense que Swig a un certain support pour OCaml. Je n'ai jamais utilisé ceux-ci, cependant, donc je ne peux pas commenter.
Si vous savez à quelle langue de haut niveau vous souhaitez convertir votre interface, il peut y avoir un pont spécialisé qui n'a pas besoin d'un pas C. Par exemple, il existe des bibliothèques qui interagissent directement avec les représentations Python (recherchez Pycaml, ne savez pas comment elles sont testées au combat) ou avec le moteur d'exécution Java (le projet OCamlJava). Une interface C est toujours un pari sûr qui permettra à d'autres personnes de créer des ponts vers leurs propres langues.