# Frequently asked questions

## What is the origin of the name "Maud"?

Maud is named after a [character] from *My Little Pony: Friendship is Magic*.
It does not refer to the [poem] by Alfred Tennyson,
though other people have brought that up in the past.

Here are some reasons why I chose this name:

* "Maud" shares three letters with "markup";

* The library is efficient and austere, like the character;

* Google used to maintain a site called ["HTML5 Rocks"],
  and Maud (the character) is a geologist.

[character]: http://mlp.wikia.com/wiki/Maud_Pie
[poem]: https://en.wikipedia.org/wiki/Maud_and_other_poems
["HTML5 Rocks"]: https://techcrunch.com/2010/06/22/html5rocks-google/

## Why does `html!` always allocate a `String`? Wouldn't it be more efficient if it wrote to a handle directly?

Good question! In fact, Maud did work this way in the past.

But it's hard to support buffer reuse in an ergonomic way.
The approaches I tried
either involved too much boilerplate,
or caused mysterious lifetime issues,
or both.
Moreover, Maud's allocation pattern—with small, short-lived buffers—follow the fast path in modern allocators.
These reasons are why I changed `html!` to return a `String` in version 0.11.

That said,
Rust has changed a lot since then,
and some of those old assumptions
might no longer hold today.
So this decision could be revisited
prior to the 1.0 release.

## Why is Maud written as a procedural macro? Can't it use `macro_rules!` instead?

This is certainly possible, and indeed the [Horrorshow] library works this way.

I use procedural macros because they are more flexible.
There are some syntax constructs in Maud that are hard to parse with `macro_rules!`;
better diagnostics are a bonus as well.

[Horrorshow]: https://github.com/Stebalien/horrorshow-rs

## Maud has had a lot of releases so far. When will it reach 1.0?

I originally planned to cut a 1.0
after implementing stable support.
But now that's happened,
I've realized that there are a couple design questions
that I'd like to resolve
before marking that milestone.
Expect a blog post on this topic Very Soon®.

## Why doesn't Maud implement [context-aware escaping]?

I agree that context-aware escaping is very important,
especially for the kind of small-scale development
that Maud is used for.
But it's a complex feature,
with security implications,
so I want to take the time
to get it right.

Please follow [#181] for the latest developments!

[context-aware escaping]: https://security.googleblog.com/2009/03/reducing-xss-by-way-of-automatic.html
[#181]: https://github.com/lambda-fairy/maud/issues/181