
Есть в жизни вещи, которые приносят мне и радость, и печаль одновременно. Например, горький шоколад и markdown. Серьёзно, зачем он нужен? В половине случаев мы даже не используем этот язык целиком!
HTML — лучший язык программирования!
Вы наверняка слышали о людях, которые говорят, что из языков программирования знают только HTML. Да, все мы в этот момент закатывали глаза и пытались доказать, что HTML — это только язык разметки, а не программирования.
Да, наверно, мы правы, но у того, кто так говорит, есть то, чего нет у нас.
Нормальная жизнь.
[Примечание] Когда я говорю о markdown, то имею в виду конкретно CommonMark, если не указано иное. Дело в том, что это неоднозначная спецификация синтаксиса. Я люблю этот проект и ценю усилия разработчиков. Поломана не спецификация, а сам язык.
Хорошее
Markdown — минималистичный язык для форматирования тривиальных документов. Он должен справляться с одной простой задачей: получать файл Markdown и выводить его в виде файла HTML. Его синтаксис довольно удобочитаем и его легко писать. В отличие от кода на языке C, можно сразу видеть вывод, который будет создан. Полужирный текст — это всегда <b></b>, аналогично и для курсива.
Обучение практически не требуется, достаточно одного взгляда на шпаргалку, и вы готовы писать.
Плохое
Мы не знаем, чего хотим
Нам нужен UI? Нам нужен язык программирования? Мы не знаем. Единственная причина разрастания фич заключается в нечётких спецификациях.
Если вам нужен МИНИМАЛЬНЫЙ легкочитаемый язык разметки, то у вас есть markdown. Вроде бы всё просто?
Ну…
(Вывод взят из dingus)
# Hello *I am an* __Unambiguous__ > Grammar
<h1>Hello</h1> <p> <em>I am an</em> <strong>Unambiguous</strong> </p> <blockquote> <p>Grammar</p> </blockquote>
Hello ===== _I am an_ **Unambiguous** > Grammar
<h1>Hello</h1> <p> <em>I am an</em> <strong>Unambigious</strong> </p> <blockquote> <p>Grammar</p> </blockquote>
Как мы видим, markdown — это НЕ то, чего мы просили. Эти два ввода создают ОДИНАКОВЫЙ вывод. И это лишь вершина айсберга?
В нём так много плохих решений, что если вы попытаетесь использовать его, он начнёт активно противодействовать вам как раз в тот момент, когда вы вроде бы точно знаете, что делаете.
Образец А: полужирный, курсив, полужирный курсив, ???
В markdown можно обозначать полужирное начертание разными способами. **bold**, __bold__, <b>bold</b> — это часть способов записи допустимого полужирного. И это только для commonmark. Если вы пользуетесь чем-то, что не позиционирует себя, как «CommonMark™ Compliant®©», то вполне можете столкнуться с допустимыми вещами, которые генерируют одинаковый ввод. Например:
_*bold*_*_bold*__*bold_**_bold_*
Поистине великолепно.
И я даже не буду начинать говорить о всяких многослойных штуках наподобие этой:
***Peter* Piper** _Picked___a___Pack_ *of** Pick_led_* Peppers
или такой:
*****\\*a*
На самом деле, это настолько распространено, что у нас есть отдельный класс уязвимостей парсеров под названием ReDoS (Regular Expression Denial of Service). Например, CVE уровня 6.9 для markdown-it.
markdown-it — это одна из самых наиболее проработанных, чистых и понятных библиотек для Markdown. Я просто обожаю markdown-it, но то, что даже эту библиотеку затронули уязвимости, показывает, насколько серьёзна ситуация.
Образец Б: __asm__ был хорошей идеей, но это?
В старых языках, где компиляторы генерировали оптимальный код, они были подобны реке в пустыне. Встроенный ассемблерный код помогал писать критичный для производительности код, не принося в жертву кровь, пот и слёзы разработчиков компиляторов.
Это позволяло, например, реализовывать SIMD-операции ещё до внедрения их поддержки в компилятор. Если вам любопытно, можете изучить краткий обзор ранних неудач генерации SIMD.
А теперь давайте возьмём эту чудесную идею и прикрутим её прямиком к самому раздутому, однопоточному, работающему в песочнице окружению, которому требуется простой и удобный способ написания документов. Так родился встроенный в Markdown HTML!
Встроенный HTML позволяет делать такие штуки:
# Hi I am a <ins> simple </ins> _programmer_ doing <span class="fancy-text"> elegant </span> programming. <div class="animation"> And here is my portfolio </div>
Разве это не просто? Разве это не здорово? Основная причина крайней сложности парсинга корректного markdown не в том, что синтаксис Markdown так сложно понять. Это лишь одна десятая часть проблемы. Главная проблема в том, что для выпуска парсера Markdown нужно также выпустить дружественный парсер HTML. А если вы используете HTML внутри Markdown, то почему бы не использовать HTML изначально?
...сказал автор этой статьи, использующий все известные человеку навороты, которых НЕТ в стандарте.
Сам по себе Markdown недостаточно мощный, чтобы удовлетворить разработчика с мозгом обезьяны навроде меня, который доволен, только если сайт выглядит достаточно хорошо™.
«Достаточно хорошо™» в данном случае подразумевает, что на нём есть хотя бы простейший LaTeX с поддержкой Tikz, возможность установки пакетов, PlantUML, Mermaid, собственной стилизации, собственных шорткодов, тэгов и классификации, настоящих сносок, поддержки Bibtex…
Не нужно мне и чтобы простой инструмент выполнял простую работу. Чтобы повесить картину на стену, мне нужен молоток. В данном случае, молоток — это markdown. Но если бы я хотел и рисовать им, то сразу же поломал бы холст.
Кроме того, это означает появление целой кучи CVE, в основном связанной с XSS-уязвимостями.
CVE, связанные со встроенным HTML ▼
CVE‑2025‑24981 (XSS-уязвимость)
CVE‑2025‑46734 (XSS-уязвимость)
CVE‑2025‑7969 (XSS-уязвимость)
CVE‑2025‑60312 (XSS-уязвимость)
Каждый раз, когда мы разрешаем встроенный HTML, перехватчики плагинов или встроенные движки исполнения, мы увеличиваем поверхность атаки.
Результат оказывается предсказуемым: постоянно встречающиеся XSS-уязвимости во всех крупных реализациях Markdown, а также многое другое. И ситуация будет ухудшаться с появлением на рынке новых парсеров, написанных вайб-кодингом.
Образец В: запутанный и устаревший синтаксис
Как и все хорошие технологии, которые есть в WorldWide Web, Markdown был изобретён в старые добрые нулевые! Источником вдохновения для него стали уже существовавшие стандарты разметки неотформатированного текста в электронной почте и постах Usenet (ссылка).
Напомню, что до 2000-х даже самые серьёзные электронные письма выглядели вот так:
From: k...@rational.com (Kent Mitchell) Subject: Re: Does memory leak? Date: 1995/03/31 Norman H. Cohen (nco...@watson.ibm.com) wrote: : The only programs I know of with deliberate memory leaks are those whose : executions are short enough, and whose target machines have enough : virtual memory space, that running out of memory is not a concern. : (This class of programs includes many student programming exercises and : some simple applets and utilities; it includes few if any embedded or : safety-critical programs.) This sparked an interesting memory for me. I was once working with a customer who was producing on-board software for a missile. In my analysis of the code, I pointed out that they had a number of problems with storage leaks. Imagine my surprise when the customers chief software engineer said "Of course it leaks". He went on to point out that they had calculated the amount of memory the application would leak in the total possible flight time for the missile and then doubled that number. They added this much additional memory to the hardware to "support" the leaks. Since the missile will explode when it hits its target or at the end of its flight, the ultimate in garbage collection is performed without programmer intervention. -- Kent Mitchell | One possible reason that things aren't Technical Consultant | going according to plan is ..... Rational Software Corporation | that there never *was* a plan!
Вы видите, в чём красота такого оформления? Синтаксис цитат, вертикальное разделение символами вертикальной черты (|), ограничение в 80 символов по длине строки. Именно для этого нужен был markdown (и с чем он совершенно не справился, ведь в markdown нельзя разделить экран на N частей без чёрной магии встроенного HTML)
Но из-за этого легаси у нас теперь есть два способа создания заголовков: обычный и ATX. Два разных способа и больше, чем два CVE по написанию полужирного и курсива. У нас есть два разных способа создания горизонтальной линии, которые конфликтуют друг с другом и с синтаксисом заголовков setext. У нас есть два способа составления неупорядоченных списков. У нас есть упорядоченный список, которому не важно, как мы его упорядочим. И у нас есть синтаксис сносок, перемещающий всю эту грамматику в зависящую от контекста грамматику.
Этот язык в буквальном смысле C++ языков разметки. Почти всё в нём можно сделать двумя разными способами: некоторые из них допускают XSS и почему-то приводят к утечкам памяти в html.
Он используется повсюду и всюду же терпит неудачу.
Образец Г: нельзя просто выполнить парсинг, нужно ещё и использовать
Парсинг — это просто.
Выше я сказал, что синтаксис сносок перемещает эту грамматику в контексто-зависимую грамматику. Позвольте рассказать об этом подробнее.
test [^1]
<p>test [^1]</p>
test [^1] [^1]: hello
<p>test <a href=″hello″>^1</a></p>
По техническим причинам я добавил форматирование и заменил " на ″.
На самом деле, в CommonMark не поддерживаются сноски, там есть линки. Единственная существенная разница заключается в том, что в синтаксисе линка после определения можно поместить только одно слово.
Линки и сноски в стиле ссылок и требуют глобального ресолвинга определений. Значение токена зависит от объявлений в другой части документа. Это нарушает допущения о парсинге без привязки к контексту.
Всё это можно выразить гораздо более кратко.
Если вам нужен простой язык, не усложняйте.
Рендеринг — это тяжело
Наверно, это самая спорная часть моего жалобного поста. Потому что никто не хочет признавать, что мы пользуемся двумя разными способами, и они нам нужны.
Ванильному Markdown нужен транслитератор, то есть буквально функция отображения один к одному. На входе **bold**, на выходе <b>bold</b>.
Однако современному Markdown нужно поддерживать, например, сноски, что превращает простой транслитератор в полнофункциональный компилятор. А после того, как мы сделали этот шаг, нам придётся карабкаться по лестнице.
Мне нужна личная система управления знаниями
Требования |
Технические подробности |
Результат |
|---|---|---|
Мне нужны сноски |
Свободная от контекста грамматика становится контекстно-зависимой |
Простой компилятор |
Мне нужны произвольные исходящие вызовы* |
Хуки, связывающие HTML с md |
Графы зависимостей |
Мне нужна математика |
Требуется интеграция типографических библиотек |
Более сложные графы зависимостей с движками исполнения |
Мне нужна произвольная стилизация |
Произвольный CSS |
Инъецирование CSS с правилами областей видимости на основе файлов |
(* например, шаблоны/шорткоды tera)
Клянусь, из-за того объёма работы в Obsidian с Markdown, который мне нужен для моих задач, решение Notion превратиться во внутреннюю копию Word / Excel кажется вполне разумным.
Каким может быть решение?
Если спросить об этом у чувака с великолепной бородой и тридцатилетним опытом работы на языке ассемблера 8086, то он ответит, что решение заключается в тексте без форматирования.
Если спросить у бро с Macbook и openclaw, который на трёх Mac mini создаёт стартап за день, то он ответит, что нужен mdx.
Если спросить у человека, зарабатывающего кодингом на C, то ответом будет ReStructured Text (.rst)
Если спросить меня, то я скажу, что решения нет. Все они поломаны тем или иным образом. Текст без форматирования прекрасен, но я не могу показать его тем, кто не знает, что такое разыменование нулевого указателя. ReStructured text чудесен, если вы только читаете его и никогда не пишете. А mdx так увлёкся копированием html, что забыл об удобочитаемости.
А самая большая проблема всех них в том, что у них нет системы сборки. Ради скорости мы экономим усилия. Если бы у них имелась система сборки со здравым, недвусмысленным, легкочитаемым синтаксисом, созданным именно для решения необходимых задач, думаю, все проблемы были бы решены.
Не разрешайте встроенный HTML, манипулировать текстом допускается только чётко определённым шорткодам и функциям.
Разрешайте исполнение хуков до, во время и после компиляции.
И, что самое важное, определяйте всё. Нам нужна специализированная система сборки, а не чудовище Франкенштейна, которое мы имеем наглость называть языком.
Я не говорю, что Markdown / Markup должен быть языком программирования; я говорю, что мы пытаемся его так использовать, а поскольку ему не хватает формального фундамента, он терпит поражение на обоих фронтах.
Я искренне считаю, что при наличии правильных ограничений полноценная система сборки на основе более разумного языка разметки с поддержкой хуков на этапе компиляции может решить многие связанные с этим проблемы. На данном этапе нам пора окончательно отказаться от Markdown и искать ответы в другом месте. Желательно с тривиально парсимой грамматикой
Что я имел в виду всем этим
Если вы поняли, о чём я говорю, то можете пропустить этот раздел.
С точки зрения формальной теории языков:
Язык разметки (Encyclopedia Britannica)
Стандартная система кодирования текста, состоящая из набора символов, вставляемых в текстовый документ для управления его структурой, форматированием или взаимоотношениями между его частями…
Язык программирования (Encyclopedia Britannica)
Язык для выражения набора детальных команд для цифрового компьютера…
ОЧЕВИДНО, что Britannica нам не поможет, поэтому давайте воспользуемся другими инструментом, которому я всегда доверяю — здравому смыслу. Дадим такое определение языку программирования:
Язык является языком программирования, если он полон по Тьюрингу
За определение языка я беру единственный источник истины, то есть «иерархию Хомского», основа которой появилась в 1956 году.
Если вкратце▼
Язык: множество строк (конечных последовательностей символов) конечного алфавита.
L⊆Σ∗
Алфавит (Σ) — это, по сути, множество, состоящее из всех букв, которые можно представить. Или, если подходить реалистично, всё, что можно поместить в UNICODE, не поломав при этом парсер вашей операционной системы.
Σ={a,b} (1)
ΣUnicode={char∣char∈Unicode Standard} (2)
Минимальный придуманный мной алфавит.
Алфавит, который мы будем использовать в дальнейшем; то, что я подразумеваю под алфавитом.
И любой язык — это L, где L — любое множество строк, составленных из символов алфавита Σ
L={klasfdushsda,ksadhf,…} — это валидный язык.
Тип |
Имя |
Формальное определение |
|---|---|---|
0 |
Рекурсивно перечислимый |
Генерируемый машинами Тьюринга |
1 |
Контексто-зависимый |
Генерируемый линейно ограниченными автоматами |
2 |
Контексто-независимый |
Генерируемый автоматами с магазинной памятью (например, синтаксис языка программирования) |
3 |
Регулярный |
Генерируемый конечными автоматами (например, простые паттерны, регулярные выражения) |
В пищевой пирамиде языков контекстно-независимые языки — это пшеница, а регулярные языки — это белок. Регулярный язык — это то, что может парсить обычное регулярное выражение. Контекстно-независимый язык — это то, что может описать BNF/EBNF , а контекстно-зависимый — это то, что мы называем синтаксисом C++. Надеюсь, вам не придётся иметь дело со вторым.
Рекурсивно перечислимые языки странные и не относятся к теме этого поста. Но просто чтобы разжечь ваше любопытство, скажу, что это валидный язык типа 0.
HALT={(P,x)∣P halts on input x}
Что подводит нас ко второму пункту.
Полнота по Тьюрингу: вычислительная система, способная вычислить любую вычислимую по Тьюрингу функцию называется тьюринг-полной. Иными словами можно сказать, что это такая система, которая способна симулировать универсальную машину Тьюринга. (Википедия)
Если говорить простым языком, вычислимая по Тьюрингу функция — это функция, которая или вернёт значение, или умрёт, пытаясь это сделать (то есть остановится) за конечное или бесконечное время.
Вычислимая по Тьюрингу:
def good_function(inp: int): ret : int = 0 for i in range(inp): ret += i return ret
Невычислимая по Тьюрингу:
def busy_beaver(n: int): ... # удачи
Зачем я начал эту вводную лекцию курса computer science о языках программирования/
классификации языков? Потому что хочу объяснить, что простые желания могут привести к серьёзным изменениям.
Грань между набором математических аксиом, ведущим к доказуемости, и тем, который ведёт к недоказуемости, — это отсутствие рекурсии (самореференции), которая проявляет себя как обычная операция умножения. У тривиальной операции могут быть нетривиальные последствия.
Хотите ещё больше хаоса?
Событие |
Ссылка |
|---|---|
Джефф Этвуд назвал назвал Джона Грубера «халатным» (2009 год) |
|
Переименование Standard Markdown → CommonMark (2014 год) |
https://www.metafilter.com/142475/Standard-flavored-Markdown |
Ars Technica: Markdown throwdown |
|
HN: цитата о «самой плохой маленькой программе» |
|
Карл Войт: «Markdown — это катастрофа» (2025 год) |
https://www.osnews.com/story/143128/markdown-is-a-disaster-why-and-what-to-do-instead/ |
Мой опыт работы с Markdown довольно автономен. Я пользовался им на форумах и в основном пишу на нём в Obsidian. В посте приведены мои личные мысли. Я никого не поддерживаю, но считаю, что одни люди более правы, чем другие.
Комментарии (30)

