2014-12-20 37 views
4

我偶然發現了Julia(編程語言),並特別感興趣的是它的能力to call C functions without any wrapper。事實上,它看起來更像是一個即時C包裝:關於允許直接調用C函數的語言

path = ccall((:getenv, "libc"), Ptr{Uint8}, (Ptr{Uint8},), "SHELL") 

time = ccall((:clock, "libc"), Int32,()) 

所以我有幾個問題:

  1. 是否有使用過有一個正式的包裝API此功能的任何缺點?
  2. 當這種功能不應該使用

PS:很高興能有其他語言能夠做同樣的事情,很容易,列出。

+4

看起來您正在使用這些說明隨時製作包裝。沒有錯。 – Yetti99

+0

所有三個問題(每個問題可能都應該有他們自己的帖子)都是開放式的。我很想投票結束,因爲*太寬泛* ... – Jubobs

+0

我可以讓這個問題不那麼寬泛,但不確定哪一部分更重要。例如,瞭解具有相同功能的其他語言對我很有用,但瞭解可能的缺點也非常重要。 – marcio

回答

4

大多數語言與C語言提供了一個簡單的互操作。在靜態類型語言中,出於顯而易見的原因,需要聲明導入的函數簽名(Haskell,C#)。

在動態類型語言中不是必需的。例如,看看它是如何完成的pythonlua。這裏沒有錯,這只是動態類型化的一個特徵。

當然,如果您想將您的庫定位到給定的語言,最好是使用語言編寫和文檔綁定,這樣用戶就不必自己處理C interop了。這顯然更加方便。但是封裝自己可以在內部使用這種FFI,這只是從語言中獲得的一項功能。