<div dir="ltr"><div>Hello, I have a project which is a programming language ( <a href="http://emilylang.org/" target="_blank">http://emilylang.org/</a> ) and the current interpreter is implemented in ocaml. I want to add a C FFI, and I am looking at ocaml-ctypes, but I am having trouble figuring out how best to use the ocaml-ctypes library given my project's specific needs as a language.</div><div><br></div><div>Basically: ocaml-ctypes seems to take libFFI and recast its operations in terms of ocaml idioms and primitives. This looks great if I am writing an ocaml program. However, my goal is to present an interface to libffi (or something like it) in terms of *Emily* idioms and primitives (Emily being my language) so that I can write an Emily program. This means directly wrapping ocaml-ctypes probably won't work out well (the ocaml idioms ocaml-ctypes uses can't all be directly represented in my language, and they might come across as weird to the language users who are probably not ocaml users).</div><div><br></div><div>My initial thought was that what I probably wanted to do was try to present an interface between the interpreter and interpreted code that closely tracks the programming interface of libffi. Then I could write an in-language library on top of this with a friendlier/more idiomatic interface. (The reason I believe I want the interpreter-interpreted interface to resemble libffi is that I might someday switch from ocaml to another language, and libffi will probably be available in other contexts but ocaml-ctypes will not). Looking over the ctypes code it looked like a "raw" libffi-flavored interface might be possible using ctypes-foreign-base/ctypes_ffi.mli and the function_of_pointer interface, but it looks like this mli is present in the code but not exposed in the opam package.</div><div><br></div><div>What would you recommend in this case?</div><div><br></div><div>Is there a way to access ctypes-foreign-base after all? Is that a reasonable thing to attempt?</div><div><br></div><div>Is there a way to use ocaml-ctypes which at least closely resembles a "trap door" to let a client provide access to libffi directly?</div><div><br></div><div>Is there a library other than ocaml-ctypes which wraps libffi more directly?</div><div><br></div><div>Am I meowing up the wrong tree entirely? :)</div><div><br></div><div>Any advice welcome, thanks.</div></div>