Hacker News 中文摘要

RSS订阅

格式化代码应无必要 -- Formatting code should be unnecessary

文章摘要

文章回顾了作者在高中时与计算机科学老师Mr. Paige的对话,提到早在80年代,Ada编程语言就通过使用中间表示(DIANA)解决了代码格式化问题,允许开发者按个人偏好设置显示格式。作者感叹,尽管技术已进步到2025年,代码格式化问题依然困扰着开发者,并反思我们是否忽略了某些关键解决方案。

文章总结

标题:Max Leiter

URL来源: https://maxleiter.com/blog/formatting

主要内容:

在2025年9月6日,Max Leiter发表了一篇关于代码格式化的文章,探讨了为什么在当今时代,我们仍然需要为代码格式化问题而烦恼。他回忆了高中时期的一位计算机科学老师Mr. Paige,这位老师曾在80年代参与Ada编程语言的编译器开发。当时,他们并没有存储文本源代码,而是使用了一种名为DIANA(Descriptive Intermediate Attributed Notation for Ada)的中间表示法。这种方式允许每个开发者根据自己的偏好设置代码的显示格式,从而避免了格式化争议。

Leiter提到,他在2016年曾抱怨过代码格式化工具带来的困扰,而实际上,这个问题在40年前就已经得到了解决。他进一步介绍了Rational R1000工作站,这是一款集成了增量编译、语义分析、版本控制和调试功能的先进设备。R1000使用DIANA作为中间表示法,编译器与IDE都理解DIANA,因此开发者可以自由选择代码的显示方式,而无需担心空格或制表符的问题。

Leiter指出,尽管如今我们不再需要硬件加速的编译工具,并且在重构方面有了更好的工具,但在代码格式化方面,我们似乎退步了。他并不主张所有人都使用投影编辑和实时环境,但他认为我们应该探索一些更符合现代编程范式的方法,以减少格式化带来的不必要争论。

进一步阅读:

Leiter在文章中提到了几份相关文档,包括1985年的《Experiences with Code Generation》、1985年的《Ada Compiler Validation Summary Report: Rational Environment》以及Grady Booch关于Rational收购五周年的博客文章。这些资料为读者提供了更多关于R1000和DIANA的背景信息。

评论总结

评论主要围绕代码格式化和中间表示(IR)的优缺点展开,观点分为支持和反对两派。

支持代码格式化和IR的观点: 1. 个性化格式:一些评论者认为,开发者应能根据自己的偏好查看代码,而代码可以存储在标准格式中。例如,PaulKeeble提到:“我们可以在IDE中应用重新格式化,将代码存储为默认格式,但查看时可以根据个人偏好显示。”("we can then have our view of choice reformat the code as we want it, when its stored its stored in the default.") 2. 工具支持:评论者提到现有工具(如Git的“smudge”和“clean”过滤器)可以实现个性化格式化。leipert指出:“你可以设置Git的‘smudge’过滤器在检出时进行个性化格式化,并在提交时使用标准格式化。”("With git you could set up 'smudge' filters to do your own formatting on checkout and 'clean' formatting for the canonical formatting on staging files.")

反对代码格式化和IR的观点: 1. 工具兼容性:许多评论者认为,使用IR或非文本格式会破坏与现有工具(如grep、diff、版本控制)的兼容性。kelseyfrog指出:“任何非文本格式都会使grep、diff、sed和版本控制变得不那么有效。”("Anything but text makes grep, diff, sed, and version control less effective.") 2. 复杂性增加:评论者认为,引入IR会增加复杂性,且现有工具已经足够。preommr提到:“这已经存在了,只是AST。但事实证明这并不是一个好主意。”("Also, the common IR already exists - it's just the AST. With the benefit of hindsight, I think we can say that it's not that good of an idea.") 3. 格式化的重要性:一些评论者认为,代码格式化不仅仅是个人偏好,它还传达了代码的结构和意义。chowells强调:“格式化代码是一个关键的沟通渠道,它反映了开发者的经验、纪律和判断力。”("Formatting code is a critical communication channel. Well-formatted code should tell you: The developer has enough experience to understand that formatting matters.")

其他观点: 1. 语言特性:一些评论者提到某些语言(如Python、Go)对格式化有严格要求,这影响了格式化的灵活性。hackerbrother指出:“Go在语法层面消除了许多格式化决策。”("Go eliminates many formatting decisions at the syntax level.") 2. 历史经验:评论者提到历史上类似尝试(如DIANA)的失败,认为这些方案并未成功。laserbeam提到:“几年前有一群开发者在开发一个类似DIANA的编程环境,但项目已经死了。”("A few years ago a group of devs was working on a programming environment that feels very close to what DIANA is describing. The project is dead enough that they no longer own the TLD for the company.")

总结:评论者普遍认为,虽然个性化格式化和IR有其吸引力,但它们会破坏与现有工具的兼容性并增加复杂性。代码格式化不仅仅是个人偏好,它还传达了代码的结构和意义。