为什么 UNIX/POSIX 系统调用命名如此难以辨认?

为什么 UNIX/POSIX 系统调用命名如此难以辨认?

为什么要使用像timeand这样难以理解的系统调用名称creat而不是getCurrentTimeSecsand createFileor,也许更适合Unixget_current_time_secscreate_file.这让我想到了下一点:为什么有人想要cfsetospeed不带驼峰大小写或至少下划线的东西以使其可读?当然,调用会包含更多字符,但我们都知道代码的可读性更重要,对吗?

答案1

这是由于当时的技术限制。 POSIX标准创建于20世纪80年代,参考了1970年诞生的UNIX。当时的一些C编译器将标识符限制在6或8个字符长,从而确定了变量和函数长度的标准名称。

相关问题:

答案2

dr_ 是对的,但还有另一个原因——可用性。过去,您没有像键盘一样舒适的打字工具。如果你幸运的话,你会拥有类似于老式打字机的东西。如果你不幸运,你必须处理需要实际体力工作才能操作的系统(例如,需要很大的力气才能按下“键”),或者你手动在卡片上打孔。

这意味着即使在 6-8 个字符的限制内,您也试图使命令尽可能短。这就是为什么你有ls代替listcreat代替create。那个时代的代码充满了诸如axi- 当然x2还有朋友之类的变量。打字是一项繁重的工作 - 今天,您打字所消耗的精力listIndex比以前“打字”的消耗要少i- 而且速度也不再那么慢(特别是使用自动完成等附加技术)。

真正的问题是 - 为什么这么多 Unix 习惯用法仍然存在,尽管它们不再受欢迎?

答案3

除了其他答案之外,我想指出,Unix 的开发是对 Multics、CTSS 和其他当代操作系统的反应,这些操作系统的命名约定明显更加冗长。您可以在以下位置体验这些操作系统:http://www.multicians.org/devdoc.html。例如,http://www.multicians.org/mspm-bx-1-00.html给出change_name重命名文件的命令;比较Unix mv

此外,系统调用名称非常短的主要原因坚持是向后兼容。您会注意到,较新的 API 往往更加明确;例如,gettimeofday而不clock_gettime只是time.

(即使在今天,使用whateverIndex而不是ifor 循环索引也会导致自动代码审查失败我的书 ;-)

答案4

Dennis Ritchie 对 C 设定了一个限制,即它不会依赖 Fortran 不需要的任何链接器功能。因此,外部名称有 6 个字符的限制。

相关内容