dlinyj
27.05.2026 13:22Вы деликатно так намекаете, чтобы вернули старый редактор?
Я новый так и не принял, решил что больше не буду писать, так как пользоваться этим невозможно.

JerryI
27.05.2026 13:22Это перевод
Встроенный редактор похерил ни одну мою статью. Хотя это частое явление, что центральные площадки будь то Habr, или *gram не смотря на огромное количество ресурсов обладают самым всратым и кривым UI для создания этого самого контента платформы. Как бы, чем популярнее место, чем всё херовее сделано. И плевать, что задача там из разряда на пару часов работы среднего fullstack, администрации хабра просто похуйОни лучше 4 раза добавят и удалят реакции и ИИ фичи ко всем кодовым блокам

dlinyj
27.05.2026 13:22Это перевод
Я вижу, но может быть посылом от компании. Как вот такое, например «Хабр, не закрывайте старый редактор!» Как мы хакнули систему, ускорив верстку статей в несколько раз

JerryI
27.05.2026 13:22Я согласен с замечаниями, однако, даже если есть неоднозначные вариации рендера, это все лишь разметка для информации. В этом случае потери будут минимальные даже в случае кривого рендера (в отличие от программы написанной на языке программирования). Все остальное добить
напильникомHTML вставками.
Там пытаются еще Typst и прочие, но ничего более распространенного, чем MD и простого пока не завезли...

