我想寫一個OCaml庫,它將被其他編程語言(如C或Python)使用。OCaml庫的綁定和反省
我不知道它甚至是可行的,我想我需要放棄一些類型安全,並添加運行時檢查到動態類型語言的接口。
它可行嗎?有沒有工具來實現這個目標來自動生成綁定?我認爲像Corba這樣的東西不適合ocaml ABI,但我可能是錯的。
編輯:通過刪除運行時要求,並使用只有語言有一個llvm前端,我可以使用llvm作爲一個普通的ABI我猜,但它似乎棘手。
我想寫一個OCaml庫,它將被其他編程語言(如C或Python)使用。OCaml庫的綁定和反省
我不知道它甚至是可行的,我想我需要放棄一些類型安全,並添加運行時檢查到動態類型語言的接口。
它可行嗎?有沒有工具來實現這個目標來自動生成綁定?我認爲像Corba這樣的東西不適合ocaml ABI,但我可能是錯的。
編輯:通過刪除運行時要求,並使用只有語言有一個llvm前端,我可以使用llvm作爲一個普通的ABI我猜,但它似乎棘手。
OCaml的FFI爲interact with C code。綁定的代碼必須用C語言編寫,而不是用OCaml(它沒有直接表示C值,而C用OCaml值表示)寫入。我的建議是:
步驟(2)的理由是讓步驟(3)儘可能小。從C端操縱OCaml值有點痛苦,尤其是你有可能與垃圾收集器的交互錯誤,這意味着段錯誤 - 再加上你沒有得到任何類型的安全。所以你在C方面做的工作越少越好。
有一些項目可以爲你做一些包裝工作。例如CamlIDL,我認爲Swig對OCaml有一些支持。但我從來沒有使用過這些,所以我無法評論。
如果您知道您希望將接口轉換爲哪種高級語言,那麼可能會有專門的橋接器不需要C步驟。例如,有些庫可以直接與Python表示法(搜索Pycaml,不知道它們是如何進行戰鬥測試)或與Java運行時(OCamlJava項目)進行交互。一個C接口仍然是一個安全的選擇,可以讓其他人爲他們自己的語言搭建橋樑。
這是可行的,但您需要了解涉及的主題,如GC的工作原理。 看一看:http://caml.inria.fr/pub/docs/manual-ocaml-4.00/manual033.html#toc148
您需要注意存根代碼中的類型,但除此之外,您可以保持類型安全。