Why use cmark and not X?

hoedown

hoedown (which derives from sundown) is slightly faster than cmark in our benchmarks (0.21s vs. 0.29s). But both are much faster than any other available implementations.

hoedown boasts of including “protection against all possible DOS attacks,” but there are some chinks in the armor:

% time python -c 'print(("[" * 50000) + "a" + ("]" * 50000))' | cmark
...
user 0m0.073s
% time python -c 'print(("[" * 50000) + "a" + ("]" * 50000))' | hoedown
...
0m17.84s

hoedown has many parsing bugs. Here is a selection:

% hoedown
- one
  - two
    1. three
^D
<ul>
<li>one

<ul>
<li>two</li>
<li>three</li>
</ul></li>
</ul>


% hoedown
## hi\###
^D
<h2>hi\</h2>


% hoedown
[ΑΓΩ]: /φου

[αγω]
^D
<p>[αγω]</p>


% hoedown
```
[foo]: /url
```

[foo]
^D
<p>```</p>

<p>```</p>

<p><a href="/url">foo</a></p>


% hoedown
[foo](url "ti\*tle")
^D
<p><a href="url" title="ti\*tle">foo</a></p>

discount

cmark is about six times faster.

kramdown

cmark is about a hundred times faster.

kramdown also gets tied in knots by pathological input like

python -c 'print(("[" * 50000) + "a" + ("]" * 50000))'