wmlab
27.05.2026 13:22На Хабре была недавно статья, призывающая бросать MD и переходить на HTML, который лучше стандартизирован, а для AI, мол, вообще разницы нет.
Claude Code: почему HTML лучше Markdown / ХабрЯ категорически с этим не согласен. Лучше MD для ведения заметок, большая часть которых набивается руками, пока ничего не придумано. html тяжел в написании, в нем легко допустить ошибку вложений тегов, особенно со инлайновыми стилями, а diff в git - вообще кошмар (автор сам говорит о "шумности" html/css-диффов).

domix32
27.05.2026 13:22Собственно идея-то md как раз и была чтобы быть простым и минимальным, но автор почему-то решил, что им видите ли хочется стили, кроссреференс с автосносками и автооглавлениями, чуть ли не колонтитулы с записками на полях и ещё миллион пакетов чтобы рендерить произвольные flash игры посредством LateХ и всё это не выходя из md. То бишь у автора очень странное представление о минимальности.

cruiseranonymous
27.05.2026 13:22Автор в середине текста сам же проговорился что он эдакий анти-минималист и обмазан всеми видами аддончиков-расширений. Конечно у него начинается непоймичто вместо "тут список, тут простая таблица, тут код, тут картинка."
Но от этого его претензии ещё менее понятны, пытается от отвёртки добиваться функциональности микроскопа-видеопроигрывателем с перформатором.

NeoCode2
27.05.2026 13:22Для html хотя-бы есть встроенный в браузеры editable mode. Но html перегружен всяким разным, и у браузеров нет никаких средств управления редактированием. Например, при редактировании браузер может навставлять тегов span или div, да еще со встроенным style. То есть нет средства ограничения используемых тегов, нет способа редактировать именно разметку, а не форматирование. Нет способов управлять поведением редактора в сложных случаях. Вероятно, можно обвешаться javascript-обработчиками на каждое событие и вычищать все это, но... оно архитектурно криво.
У нас нет легковесного wysiwyg-редактора для легковесного же языка разметки (неважно markdown или другого). Генерация html это костыли. А то что в markdown можно встраивать html это вообще дыра.

isden
27.05.2026 13:22У нас нет легковесного wysiwyg-редактора для легковесного же языка разметки (неважно markdown или другого).
Да как это? В гугле забиваем "wysiwyg editor markdown" и наслаждаемся. Многие на TS/JS, но мелькали и на rust/qt.

ImagineTables
27.05.2026 13:22Он должен справляться с одной простой задачей: получать файл Markdown и выводить его в виде файла HTML.
Печально, что так думают. Я, например, просто пишу документацию, и я ненавижу WYSIWYG. И Markdown подошёл мне идеально, потому что самому себе выделять места в тексте при помощи
<b></b>немного перебор. Кстати, долго искал, на что бы перелезть с Notepad++, который умеет отображать код .md-файлов в соответствии с синтаксисом (This is **bold** textон показывает как This is **bold** text), но с рядом нюансов (он, например, не отличает*в начале строки от*italic*, так что списки приходится формировать строго через-). И так и не нашёл ничего настолько же быстрого, так что Notepad++ ОК.Когда-нибудь, возможно, я отрендерю всю документацию в HTML и выложу куда-нибудь, но до сих пор мне это ни разу не понадобилось.

