【译文】 Linus Torvalds 在 Linux Kconfig 中故意将缩进的使用复杂化
Linux 内核超级英雄 Linus Torvalds 使内核配置文件中缩进的使用变得更加含糊不清–有意淘汰低劣的解析器。
内核 6.9-rc4 是下一版 Linux 内核的最新候选版本,已于昨天发布。除了常见的驱动程序和错误修复之外,它还包含了一些针对 bcachefs 的调整,以及一些针对最近发现的 Spectre 式本地分支历史注入数据泄漏的缓解措施。
不过,最让 Reg FOSS 办公桌上的人感到高兴的是 Linus 本人对配置文件的修改,标题为 “Kconfig:特意添加了一些隐藏标签”。他将空格缩进改成了制表符缩进,以防止劣质的解析器。
具体来说,在内核源代码的这块文本中…
default 12 if PAGE_SIZE_4KB default 13 if PAGE_SIZE_8KB default 14 if PAGE_SIZE_16KB default 15 if PAGE_SIZE_32KB default 16 if PAGE_SIZE_64KB default 18 if PAGE_SIZE_256KB
…… default 和整数值之间的字符现在是一个 8 个字符宽的制表符缩进。它恰好位于制表符边界的末端,因此显示为一个空格字符。
虽然 Torvalds 以其在公开场合给予反馈的稳健方式而闻名,但他一直在努力,并在 2018 年休息了一段时间,以帮助他更好地控制邮件中的情绪。
这次改变可能就是其中的一个例子。内核指挥官(commandant)发现了一个特殊的代码改动,即 commit d96c36004e31 ,其目的只有一个:
修复 FTRACE_RECORD_RECURSION_SIZE 条目,用空格符替换制表符。这有助于 Kconfig 解析器顺利读取文件。
Kconfig 是一种用于控制内核构建系统的配置语言,与许多其他 off-side 规则语言一样,它也使用缩进来划分区块。是的,大量的空白,就像 Python、YAML 和许多其他编程和配置语言一样。无论你是爱它还是恨它,你都无法摆脱它。
在这次修改中,他有意将内核构建配置文件中缩进的使用变得更加复杂,以迫使解析这类文件的工具的作者改进他们的游戏。正如他所解释的:
让我们确保它得到修复。因为如果不能将制表符解析为空白,就不应该解析内核 Kconfig 文件。
在我们看来,这似乎是波斯特尔定律(Postel’s Law)的一个实例,波斯特尔在 1980 年的 RFC 761 中将其奉为圭臬:接受的东西要自由,发送的东西要保守。许多标有缩进标记的语言都有推荐的样式,例如 Python 的 PEP-008,其中就有非常清晰明确的规定:
每个缩进级别使用 4 个空格。
但事实上,虽然规范很严格,但只要开发人员在使用时保持一致,解释器还是会很乐意接受不同数量的空格,或者在某些行中使用制表符,而在另一些行中使用空格。这正是 Linus 所希望看到的,而且他也非常正确地认为,不管是什么解析工具,只要遇到制表符而不是空格就会失效,这都是错误的。
因此,与其说他是在回复一封野蛮的批评邮件,不如说他是在有意无意地使用更复杂的缩排方式,以揭露那些无法处理缩排的工具。这样做可以淘汰那些较弱的工具,只留下那些更合适、适应性更强的工具……同时又不会公开伤害任何人的感情。
把它想象成行动中的进化。®
本文文字及图片出自 Torvalds intentionally complicates his use of indentation in Linux Kconfig
你也许感兴趣的:
- C 语言老将从中作梗,Rust for Linux 项目内讧升级!核心维护者愤然离职:不受尊重、热情被消耗光
- 【外评】Linux 桌面市场份额升至 4.45
- “不可变”发行版Vanilla OS 2发布稳定版:彻底重写、改变使用Linux的方式
- 【外评】Rust 版的 Linux 文件系统
- 【外评】桌面 Linux 是一座尚未开发的金矿
- 【外评】茶壶中的 Debian /tmpest
- 【外评】为什么你的 Linux 内核错误报告可能毫无结果?
- BitKeeper、Linux 和许可纠纷:Linus 如何在 14 天内写出 Git
- 【外评】英伟达™(NVIDIA®)开放式 GPU Linux 内核驱动程序即将成为“图灵”及将来 GPU 的默认设置
- 如何从 Windows 安装程序安装 Linux
你对本文的反应是: