|
1 | 1 | # Лабораторная работа 0 |
2 | 2 |
|
3 | | -<img alt="tomoko-kuroki" src="./.resources/tomoko-kuroki.gif" height="281"> |
| 3 | +<img alt="tomoko-kuroki" src="./.resources/tomoko-kuroki.gif" height="140"> |
4 | 4 |
|
5 | 5 | > Elixir is a dynamic, functional language for building scalable and maintainable applications. |
6 | 6 |
|
7 | 7 | **Выполнил**: Барсуков Максим Андреевич,<br>**Студент группы** P3315 |
8 | 8 |
|
9 | 9 | **Преподаватель**: Пенской Александр Владимирович. |
10 | 10 |
|
11 | | - |
12 | 11 | --- |
13 | 12 |
|
14 | | -... |
| 13 | +Для прохождения данного курса я решил использовать Elixir, позионирующийся как функциональный язык программирования, потомок Erlang, предназначенный для написания неубиваемых распределённых систем, а более конкретно больших soft-realtime систем и IoT штук. |
| 14 | + |
| 15 | +Как Ruby-enjoyer, я давно поглядывал на Elixir, но плотно с ним взаимодействовать побаивался. Я думаю, курс ФП даст мне отличную возможность поближе с ним познакомиться. |
| 16 | + |
| 17 | +Вещи, которые мне нравятся (по крайней мере, на первый взгляд) в Elixir и выгодно выделяют его на фоне остальных претендентов на роль ЯПа для курса ФП: |
| 18 | + |
| 19 | +- приспособлен к разработке параллельных и конкуррентных программ. Эликсир способен запускать мильоны процессов-акторов, работающих асинхронно, с различными приоритетами и всем таким. Эти процессы не делят память и общаются через пересылку сообщений. |
| 20 | +- приспособлен к разработке распределённых систем. Все основные проблемы написания распределённых систем вроде сихнронизации монотонных часов, общения между машинами, поиска машин, heartbeat-ы, группы процессов уже включены в язык. |
| 21 | +- приспособлен к разработке отказоустойчивых систем. Что делают кубы, когда падает сервис? Они перезапускают его. Эрланг делает то же самое, только не с сервисами, а с процессами, что значит что неожиданное исключение в одной части функционала никак вообще никак не заденет другой функционал. Гоферы пытаются достичь того же с помощью микросервисов, а в Elixir такой функционал из коробки. |
| 22 | +- тулинг. В отличие от Erlang с его хэдерами, makefile-ами и прочими пыльными приколами, эликсир за секунды позволяет создать проект, скомпилировать его, сконфигурировать его, собрать артефакт, скачать зависимости и т.д. в стандартах всех современных языков. |
| 23 | + |
| 24 | +Кроме того, отдельно мне нравится то, что Elixir, не в пример многим другим функциональным языкам, действительно используется в промышленной разработке крутых вещей по всему миру (и даже существуют вакансии в РФ). |
| 25 | + |
| 26 | + |
| 27 | +Для лабораторной работы №4 я хочу выбрать что-то, что сможет действительно раскрыть преимущества Elixir (описанные выше) и OTP. Поэтому мне было бы интересно сделать относительно простую распределенную Key-Value базу данных, либо брокер сообщений c AMQP. |
| 28 | + |
| 29 | + |
| 30 | +| Что нужно выбрать | Что выбрал я | |
| 31 | +| --- | --- | |
| 32 | +| Язык программирования | [`Elixir`](https://elixir-lang.org/) | |
| 33 | +| Компилятор/интерпретатор | [`elixir-v1.17.2`](https://github.com/elixir-lang/elixir/releases/tag/v1.17.2) (поддерживает [`Erlang/OTP 27`](https://www.erlang.org/downloads/27)) | |
| 34 | +| Система сборки | [`mix`](https://hexdocs.pm/mix/Mix.html) | |
| 35 | +| Стиль кодирования | [`christopheradams/elixir_style_guide`](https://github.com/christopheradams/elixir_style_guide) | |
| 36 | +| Система автоматического форматирования | [`mix format`](https://hexdocs.pm/mix/Mix.Tasks.Format.html) | |
| 37 | +| Lint tools | [`credo`](https://github.com/rrrene/credo) + [`dialyxir`](https://github.com/jeremyjh/dialyxir) + [`ex_check`](https://github.com/karolsluszniak/ex_check) | |
| 38 | +| Инструменты тестирования | [`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) | |
| 39 | + |
| 40 | + |
| 41 | +Для изучения 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. |
| 42 | + |
| 43 | +<img alt="elixir-and-elm" src="./.resources/elixir-and-elm.png" height="140"> |
15 | 44 |
|
16 | 45 |
|
17 | 46 | ## Лицензия <a name="license"></a> |
|
0 commit comments