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

问题描述 投票:4回答:1

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

我研究了几种语言,

  • Haskell,在编译器中使用libc,并且库通常也使用它,尽管有一些库为用户包装syscall。
  • Java和几乎所有选择libc的JVM语言。

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

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

那么,golang为什么决定首先实现一个系统调用包。它不可移植,移植到每个内核,甚至同一内核的每个主要版本都需要更多人。

go system-calls libc
1个回答
0
投票

因为Go管理由Go Runtime管理的goroutine中的进程,它是用C语言编写的,并且在链接阶段静态链接到编译的用户代码。由于go使用自己的运行时不直接在OS中管理其系统调用,因此它实现了自己的系统调用包。

© www.soinside.com 2019 - 2024. All rights reserved.