Назад
SiTech Professional Insights
Двадцять років pandoc: історія конвертера документів, написаного на Haskell
SiTech Team3 წთ. საკითხავი

Двадцять років pandoc: історія конвертера документів, написаного на Haskell

Джон Макфарлейн відзначає 20 років від першого випуску pandoc: 51 вхідний формат, 76 вихідних і 3876 можливих конвертацій — та питання, чи не замінять його LLM-и.

Джон Макфарлейн, автор pandoc, опублікував ретроспективу до двадцятиріччя першого випуску конвертера документів. Першу версію pandoc 0.1 він виклав на своєму сайті 3 серпня 2006 року під вільною ліцензією GPL. Це було близько 3000 рядків коду на Haskell без жодних залежностей, крім стандартної бібліотеки GHC; програма перетворювала документи Markdown, reStructuredText, HTML і LaTeX один в одного, а також у RTF та S5. Після понад двохсот випусків проєкт став найпопулярнішою програмою, написаною на Haskell, підтримує понад п’ятдесят форматів документів і встановлений на мільйонах комп’ютерів.

Чому Haskell і чому AST

За словами Макфарлейна, вибір був зворотним до того, як зазвичай думають: спершу він вирішив використати Haskell, і лише потім — написати конвертер документів. Зацікавившись Haskell після поста друга, він прочитав «A Gentle Introduction to Haskell» і шукав практичний проєкт для вивчення мови. Тодішні реалізації Markdown на Perl, Python, Ruby та PHP були перетворювачами на регулярних виразах; pandoc пішов іншим шляхом — розбирав Markdown у справжнє абстрактне синтаксичне дерево (AST) і вже його рендерив в інші формати. Така архітектура надійніша й розширюваніша: N «читачів» і M «письменників» дають N × M конвертацій.

Два десятиліття випусків

Pandoc 1.0 вийшов у вересні 2008 року з письменниками для MediaWiki, Texinfo, OpenDocument та ODT і блоків коду з підсвічуванням синтаксису; бібліотеки zip-archive і highlighting-kate Макфарлейн написав сам, бо в Haskell їх не було. Pandoc 1.9 (2012) додав виведення у формат Word docx. Pandoc 2.0 (2017) переробив читачів і письменників так, щоб вони могли виконувати операції вводу-виводу, коли цього вимагає формат, і запровадив Lua-фільтри, що працюють безпосередньо з AST. Pandoc 3.0 (2023) розділив проєкт на чотири пакети — бібліотеку, Lua-рушій, сервер і CLI — і додав елемент Figure; згодом з’явилася підтримка Typst (3.1.3) і djot (3.1.12), а pandoc 3.9 (лютий 2026) дозволив компілювати pandoc у WebAssembly для запуску в браузері.

У цифрах

У ретроспективі наведено поточну статистику: 51 вхідний і 76 вихідних форматів — 3876 різних конвертацій; 85 684 рядки коду на Haskell у чотирьох основних пакетах, а разом із залежностями, створеними для pandoc, — приблизно вдвічі більше; 7346 закритих issue на GitHub; понад 600 контриб’юторів, серед яких Альберт Кревінкель, Джессі Розенталь і Крістіан Депрес. У 2018 році проєкт отримав 100 000 доларів від Handshake; ці кошти протягом п’яти років ішли на невеликі стипендії найактивнішим мейнтейнерам.

Що далі

Макфарлейн запитує, як довго такий інструмент залишатиметься потрібним: LLM-и вже непогано перекладають між форматами документів і, можливо, колись стануть надійнішими за pandoc. Наразі ж, на його думку, у pandoc три переваги: значно менше енергоспоживання, детермінований і передбачуваний результат та надійніші конвертації. Автор планує й надалі вдосконалювати проєкт і завершує текст словами «З 20-річчям, pandoc!»

SSiTech

SiTech — веброзробка з підтримкою AI

Створюємо швидкі та сучасні сайти й інтегруємо AI у бізнес-процеси. Маєте проєкт чи запитання? Із задоволенням допоможемо.