三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Pandoc 20 年:从个人项目到全球通用,能否抵御大语言模型冲击?

Pandoc 20 年:从个人项目到全球通用,能否抵御大语言模型冲击?

Pandoc 的二十年

2006 年 8 月 3 日,将 pandoc 首个版本上传网站并依自由 GPL 许可证发布。Pandoc 0.1 约 3000 行 Haskell 代码,除 GHC 标准库无其他依赖,可转换多种文档格式。当时没料到后续发展。借 20 岁生日讲述其故事。

项目起源

人们常问为何用 Haskell 编写 pandoc,实则先选 Haskell 后决定用其编写文档转换器。从朋友格雷格·雷斯托尔博客了解 Haskell,读《Haskell 简明教程》后决定编写 Markdown 解析器。当时其他解析器用正则表达式转换,pandoc 用解析器组合生成抽象语法树,更可靠、扩展性强。后添加多种读取器和写入器,项目不断发展。

首次发布(2006 - 2008)

2006 年 8 月 3 日公开源代码,支持多种输入输出格式及生成 PDF。除给朋友发邮件未宣传,有人偶然发现使用。10 月土耳其开发者雷凯·奥克塔什联系打包,提高项目知名度。2007 年持续改进,0.3 版添加 DocBook 写入器等,0.4 版增加多种支持,是首个发布到 Hackage 的版本。

Pandoc 1(2008 - 2017)

2008 年 9 月 Pandoc 1.0 发布,新增多种写入器和语法高亮支持,创建相关包。参与 Markdown 实现者讨论,确定分隔代码块语法。2010 年 1 月 1.4 版引入模板系统。2010 年项目迁移到 GitHub,后续版本增加多种支持。2012 年 1.9 版实现 Word docx 输出,添加多种功能。2013 年专注多项功能,增加多种输入输出支持。2014 年三位新贡献者加入,添加多种支持。参与制定 Markdown 规范,后更名为 CommonMark。2015 年 1.14 版增加对 CommonMark 支持。次年 pandoc AST 有重要变化,多人有贡献。

Pandoc 2(2017 - 2023)

2017 年 Pandoc 2.0 带来架构变化,引入 Lua 过滤器,支持多种格式,替换旧的语法高亮库,添加多种写入器和输入支持。2018 年获 10 万美元捐赠。2019 年增加对 Jupyter 笔记本等支持,可指定默认选项。改进表格模型,编写新的引用处理库。支持多种文献数据库格式转换等,添加多种选项和功能。

Pandoc 3(2023 - 至今)

2023 年拆分 pandoc 为四部分,引入新元素和写入器。支持 Typst,添加 djot 输入输出格式。2024 - 2025 年后续版本增加多种写入器和读取器。2026 年 2 月 3.9 版支持编译为 WASM,设计 GUI 界面。现在仍在为 pandoc 做日常工作。

统计数据

目前支持 51 种输入格式和 76 种输出格式,共 3876 种转换方式。四个核心包含 85,684 行 Haskell 代码,算上依赖项代码行数约翻倍。GitHub 已解决 7346 个问题,600 多人参与开发,列出按修改行数和持续贡献时间的前二十名贡献者。

回顾:选择 Haskell 的原因

选择 Haskell 并非认为它是最佳语言,对 Rust 不熟悉。Haskell 代数数据类型、强类型系统、纯函数特性有用,还吸引高质量适中数量的贡献者。虽 Rust 有优点,但 Haskell 更易用。

Pandoc 的未来

计划继续改进 pandoc,思考其使用需求。大语言模型在文档转换有表现,但目前 pandoc 有环保、输出确定、结果可靠优势。设计 CommonMark 规范困难,大语言模型可能识别作者格式意图。为项目 20 年历史骄傲。

为纪念制作 pandoc 主题马克杯和贴纸。

← 返回列表