将所有syscall-s包装在包syscall中,就像libc所做的那样,如果我理解它们的话。
我研究了几种语言,
Haskell,在编译器中使用libc,并且库通常也使用它,尽管有一些库为用户包装了系统调用。
Java和几乎所有选择libc的JVM语言。
不需要提及脚本语言,例如lua,ruby或python,它们需要可移植,因此它们需要libc作为POSIX的实现。
我最近没有使用过锈,但也有一些人刚用libc说过锈。
所以,为什么golang最初决定实现一个系统调用包。它不可移植,移植到每个内核,甚至是同一内核的每个主要版本都需要花费更多人。
答案 0 :(得分:0)
因为Go在Go运行时管理的goroutine中管理其进程,该运行时用C编写,并在链接阶段静态链接到已编译的用户代码。由于go不能直接在操作系统中使用自己的运行时来管理其syscall,所以这就是为什么它实现了自己的syscall程序包。