Elm 0.19, его парсер и MiniLatex

Только что вышла долгожданная версия 0.19 компилятора Elm. Что он делает по-другому? Во-первых, компиляция кода НАМНОГО быстрее. Вот сколько времени потребовалось для компиляции моего проекта kNode (5k loc) после касания всех 29 модулей:

real 0m0.958s
user 0m0.651s
sys  0m0.158s

При нормальной разработке за один раз изменяются только несколько файлов, а скорость компиляции находится в пределах шкалы времени, точнее, около 500 мс.

Во-вторых, размеры активов намного меньше. В случае kNode размер Main.min.js.gzip файла, который содержит все приложение, составляет всего 58 КБ. В анонсе 0.19 Эван Чаплицки рассказывает о том, что делает это возможным. Одним словом, гранулярность на уровне функций. Прочитать все об этом!

В-третьих, удивительно elm/parser быстро, быстро, быстро! Я использовал его для создания анализатора-рендерера MiniLatex - конвейера, который анализирует исходный текст LaTeX в абстрактное синтаксическое дерево (AST), а затем преобразует AST в HTML. Новый синтаксический анализатор делает возможным рендеринг LaTeX в HTML в реальном времени: изменения в документе MiniLatex отображаются в масштабе моргания. Это смелое заявление, поэтому убедитесь в этом сами, воспользовавшись демонстрационным приложением MiniLatex Live.

Ожидание версии 0.19 компилятора Elm того стоило. В него было вложено невероятное количество мыслей и упорного труда, и результаты говорят сами за себя. В случае моего проекта значительно улучшенная производительность парсера изменила правила игры. Да здравствует --optimize флаг!

О MiniLatex Live. Обратите внимание, сколько времени потребовалось для отображения визуализированного текста. Приложение загружается, затем анализирует и отображает исходный текст в левом окне и, наконец, отображается в правом окне. Если на все это уйдет больше, чем моргание, я куплю тебе пива. Если вы хотите увидеть, что происходит с более длинным документом, взгляните на Волновые пакеты на kNode. Или перейдите на kNode.io, введите волна в поле поиска и нажмите Ctrl-Enter (Ctrl-Return). Редактирование документов всегда выполняется быстрее, чем первоначальная визуализация всего документа.

Техническое примечание. Библиотека MiniLatex, 3.7k loc, компилируется отдельно от приложения kNode. kNode взаимодействует с серверной частью Elixir 3k loc, которая обслуживает файлы LaTeX, управляет аутентификацией пользователей и т. д. Приложение kNode также взаимодействует с веб-сервером Nginx, оснащенным PHP, для преобразования файлов MiniLatex в PDF для печати.

Некоторые технические примечания по MiniLatex: На пути к LaTeX в браузере

.