2

【译文】 Linus Torvalds 在 Linux Kconfig 中故意将缩进的使用复杂化

 1 month ago
source link: https://www.techug.com/post/torvalds-intentionally-complicates-his-use-of-indentation-in-linux-kconfig/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK