文章摘要
文章作者对Markdown语言爱恨交加,认为其虽简单易用但功能有限,远不如HTML强大。作者承认CommonMark规范的努力,但认为Markdown语言本身存在根本缺陷。文章以幽默口吻探讨了Markdown的优缺点,暗示开发者可能过度依赖这种简单的标记语言。
文章总结
我们为什么还在用Markdown?—— 一个饱受爱恨交织的标记语言
核心观点
Markdown作为一种轻量级标记语言,既因其简洁性受到喜爱,又因设计缺陷和功能蔓延而饱受诟病。作者通过四大罪状分析,指出其已沦为"标记语言中的C++"——功能混乱、安全隐患重重,却因历史惯性被广泛使用。
一、Markdown的"双面性"
优点
- 极简语法:无需辅助工具即可手写,学习曲线近乎为零
- 直观映射:**粗体**必然转换为<b>粗体</b>
- 专注基础:原始设计仅需完成Markdown→HTML的转换
致命缺陷
同一效果存在多重语法(如标题可用# 标题或标题\n===),导致:
- 解析器复杂度激增
- 出现正则表达式拒绝服务(ReDoS)漏洞(如markdown-it库的CVE-2025漏洞)
二、四大核心罪状
语法混乱
- 粗体/斜体有
**、__、<b>等6种写法,嵌套时更产生_*bold*_等歧义组合 - 水平线语法与标题语法冲突
- 粗体/斜体有
内联HTML的潘多拉魔盒
```markdown示例
这是危险的设计,优雅但致命。 ```
- 强制解析器捆绑HTML解析功能
- 引发大量XSS漏洞(如CVE-2025-24981等)
过时的邮件时代遗产
- 保留两种无序列表语法、不关心顺序的编号列表
- 脚注语法将上下文无关文法(CFG)升级为上下文相关文法(CSG)
被迫进化的渲染器
| 用户需求 | 技术代价 | 实际结果 | |----------------|------------------------|-----------------------| | 数学公式支持 | 集成排版引擎 | 依赖图复杂度爆炸 | | 自定义样式 | CSS注入机制 | 安全边界模糊 |
三、替代方案均不完美
- 纯文本:无法满足现代展示需求
- ReStructuredText:可读性>可写性
- MDX:过度HTML化丧失可读性
根本问题:缺乏构建系统。作者建议: 1. 禁用内联HTML,改用明确定义的短代码 2. 建立编译时钩子机制 3. 严格限定语法边界
四、计算机语言理论视角
- Markdown已从正则语言(Type-3)退化为上下文相关语言(Type-1)
- 内联HTML等特性使其图灵完备,但缺乏形式化规范
- 引用《不列颠百科全书》定义强调:标记语言≠编程语言
结语
Markdown如同"用锤子作画"——当简单工具被迫承担复杂任务时,终将摧毁自身设计初衷。是时候放弃修修补补,重新设计一个具有严格语法定义和构建系统的替代方案了。
注:本文讨论基于CommonMark规范,数据截至2026年。历史争议可参考Jeff Atwood与Gruber的论战(2009)、CommonMark更名事件(2014)等。
评论总结
以下是评论内容的总结:
支持Markdown的观点
简单易用: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)
“够用就好”哲学: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)
与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的观点
语法混乱: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)
缺乏解决方案:批评者未提出更好的替代方案。
- "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)
其他替代方案
AsciiDoc:部分用户认为AsciiDoc更规范,适合复杂文档。
- "A similar but better markup is ASCIIDOC; it’s formally defined..."(giamma)
- "Asciidoc forever baby. Write actual books in it."(lopsotronic)
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因其“够用就好”的特性仍占据主导地位。