【译文】 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

余下全文(1/3)
分享这篇文章:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注