From d77aa48ce902eb82854aa87b5c6596cea75c7f0c Mon Sep 17 00:00:00 2001 From: vladislav Date: Thu, 16 Oct 2025 15:19:55 +0300 Subject: [PATCH] Lab 0 + essay about Gleam --- Lab 0/Essay.md | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 Lab 0/Essay.md diff --git a/Lab 0/Essay.md b/Lab 0/Essay.md new file mode 100644 index 0000000..be9e7c2 --- /dev/null +++ b/Lab 0/Essay.md @@ -0,0 +1,43 @@ +# Почему я выбрал **Gleam** + +- **Статическая типизация с выводом типов.** Компилятор Gleam обнаруживает ошибки на этапе компиляции, что помогает с проблемой runtime косяков и повышает надёжность кода в целом, при этом сохраняя лаконичность за счёт вывода типов. +- **Компиляция в Erlang/Elixir (BEAM).** Gleam работает на виртуальной машине BEAM, что даёт отказоустойчивость, лёгкость параллельных вычислений и Hot Reload что очень удобно! И в js по-моему он тоже может компилироваться. +- **Простой и читаемый синтаксис.** Gleam сильно приличнее и читаемее выглядит в сравнении с собственно Erlang и тем более чем-то вроде Clojure. Я избалован читаемостью и синтаксисом Kotlin) +- **Он новый**. Интересно посмотреть как развивалась функциональная парадигма сквозь время, куда мы пришли и что нам это даёт? Плюс я немного устал от акторной модели в Tact/FunC (Экзотика для блокчейна TON) и от ООП (Kotlin, Java) + +--- + +## Стек инструментов + +- **gleam** — основной инструмент: компилятор, менеджер пакетов, запуск тестов +- **rebar3 / erlang.mk** — совместимость с Erlang-сборкой (при необходимости) +- **gleam format** — встроенное форматирование кода +- **gleam test** — встроенная система модульных тестов + +--- + +## ЛР-4: Анализатор кода на Gleam для выявления "запахов" в Erlang/Elixir проектах + +*Что хочу сделать*: +Разработать инструмент для статического анализа исходного кода Erlang/Elixir проектов, который будет обнаруживать определённые "запахи кода", они же антипаттерны — такие как длинные функции, избыточная вложенность, нарушение принципов функционального программирования. + +Почему Gleam подходит: строгая статическая типизация гарантирует корректность работы с AST Erlang/Elixir, алгебраические типы данных точно моделируют структуру анализируемых программ, pattern matching упрощает реализацию детекторов антипаттернов, а компиляция в BEAM обеспечивает естественную интеграцию с экосистемой Erlang для анализа реальных проектов. Функциональная природа Gleam идеально соответствует задаче анализа функционального кода. + +--- + +## Книга для изучения + +Именно что книг (которые бумажные или в .pdf) я по gleam не нашёл, зато есть такой интерактивный "путеводитель": https://tour.gleam.run. Так что придётся опираться на него. + +Я считаю что по формату он не подходит на роль книги, но по содержанию вполне. + +--- + +## Материалы для эссе и подготовки + +- Сайт gleam: https://gleam.run +- Много сниппетов и документации https://tour.gleam.run +- https://habr.com/ru/articles/721776/ +- https://katafrakt.me/2021/10/13/app-with-elixir-business-logic-with-gleam/ +- https://nuancesprog.ru/p/23846/ +- https://github.com/plutov/websites_checker \ No newline at end of file