Hacker News 中文摘要

RSS订阅

我们为何仍在使用Markdown? -- Why are we still using Markdown?

文章摘要

文章作者对Markdown语言爱恨交加,认为其虽简单易用但功能有限,远不如HTML强大。作者承认CommonMark规范的努力,但认为Markdown语言本身存在根本缺陷。文章以幽默口吻探讨了Markdown的优缺点,暗示开发者可能过度依赖这种简单的标记语言。

文章总结

我们为什么还在用Markdown?—— 一个饱受爱恨交织的标记语言

核心观点
Markdown作为一种轻量级标记语言,既因其简洁性受到喜爱,又因设计缺陷和功能蔓延而饱受诟病。作者通过四大罪状分析,指出其已沦为"标记语言中的C++"——功能混乱、安全隐患重重,却因历史惯性被广泛使用。


一、Markdown的"双面性"

优点
- 极简语法:无需辅助工具即可手写,学习曲线近乎为零
- 直观映射:**粗体**必然转换为<b>粗体</b>
- 专注基础:原始设计仅需完成Markdown→HTML的转换

致命缺陷
同一效果存在多重语法(如标题可用# 标题标题\n===),导致: - 解析器复杂度激增 - 出现正则表达式拒绝服务(ReDoS)漏洞(如markdown-it库的CVE-2025漏洞)


二、四大核心罪状

  1. 语法混乱

    • 粗体/斜体有**__<b>等6种写法,嵌套时更产生_*bold*_等歧义组合
    • 水平线语法与标题语法冲突
  2. 内联HTML的潘多拉魔盒
    ```markdown

    示例

    这是危险设计优雅但致命。 ```

    • 强制解析器捆绑HTML解析功能
    • 引发大量XSS漏洞(如CVE-2025-24981等)
  3. 过时的邮件时代遗产

    • 保留两种无序列表语法、不关心顺序的编号列表
    • 脚注语法将上下文无关文法(CFG)升级为上下文相关文法(CSG)
  4. 被迫进化的渲染器
    | 用户需求 | 技术代价 | 实际结果 | |----------------|------------------------|-----------------------| | 数学公式支持 | 集成排版引擎 | 依赖图复杂度爆炸 | | 自定义样式 | CSS注入机制 | 安全边界模糊 |


三、替代方案均不完美

  • 纯文本:无法满足现代展示需求
  • ReStructuredText:可读性>可写性
  • MDX:过度HTML化丧失可读性

根本问题:缺乏构建系统。作者建议: 1. 禁用内联HTML,改用明确定义的短代码 2. 建立编译时钩子机制 3. 严格限定语法边界


四、计算机语言理论视角

  • Markdown已从正则语言(Type-3)退化为上下文相关语言(Type-1)
  • 内联HTML等特性使其图灵完备,但缺乏形式化规范
  • 引用《不列颠百科全书》定义强调:标记语言≠编程语言

结语
Markdown如同"用锤子作画"——当简单工具被迫承担复杂任务时,终将摧毁自身设计初衷。是时候放弃修修补补,重新设计一个具有严格语法定义和构建系统的替代方案了。

注:本文讨论基于CommonMark规范,数据截至2026年。历史争议可参考Jeff Atwood与Gruber的论战(2009)、CommonMark更名事件(2014)等。

评论总结

以下是评论内容的总结:

支持Markdown的观点

  1. 简单易用:Markdown语法简单,读写方便,认知负担低。

    • "Markdown is awesome, easier to write, and easier to read at the source level."(runjake)
    • "i use it because it does what i want and is easy to use."(fl4regun)
  2. “够用就好”哲学:Markdown的简洁性是其优势,适合快速写作和文档。

    • "Markdown is great because it doesn't define a bunch of things... Just give me the text and let me choose how to make it readable."(quelsolaar)
    • "Easy and 'good enough' very often trumps complex and comprehensive."(m-schuetz)
  3. 与AI兼容:Markdown在AI时代更受欢迎,因为其简洁性减少了token数量。

    • "Markdown works really well with AI because it reduces the number of tokens required."(sorrymate)
    • "Because I think it’s fair to say it’s becoming a standard format for ai agent specs docs etc."(andersco)

批评Markdown的观点

  1. 语法混乱:Markdown存在多种方言和歧义,缺乏统一标准。

    • "Markdown is widely used but I agree that it’s a mess, there are so many dialects."(giamma)
    • "Markdown has a lot of weird choices and works best for longer documents."(timokoesters)
  2. 缺乏解决方案:批评者未提出更好的替代方案。

    • "The author merely described the parameters of a solution and didn’t even attempt to solve it."(dangus)
    • "That is a lot of complaining for having no suggested better alternative."(montroser)

其他替代方案

  1. AsciiDoc:部分用户认为AsciiDoc更规范,适合复杂文档。

    • "A similar but better markup is ASCIIDOC; it’s formally defined..."(giamma)
    • "Asciidoc forever baby. Write actual books in it."(lopsotronic)
  2. HTML/LaTeX:少数用户认为HTML或LaTeX更适合特定场景。

    • "I actually do agree that HTML is a better one, if it is a bit easier to read the source."(markus_zhang)
    • "If I did I’d use LaTeX before RST."(Arainach)

总结

Markdown因其简单性和易用性广受欢迎,尤其适合快速写作和与AI协作,但其语法混乱和缺乏统一标准也受到批评。部分用户推荐AsciiDoc作为更规范的替代方案,而HTML或LaTeX则被视为更适合复杂场景的工具。总体而言,Markdown因其“够用就好”的特性仍占据主导地位。