{"id":21711297,"url":"https://github.com/maxbarsukov-itmo/functional-programming-0","last_synced_at":"2025-06-28T11:33:44.920Z","repository":{"id":256420289,"uuid":"854839717","full_name":"maxbarsukov-itmo/functional-programming-0","owner":"maxbarsukov-itmo","description":"🧪λ Функциональное программирование: Лабораторная работа №0","archived":false,"fork":false,"pushed_at":"2025-01-26T16:09:55.000Z","size":42357,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-03-20T18:17:43.492Z","etag":null,"topics":["essay","functional-programming","itmo","laboratory-work","maxbarsukov"],"latest_commit_sha":null,"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","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/maxbarsukov-itmo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-09-09T21:33:44.000Z","updated_at":"2025-01-26T16:09:59.000Z","dependencies_parsed_at":"2024-09-10T16:43:30.327Z","dependency_job_id":"ecff51ad-bd2b-4b8c-9b72-8e47bf472ba9","html_url":"https://github.com/maxbarsukov-itmo/functional-programming-0","commit_stats":null,"previous_names":["maxbarsukov-itmo/fp-0","maxbarsukov-itmo/functional-programming-0"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/maxbarsukov-itmo/functional-programming-0","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxbarsukov-itmo%2Ffunctional-programming-0","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxbarsukov-itmo%2Ffunctional-programming-0/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxbarsukov-itmo%2Ffunctional-programming-0/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxbarsukov-itmo%2Ffunctional-programming-0/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maxbarsukov-itmo","download_url":"https://codeload.github.com/maxbarsukov-itmo/functional-programming-0/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxbarsukov-itmo%2Ffunctional-programming-0/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262422158,"owners_count":23308600,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["essay","functional-programming","itmo","laboratory-work","maxbarsukov"],"created_at":"2024-11-25T23:21:10.965Z","updated_at":"2025-06-28T11:33:44.898Z","avatar_url":"https://github.com/maxbarsukov-itmo.png","language":null,"readme":"# Лабораторная работа 0\n\n\u003cimg alt=\"tomoko-kuroki\" src=\"./.resources/tomoko-kuroki.gif\" height=\"140\"\u003e\n\n\u003e Elixir is a dynamic, functional language for building scalable and maintainable applications.\n\n**Выполнил**: Барсуков Максим Андреевич,\u003cbr\u003e**Студент группы** P3315\n\n**Преподаватель**: Пенской Александр Владимирович.\n\n---\n\nДля прохождения данного курса я решил использовать Elixir, позионирующийся как функциональный язык программирования, потомок Erlang, предназначенный для написания неубиваемых распределённых систем, а более конкретно больших soft-realtime систем и IoT штук.\n\nКак Ruby-enjoyer, я давно поглядывал на Elixir, но плотно с ним взаимодействовать побаивался. Я думаю, курс ФП даст мне отличную возможность поближе с ним познакомиться.\n\nВещи, которые мне нравятся (по крайней мере, на первый взгляд) в Elixir и выгодно выделяют его на фоне остальных претендентов на роль ЯПа для курса ФП:\n\n- приспособлен к разработке параллельных и конкуррентных программ. Эликсир способен запускать мильоны процессов-акторов, работающих асинхронно, с различными приоритетами и всем таким. Эти процессы не делят память и общаются через пересылку сообщений.\n- приспособлен к разработке распределённых систем. Все основные проблемы написания распределённых систем вроде сихнронизации монотонных часов, общения между машинами, поиска машин, heartbeat-ы, группы процессов уже включены в язык.\n- приспособлен к разработке отказоустойчивых систем. Что делают кубы, когда падает сервис? Они перезапускают его. Эрланг делает то же самое, только не с сервисами, а с процессами, что значит что неожиданное исключение в одной части функционала никак вообще никак не заденет другой функционал. Гоферы пытаются достичь того же с помощью микросервисов, а в Elixir такой функционал из коробки.\n- тулинг. В отличие от Erlang с его хэдерами, makefile-ами и прочими пыльными приколами, эликсир за секунды позволяет создать проект, скомпилировать его, сконфигурировать его, собрать артефакт, скачать зависимости и т.д. в стандартах всех современных языков. \n\nКроме того, отдельно мне нравится то, что Elixir, не в пример многим другим функциональным языкам, действительно используется в промышленной разработке крутых вещей по всему миру (и даже существуют вакансии в РФ).\n\n\nДля лабораторной работы №4 я хочу выбрать что-то, что сможет действительно раскрыть преимущества Elixir (описанные выше) и OTP. Поэтому мне было бы интересно сделать относительно простую распределенную Key-Value базу данных, либо брокер сообщений c AMQP.\n\n\n| Что нужно выбрать | Что выбрал я |\n| --- | --- |\n| Язык программирования | [`Elixir`](https://elixir-lang.org/) |\n| Компилятор/интерпретатор | [`elixir-v1.17.2`](https://github.com/elixir-lang/elixir/releases/tag/v1.17.2) (поддерживает [`Erlang/OTP 27`](https://www.erlang.org/downloads/27)) |\n| Система сборки | [`mix`](https://hexdocs.pm/mix/Mix.html) |\n| Стиль кодирования | [`christopheradams/elixir_style_guide`](https://github.com/christopheradams/elixir_style_guide) |\n| Система автоматического форматирования | [`mix format`](https://hexdocs.pm/mix/Mix.Tasks.Format.html) |\n| Lint tools | [`credo`](https://github.com/rrrene/credo) + [`dialyxir`](https://github.com/jeremyjh/dialyxir) + [`ex_check`](https://github.com/karolsluszniak/ex_check) |\n| Инструменты тестирования | [`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) |\n\n\nДля изучения 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.\n\n\u003cimg alt=\"elixir-and-elm\" src=\"./.resources/elixir-and-elm.png\" height=\"140\"\u003e\n\n\n## Лицензия \u003ca name=\"license\"\u003e\u003c/a\u003e\n\nПроект доступен с открытым исходным кодом на условиях [Лицензии MIT](https://opensource.org/license/mit/).\n\n*Авторские права 2024 Max Barsukov*\n\n**Поставьте звезду :star:, если вы нашли этот проект полезным.**\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxbarsukov-itmo%2Ffunctional-programming-0","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaxbarsukov-itmo%2Ffunctional-programming-0","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxbarsukov-itmo%2Ffunctional-programming-0/lists"}