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
- Host: GitHub
- URL: https://github.com/maxbarsukov-itmo/functional-programming-0
- Owner: maxbarsukov-itmo
- License: mit
- Created: 2024-09-09T21:33:44.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2025-01-26T16:09:55.000Z (12 months ago)
- Last Synced: 2025-03-20T18:17:43.492Z (10 months ago)
- Topics: essay, functional-programming, itmo, laboratory-work, maxbarsukov
- Homepage: https://gitlab.se.ifmo.ru/functional-programming/main/-/blob/master/laboratory-course.md#%D0%BB%D0%B0%D0%B1%D0%BE%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%BD%D0%B0%D1%8F-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-0
- Size: 40.4 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Лабораторная работа 0

> 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.

Проект доступен с открытым исходным кодом на условиях [Лицензии MIT](https://opensource.org/license/mit/).
*Авторские права 2024 Max Barsukov*
**Поставьте звезду :star:, если вы нашли этот проект полезным.**