关于允许直接调用C函数的语言

时间:2014-12-20 16:07:36

标签: c julia

我偶然发现了Julia(编程语言),并对它的能力to call C functions without any wrapper特别感兴趣。实际上它看起来更像是一个即时的C包装器:

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

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

所以我有几个问题:

  1. 使用此功能是否有任何缺点,而不是正式的包装API?
  2. 何时不应使用此类功能?
  3. PS:很高兴让其他语言能够轻松地列出相同的东西。

1 个答案:

答案 0 :(得分:4)

大多数语言提供与C的简单互操作。在静态类型语言中,由于显而易见的原因,需要声明导入的函数签名(HaskellC#)。

在动态类型语言中,它不是必需的。例如,看看它是如何完成的pythonlua。这里没有错,这只是动态典型化的一个特征。

当然,如果您希望将库定位到给定语言,最好以语言编写和记录绑定,以便用户不必自己处理C互操作。这显然更方便。但是包装器本身可以在内部使用这种FFI,这只是你从语言中获得的一种功能。