我已经理解 API 是两个代码之间的粘合剂。它们以库函数的形式实现,最终在运行时在计算机上编译和需要。
那么这是否意味着它们的实现是特定于操作系统的?
我特别想知道 opengl 的实现是否特定于操作系统?我正在使用 Fedora 19 并安装了 Mesa 库。
一些 API 可能以特定于操作系统的方式实现,而另一些则不是。
这取决于是否需要低级特性来实现它们,或者 API 运行的环境是否提供或不提供实现它们所需的构建块。
例如,JDBC type-4 驱动程序以独立于操作系统的方式实现 JDBC API。
诸如 POSIX 之类的其他 API 可能必须以特定于操作系统的方式实现,而其中的某些部分可能可以以独立于操作系统的方式实现。
另一个例子是 APR,即 Apache Portable Runtime,它以特定于操作系统的方式实现。另一个 API,Serf 构建在 APR 之上,因此它的实现实际上是独立于操作系统的。
总之,作为一般规则,低级 API 倾向于以特定于操作系统的方式实现,而高级 API 将根据其他低级 API 来实现,因此更有可能以独立于操作系统的方式实现方式。
该答案的第一部分是在问题是通用 API 问题时编写的。后来这个问题被改为专门关于 OpenGL 的问题。
我对 OpenGL 的 Mesa 实现不是很熟悉;我会假设出于可维护性的原因,它的很大一部分是以独立于操作系统的方式实现的,但是因为 A)需要与硬件接口——这往往在不同的操作系统上以不同的方式完成——和 B ) 实现良好性能的需要也将有大量特定于操作系统的代码。
要记住的另一件事是 POSIX API 有灰色区域(特别是在处理线程的部分),因此对于更高级别的 API(例如 Mesa),可能需要特定于操作系统的代码来解决不同的实现中的差异平台。
当然,OpenGL 实现是特定于操作系统的。它们与操作系统集成,通常与设备驱动程序集成。
但是,OpenGL 规范是独立于操作系统的,因此 OpenGL API 不是特定于操作系统的。
注意 OpenGL 初始化(窗口和渲染上下文)非常依赖于操作系统(WGL 或 GLX API 实现)。