SlimShaggy
27.05.2026 13:22VS Code с расширением Markdown Inline Editor не?

ImagineTables
27.05.2026 13:22Спасибо большое, судя по картинке он даёт функционал, похожий на описанное, но VS Code сам по себе тяжёлый (NPP занимает на диске 20 метров и стартует мгновенно).

isden
27.05.2026 13:22Obsidian смотрели? Немного из пушки по воробьям, но редактор там весьма приличный.

ImagineTables
27.05.2026 13:22Да, я смотрел всё, что мне тут посоветовали, в т.ч. Обсидиан, но… «немного из пушки по воробьям». )) В любом случае, спасибо за совет.

KEugene
27.05.2026 13:22Я раньше с md файлами почти не имел дела. Но последнее время почти все текстовые документы делаются в нем. Как по мне, его главное преимущество в том, что он "просто текст" и всегда можно открыть любым блокнотом без потери читабельности. Он не требует специальных программ для просмотра. Форматирование интуитивное и даже без его знания можно легко понять что к чему.
Главная проблема, с которой я столкнулся - это нормальный редактор с поддержкой форматирования и конвертация. Использовать IDE или целых программных комплексов, как то слишком. Зависить от онлайн не хочу. Долго искал что-то лучше "блокнота" и пока нашел из адекватных (бесплатный, портативный, поддерживает все элементы) только MarkText. Он кстати, мультиплатформенный.
Вторая проблема - это конвертация из/в формат. Оказалось, что тот же MarkText делает отличные pdf из md. А вот с Офисом все плохо. Во всяком случае простой копипаст убивает весь формат, а удачного конвертора я так и не нашел.
В общем, формат старый и, как говорится, "широко известен в узких кругах". Но из-за своей простоты, явно обделен вниманием разработчиков.

