New CommonMark parser

I didn't even realize footnotes were part of the spec, and had I known, there would probably be way more of them :smile:

One other solution to this that came up in the RST discussion was having a custom URI scheme for addressing dynamic links.

This is really cool, do you think you could spend a few minutes writing some sort of post about your experience with Rust and writing this parser? I would love to hear from someone with as much experience as you about how you feel about the language.

Also, jgm seems to think that this is a faster implementation than the C reference implementation!

I'll probably write something. Overall it was a good experience. Since I was going for performance (it is faster than the cmark reference implementation), I had to go fairly low level, most of my scanning methods deal directly with byte arrays of utf-8. Other than that, I felt that the language and libraries (especially iterators) helped get this done in a clean way. It's all pure safe Rust 1.0, and I didn't feel a strong need to step outside that, even in the pursuit of performance.

I think the combination of safety and performance really is a big deal. While I was researching edge cases, I came across an undefined behavior bug in cmark. This is in spite of the library being "extensively fuzz-tested using american fuzzy lop".

Anyway, glad you like it!

4 Likes

License is MIT now: https://github.com/google/pulldown-cmark/commit/dd7054e625022128455aac5c2d8cec2f244afadf

Just need to wait for a new release.

Holy shit yesssss :confetti_ball:

So hype to clean up rustdoc

1 Like

Hey @raphlinus! What ever happened with this?