为什么golang选择了系统调用而不是libc

时间:2017-10-10 02:07:29

标签: go system-calls libc

将所有syscall-s包装在包syscall中,就像libc所做的那样,如果我理解它们的话。

我研究了几种语言,

  • Haskell,在编译器中使用libc,并且库通常也使用它,尽管有一些库为用户包装了系统调用。

  • Java和几乎所有选择libc的JVM语言。

不需要提及脚本语言,例如lua,ruby或python,它们需要可移植,因此它们需要libc作为POSIX的实现。

我最近没有使用过锈,但也有一些人刚用libc说过锈。

所以,为什么golang最初决定实现一个系统调用包。它不可移植,移植到每个内核,甚至是同一内核的每个主要版本都需要花费更多人。

1 个答案:

答案 0 :(得分:0)

因为Go在Go运行时管理的goroutine中管理其进程,该运行时用C编写,并在链接阶段静态链接到已编译的用户代码。由于go不能直接在操作系统中使用自己的运行时来管理其syscall,所以这就是为什么它实现了自己的syscall程序包。

相关问题