asher111
27.05.2026 13:22Pandoc https://pandoc.org/MANUAL.html#pandocs-markdown прекрасно справляется с конвертацией md в docx со всем задуманным форматированием (если расширениями не злоупотреблять) и структурой документа

h1pp0
27.05.2026 13:22Мне кажется, что значительная часть проблем в статье преувеличена, тем более готовой замены предложено не было. Также markdown отлично пишется и читается в блокноте, что редкий плюс.
По пунктам:
На минимальность он уже давно не претендует, причём на уровне приложения всегда можно рассматривать только часть/подмножество, если требуется.
Разные варианты написания возможны, но проблемы конфликтов нет, а реально сложные версии встречаются только в тестах самих парсеров. +Есть стандарт CommonMark
Часть про грамматики не очень понял. Судя по быстрому поиску, почти все актуальные парсеры быстрые, O(n) или близко. Например, md4c.
Книги и научные статьи лучше не писать в markdown, а для коротких заметок и Readme.md это слишком удобный инструмент.

TheGodfather
27.05.2026 13:22Как будто автор статьи не разграничивает использование маркдауна. Вроде и козе понятно, что использовать все-все-все фичи языка, вот эти сноски, дополнительный html и прочее - это, мягко скажем, перебор. Если вам это надо - и правда может HTML лучше?
MD же хорош как "немного улучшенный текст". Это вот когда есть bold/italic/heading/list/link. Это просто пишется, просто читается и достаточно понятно даже без форматированного output, можно читать сорцы в блокноте.

