Bra*_*ndt 10 programming unix-philosophy
我以为我理解了Unix 编程这个术语的意思,但是现在,在内核/C 编程上下文中阅读它之后,我觉得我需要澄清这个术语的含义。
我不清楚这是否意味着:
gol*_*cks 14
“Unix 编程”是指为 Unix 环境明确编程。这将包括对符合相关标准(例如POSIX)的shell 进行编程。但是,它还包括使用任何语言进行编程,同时显式使用类似标准化的系统接口和资源,假设这些是特定于 *nix 世界的。
例如,没有 C 或 C++ 第三方库的网络编程是不可移植的,因为这两个标准都没有说明。C/C++ 中的网络是使用操作系统指定的接口实现的,而在 *nix-ish 系统上,这或多或少是通用的,您不能将该代码不变地移植到(例如)Windows,反之亦然。因此,在 C 或 C++ 中进行网络工作意味着使用可移植库,或针对平台,而 Unix 是后一种情况的一种可能性,因此,这就是“unix 编程”(以及 C 或 C++ 编程和网络编程)。1
然而,许多高级语言(如 perl、python 或 java )的网络编程是可移植的;这些语言通常是用 C 实现的,虽然实现的细节因平台而异,但接口没有。因此,您可以使用 perl 编写网络代码,该代码应该可以在运行 perl 的任何系统上运行;在 Unix 系统上,这由解释器实现翻译成适当的本机调用,而在 Windows 系统上,它将以不同的方式翻译。由于您的实际 perl 代码不是特定于 perl 的,因此它不是 unix 编程。它是网络编程和 perl 编程,但不是 unix 编程。
1. 由于 C 和 Unix 之间的密切历史关系,事实上 C 一直是最常用于编写操作系统的语言,以及“操作系统”的本质,类别中有很多东西“操作系统特定的 C 编程”——除了网络之外的另一个日常例子是面向文件系统的东西,例如统计文件和读取目录。因此,有各种“C 语言中的 Unix 编程”类型的书籍,因为 C 语言的基本编程不可避免地涉及许多特定于操作系统的元素。对于更可移植的语言(如 perl 或 java),情况并非如此;在这种情况下,本书的主题可能是“使用 Perl进行系统编程”,或者更可能只是简单的“使用 Perl 编程”。