Мое мнение о mustache

Крис Уонстрат - один из знаменитых и любимых мною людей Кремниевой Долины. Разработчик открытого ПО, со-основатель и CEO Github, и в целом очень креативный программист. Автор многих относительно успешных проектов:

О последнем мне бы хотелось побольше поговорить.

Mustache до сих пор остается одним из популярных шаблонизаторов в определенных кругах. Например, мое первое знакомство с ним случилось, когда я завел свой первый блог в ныне покойном Scriptogram. Шаблоны для тем там были написаны именно в mustache. В данный момент его также использует сервис Blot (клон Scriptogram).

Из положительных сторон могу отметить, что он хорошо дружит с другими шаблонизаторами. Тэги по-умолчанию {{}} можно заменить в определенных местах, если его нужно использовать вместе с другими (например, с django/jinja2 шаблонами). Также он прост для изучения, документацию можно прочитать за несколько минут. Можно сказать, что mustache хорошо заполняет нишу, когда использовать тяжеловесные шаблонизаторы не хочется, а простой замены строки в тексте недостаточно.

Однако работать с ним на практике немного непривычно. Во первых, из-за отсутствия явных тэгов (условных проверок, циклов). На примере:

{{#signed}}
    {{user}}
{{/signed}}

Результат вывода будет разным в зависимости от типа переменной signed:

В общем, хорошего мало, если не знаешь контекста. Если же эти задачи решать в django-подобных шаблонах, то выглядит это все примерно так:

{# булева переменная #}
{% if signed %}
    {{ user }}
{% endif %}

{# список #}
{% for s in signed %}
    {{ s.user }}
{% endif %}

{# словарь #}
{{ signed.user }}

Такой вариант более понятный, и дает примерное представление, каким образом выглядят (или должны выглядеть) данные.

Также отсутствие наследования (хотя я не большой фанат ООП-подобных архитектур) ограничивает нас композитами (partials). Но это уже предмет для других дискуссий.

В целом, я бы сказал, что сам по себе синтаксис mustache очень интересный. "Отсутствие" логики, как утверждает описание, может понравиться некоторым, но ограничения, которые он ставит, заставляет писать код в соответствии с его особенностями. А мне субьективно нравится код, который более явный, даже в ущерб лаконичности.