Ariless
27.05.2026 13:22Про ReDoS через множество синтаксических вариантов интересно именно с точки зрения тестирования.
Markdown-парсер может выглядеть полностью стабильным на обычных входных данных и разваливаться на специально сконструированной строке. Обычные happy-path тесты такое не поймают, тут уже нужен fuzzing или property-based testing.
Для того, что большинство воспринимает как "просто форматирование текста", поверхность для ошибок и атак неожиданно глубокая.

Roman_Cherkasov
27.05.2026 13:22Моя боль связанная с MD для заметок - невозможность поставить рядом несколько блоков текста или изображений. В остальном - отличный формат, если не использовать HTML.

cruiseranonymous
27.05.2026 13:22С блоками текста сложно(в Obsidian можно докинуть переводы сток через html-тэг
<br>, но не уверен про другие визуализаторы), но изображения же точно пакуются в таблицу| | | |-|-| ||||

SideshowBob
27.05.2026 13:22Asciidoc попробовал - он как-то покруче маркдауна выглядит. С сохранением простоты для простого форматирования, и с поддержкой более хитрых кейсов, типа таблиц в таблицах и т.п.

kapin
27.05.2026 13:22Есть ещё https://www.npmjs.com/package/generative-dom, это Markdown со встроенными компонентами html. Он легче, чем html, но мощнее чем Markdown

alexanderniki
27.05.2026 13:22Почему мы до сих пор пользуемся Markdown?
Наверное потому, что ничего лучше никто пока не придумал. Если пользоваться им по назначению - как простым языком разметки для примитивного форматирования - то результат в 99,99% будет приемлемый. Этого достаточно, чтобы не ломать мозг и пальцы ообо что-то более продвинутое.
zgwerby
Спорно. Именование монитора - компьютером, операционной системы - виндой, а транспилятора - компилятором просто показывает неграмотность человека в вопросе.