«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Блеск и сияние заставляют мое сердцебиение снижаться – пример из практики

Блеск и сияние заставляют мое сердцебиение снижаться – пример из практики

Опубликовано 8 ноября 2024 г.
Просматривать:961

Lustre and Gleam Make my Heart Rate Go Down - a Case Study

Недавно ко мне обратился клиент по поводу javascript-приложения для «финансовой оценки» на их сайте Wordpress, которое больше не работает. У него было множество проблем, и в конце концов проще всего было его восстановить.

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

Я не фронтенд-разработчик. Мне удобнее всего на бэкэнде. Но я реализовал проекты на Vue, Angular, React... Они работают, но я им не до конца доверяю. И по прошествии месяцев и лет у меня всегда возникает растущее беспокойство по поводу того, насколько устарели зависимости, включая саму цепочку инструментов разработки.

Введите блеск

Gleam — это удобный язык для создания типобезопасных и масштабируемых систем!
~ Сайт Gleam

Я был в восторге от Gleam с тех пор, как они впервые объявили, что первая версия готова к производству. Его функциональный стиль, неизменяемость, исчерпывающее сопоставление с образцом, вывод типов и простота, стабильность Go означали, что Gleam поразил все мои лучшие места.

Система типов в значительной степени гарантирует, что если ваш код скомпилируется, он будет работать. Я еще не встречал в своем коде Gleam ошибки, которая не была бы версией «мне плохо, я забыл закончить это реализовать».

Введите блеск

Gleam был создан для работы на BEAM (легендарной, проверенной в боях виртуальной машине Erlang), но у него также есть цель компиляции Javascript. Это означает, что его можно легко отправить на Node и в браузер.

Lustre — это выдающаяся интерфейсная платформа Gleam. Это верный порт Elm в экосистему Gleam, в котором реализована архитектура управления состоянием Elm «Модель -> Просмотр -> Обновить».

Это значительно более простая концептуальная модель, чем другие интерфейсные фреймворки. Вместо того, чтобы предлагать управление состоянием в качестве дополнительной библиотеки (я смотрю на вас, Redux), модель управления состоянием Lustre является его сердцем.

Вы просто описываете каждый глагол, который может использоваться для изменения состояния вашего приложения, и сопоставляете этот глагол с типобезопасной чистой операцией, которая возвращает обновленную версию модели. Функции представления (также чистые) вытекают непосредственно из состояния этой унитарной модели.

Lustre также предоставляет систему управляемых эффектов, поэтому даже в случае сбоя различных операций ввода-вывода код вашего приложения может быть реализован с использованием полностью чистых функций.

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

Сладкий, сладкий шаблон

Приложения Lustre могут включать немного больше шаблонов для настройки приложения, создания всех типов и тому подобного. Но ...

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

Мне сложно выразить, насколько это отличается от моего предыдущего опыта работы с JavaScript. В моем приложении могло бы быть меньше LOC, если бы я делал его в другой среде. Но поверю ли я, что он не сломается? Было бы это так же просто понять?

Конечный продукт

Я отправил свое приложение вовремя и в рамках бюджета. Клиент действительно доволен этим. И я сплю спокойно, зная, что этот проект действительно сделан.

Мало того, он комфортно живет в Wordpress из всех мест. Я сделал шорткод для загрузки скомпилированных ресурсов, поместил его на страницу и все.

Пакет JS весит 18,1 КБ, минимизирован и заархивирован. Это почти так же мало, как htmx. За то, что плакала вслух!

У меня есть некоторые сомнения по поводу запуска проекта с использованием пока еще относительно малоизвестного языка и структуры. Но эти сомнения успокаиваются, зная, что приложение не сломается и что сам Gleam можно изучить за полдня.

Самое важное: честно говоря, я не думаю, что был бы так же уверен в конечном продукте, в стабильности цепочки инструментов или в своей способности обновлять ее в будущем, если бы я создавал ее с использованием чего-либо другого. .

Мой пульс

Теперь я перехожу к всей моей мотивации для написания этого поста: ощущение, что приложение Lustre находится в разработке

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

Мне почти неловко говорить это, но большая часть остального моего кода на каком-то уровне кажется обузой. Особенно JavaScript. Даже если это Typescript, даже если там есть тесты. Это вызывает у меня беспокойство, как будто оно усеяно спрятанными минами и ловушками.

Может быть, это проблема с навыками. Возможно, меня просто слишком много раз обжигали.

Глядя на мой код Gleam/Lustre, я чувствую себя спокойным.

Вот и все. Это твит.

В заключение я искренне желаю, чтобы другие разработчики попробовали Gleam и Lustre, чтобы они тоже могли насладиться тем же дзен-подобным блаженством, рассматривая свой интерфейсный код.

Спасибо, что читаете.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/enoonan/lustre-and-gleam-make-my-heart-rate-go-down-a-case-study-5765?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с Study_golang@163 .comdelete
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3