An open API service indexing awesome lists of open source software.

https://github.com/maxbarsukov-itmo/functional-programming-0

🧪λ Функциональное программирование: Лабораторная работа №0
https://github.com/maxbarsukov-itmo/functional-programming-0

essay functional-programming itmo laboratory-work maxbarsukov

Last synced: 7 months ago
JSON representation

🧪λ Функциональное программирование: Лабораторная работа №0

Awesome Lists containing this project

README

          

# Лабораторная работа 0

tomoko-kuroki

> Elixir is a dynamic, functional language for building scalable and maintainable applications.

**Выполнил**: Барсуков Максим Андреевич,
**Студент группы** P3315

**Преподаватель**: Пенской Александр Владимирович.

---

Для прохождения данного курса я решил использовать Elixir, позионирующийся как функциональный язык программирования, потомок Erlang, предназначенный для написания неубиваемых распределённых систем, а более конкретно больших soft-realtime систем и IoT штук.

Как Ruby-enjoyer, я давно поглядывал на Elixir, но плотно с ним взаимодействовать побаивался. Я думаю, курс ФП даст мне отличную возможность поближе с ним познакомиться.

Вещи, которые мне нравятся (по крайней мере, на первый взгляд) в Elixir и выгодно выделяют его на фоне остальных претендентов на роль ЯПа для курса ФП:

- приспособлен к разработке параллельных и конкуррентных программ. Эликсир способен запускать мильоны процессов-акторов, работающих асинхронно, с различными приоритетами и всем таким. Эти процессы не делят память и общаются через пересылку сообщений.
- приспособлен к разработке распределённых систем. Все основные проблемы написания распределённых систем вроде сихнронизации монотонных часов, общения между машинами, поиска машин, heartbeat-ы, группы процессов уже включены в язык.
- приспособлен к разработке отказоустойчивых систем. Что делают кубы, когда падает сервис? Они перезапускают его. Эрланг делает то же самое, только не с сервисами, а с процессами, что значит что неожиданное исключение в одной части функционала никак вообще никак не заденет другой функционал. Гоферы пытаются достичь того же с помощью микросервисов, а в Elixir такой функционал из коробки.
- тулинг. В отличие от Erlang с его хэдерами, makefile-ами и прочими пыльными приколами, эликсир за секунды позволяет создать проект, скомпилировать его, сконфигурировать его, собрать артефакт, скачать зависимости и т.д. в стандартах всех современных языков.

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

Для лабораторной работы №4 я хочу выбрать что-то, что сможет действительно раскрыть преимущества Elixir (описанные выше) и OTP. Поэтому мне было бы интересно сделать относительно простую распределенную Key-Value базу данных, либо брокер сообщений c AMQP.

| Что нужно выбрать | Что выбрал я |
| --- | --- |
| Язык программирования | [`Elixir`](https://elixir-lang.org/) |
| Компилятор/интерпретатор | [`elixir-v1.17.2`](https://github.com/elixir-lang/elixir/releases/tag/v1.17.2) (поддерживает [`Erlang/OTP 27`](https://www.erlang.org/downloads/27)) |
| Система сборки | [`mix`](https://hexdocs.pm/mix/Mix.html) |
| Стиль кодирования | [`christopheradams/elixir_style_guide`](https://github.com/christopheradams/elixir_style_guide) |
| Система автоматического форматирования | [`mix format`](https://hexdocs.pm/mix/Mix.Tasks.Format.html) |
| Lint tools | [`credo`](https://github.com/rrrene/credo) + [`dialyxir`](https://github.com/jeremyjh/dialyxir) + [`ex_check`](https://github.com/karolsluszniak/ex_check) |
| Инструменты тестирования | [`espec`](https://github.com/antonmi/espec), [`ex_machina`](https://github.com/beam-community/ex_machina), [`faker`](https://github.com/elixirs/faker) и [`mox`](https://github.com/dashbitco/mox) |

Для изучения Elixir я планирую использовать книгу [Elixir In Action](./books/elixir-in-action-3rd-ed.pdf) (и, опицонально, [Designing Elixir Systems With OTP](./books/designing-elixir-systems-with-otp.rar)), [рекомендованную](https://elixir-lang.org/learning.html#books) на официальном сайте Elixir.

elixir-and-elm

## Лицензия

Проект доступен с открытым исходным кодом на условиях [Лицензии MIT](https://opensource.org/license/mit/).

*Авторские права 2024 Max Barsukov*

**Поставьте звезду :star:, если вы нашли этот проект полезным.**