Mareo: Reason + BuckleScript + Марио

Mareo - это простая демонстрация Mario для холста HTML, написанная на Reason и скомпилированная в JS с помощью BuckleScript. Это форк MariOCaml; Я изменил мета-материал, чтобы продемонстрировать рабочий процесс проекта для нашего сообщества.

Играй здесь!

Почему

Reason и BuckleScript отлично взаимодействуют с существующей экосистемой JS, но люди часто спрашивают нас, как выглядит рабочий процесс в теоретическом, идеальном мире. Чтобы проиллюстрировать это, мы сделали репо: https://github.com/reasonml/Mareo.

Этот репозиторий и сообщение в блоге также служат демонстрацией некоторых основных ценностей сообщества. Обратите внимание, что это могло быть, а могло и не быть достигнуто, но мы упорно работаем над этим.

Прохождение репо

Простота

Первое, что вы можете заметить, это то, что репозиторий Mareo лишен многих файлов конфигурации; есть обычные package.json, .gitignore, плюс bsconfig.json, используемые для построения проекта. Чтобы было ясно: дополнительные мета-файлы могут появиться на более поздних этапах, хотя в целом сообщество изо всех сил пытается противостоять им.

Открыв package.json, вы увидите знакомые зависимости (только две, обе devDependencies!): Bs-platform и rollup (Webpack тоже подойдет). Процесс установки и сборки брутально банален (_5 _) *. На самом деле, несколько человек входят в нашу комнату раздора и говорят: «Ого, вот и все?» Ну да, вот и все =). У нас есть немало идей, которые мы хотели бы реализовать, если в будущем создадим собственный менеджер пакетов, но ради адаптации существующих пользователей JavaScript мы решили применить менее «блестящий» подход в пользу знакомства. чтобы смягчить навороты мета-уровня, чтобы выявить истинную блестящую часть нашего стека: сам язык. Вам не нужно жарить во фритюре, естественно, хорошие ингредиенты.

Взаимодействие

BS поддерживает широкий спектр форматов модуля вывода: CommonJS, AMD, Google closure, ES6 и некоторые другие. Mareo компилируется в ES6 (точнее, es6-global, который разрешает node_modules относительные пути для браузеров). Поскольку Safari изначально поддерживает модули ES6, в репозитории Mareo нет этапа сборки на этапе разработки. Рабочий процесс постепенно снижается до использования свертки во время разработки для Chrome и Firefox (сворачивание тоже происходит быстро! Престижность команде). См. index.html, чтобы узнать, как это делается. Только один дополнительный тег скрипта!

Сгенерированные файлы JavaScript возвращаются; Таким образом, вы точно увидите, к чему компилируются ваши изменения Reason, прямо в вашем элементе управления версиями (подумайте о тестах моментальных снимков, но для всех выходных данных JS). Вы также можете потребовать Mareo в качестве сторонней зависимости без необходимости использования Reason и BuckleScript. Хотя в данном случае не имеет смысла моделировать Mareo как зависимость.

Задача для вас: портировать JS-библиотеку на Reason + BuckleScript так, чтобы ваши JS-иждивенцы этого не заметили! Если вы переносите компонент ReactJS, могу ли я предложить ReasonReact?

Представление

То, что у нас нет этапа связывания во время разработки, плюс тот факт, что инкрементная сборка BSB составляет около 100 мс, означает, что в момент сохранения изменений сборка уже будет завершена. Мы твердо верим, что более тесная итерационная обратная связь помогает развитию проекта (именно поэтому мы в первую очередь выбрали быстрый статически типизированный язык), иногда даже в большей степени, чем другие функции. Горячая перезагрузка тоже подойдет.

О производительности во время выполнения почти не стоит и говорить. Наши привязки часто не имеют накладных расходов времени выполнения. Да, это пустой выходной файл. Взаимодействие DOM откомпилировано. Вывод Uglified + gzip - это 13 КБ полностью идиоматического кода без дальнейшей оптимизации.

Сосредоточьтесь на конкретности

Ака, КОРАБЛЬ! Лично я любитель отличных конкретных продуктов для конечных пользователей (крутые игрушки вроде этой в счет!). Они свидетельствуют о том, что мы успешно достигли своей цели как инструмент инфра-уровня, помимо создания дополнительных уровней абстракции с обещаниями будущей ценности. В контексте демонстрации Mareo, я чувствую, что физика прыжков и обнаружение столкновений Марио немного отстает (не винить оригинальное репо, которое было сделано во время хакатона); было бы здорово, если бы кто-нибудь с более зорким глазом мог их исправить. Запросы на вытягивание приветствуются!

Резюме

Благодарим BuckleScript, команду объединения и оригинальный MariOCaml!

Продолжайте отгрузку! знак равно

* К сожалению, банальность не продается. Вот почему я пытаюсь компенсировать это тем, что пишу эти сообщения в блоге.