{"id":22804463,"url":"https://github.com/armemius/functionalprogramming","last_synced_at":"2025-03-30T20:27:04.550Z","repository":{"id":261263069,"uuid":"862423314","full_name":"Armemius/FunctionalProgramming","owner":"Armemius","description":"Repo for a collection of labworks for a functional programming course in ITMO University (ВТ СППО).","archived":false,"fork":false,"pushed_at":"2024-12-10T17:00:33.000Z","size":363,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-05T23:33:22.418Z","etag":null,"topics":["itmo","study"],"latest_commit_sha":null,"homepage":"https://armemius.github.io/FunctionalProgramming/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Armemius.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2024-09-24T15:16:22.000Z","updated_at":"2024-12-07T09:52:04.000Z","dependencies_parsed_at":"2024-11-21T18:20:36.155Z","dependency_job_id":"972a18d4-89db-4179-b139-b983cb2de596","html_url":"https://github.com/Armemius/FunctionalProgramming","commit_stats":null,"previous_names":["armemius/functionalprogramming"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Armemius%2FFunctionalProgramming","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Armemius%2FFunctionalProgramming/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Armemius%2FFunctionalProgramming/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Armemius%2FFunctionalProgramming/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Armemius","download_url":"https://codeload.github.com/Armemius/FunctionalProgramming/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246376356,"owners_count":20767267,"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":["itmo","study"],"created_at":"2024-12-12T10:08:18.038Z","updated_at":"2025-03-30T20:27:04.528Z","avatar_url":"https://github.com/Armemius.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Обоснование выбора языка\n\n`Степанов Арсений Алексеевич - 368849`\n\nМне давно была интересна тема различных парадигм программирования, чаще и больше\nвсего изучаются процедурные и\nобъектно-ориентированные подходы, но в современных реалиях только ими не\nограничивается, всё большее распространение\nполучает функциональная парадигма. Большое впечатление на меня, как человека,\nкоторый много занимается низкоуровневой\nразработкой на C и C++, произвёл Rust. Благодаря ему я узнал про новые и более\nлаконичные способы решения задач с\nиспользованием пресловутой функциональной парадигмы, над решением которых раньше\nприходилось что-то изобретать.\n\nПосле первого знакомства с парадигмой и выбора чисто функционального языка для\nдальнейшего изучения я пришёл к\nследующему списку того, что мне интересно для изучения в рамках данного курса:\n\n- **Rust** -- за возможность заниматься низкоуровневой разработкой применяя\n  приёмы функционального программирования,\n  надёжность, скорость и безопасность\n- **OCaml** -- за гибкость между императивным и функциональным стилем\n  программирования\n- **Haskell** -- за чистую функциональность языка, его лаконичность, строгость и\n  способность создавать абстракции\n  высокого уровня без потери производительности\n\nНесмотря на то что **Rust** не рекомендовался для изучения в рамках данного\nкурса, я всё-таки хотел бы использовать\nименно его для выполнения работ. На проектах на моей работе потихоньку начинают\nпереходить на **Rust** с **C** и **C++**\nи данный курс может помочь с углублением в функциональную часть **Rust**'а как\nдополнение к основному изучению\nособенностей языка, которые мне необходимо будет освоить в любом случае.\n\nВ качестве проекта я хотел бы отойти от системного программирования, которым\nмного занимался в последнее время и\nпознакомиться с разработкой бэкенда, изучить возможные библиотеки. Я рассчитываю\nна то что этот опыт может пригодиться\nпри работе с сетями при разработке программного обеспечения для встроенных\nсистем\n\n## Материалы для изучения\n\nВ качестве основного материала для изучения предлагается использовать\nофициальную документацию, собранную в одной книге.\nОна доступна бесплатно и представляет исчерпывающее описание синтаксиса,\nсемантики и механизмов языка\n\n[Ссылка на книгу в веб-формате](https://doc.rust-lang.org/stable/book/)\n\n## Используемый инструментарий\n\n- Компилятор:\n\n  - Rustc — это стандартный компилятор Rust, который отвечает за\n    преобразование кода в машинный. Он строго\n    типизирован, что позволяет находить ошибки на этапе компиляции,\n    обеспечивая безопасность при работе с памятью без\n    необходимости использовать сборщик мусора.\n\n- Система сборки:\n\n  - Cargo — это встроенный менеджер пакетов и система сборки для проектов на\n    Rust. Cargo автоматизирует такие задачи,\n    как управление зависимостями, сборка проекта, запуск тестов и генерация\n    документации. Важное преимущество Cargo —\n    это интеграция с экосистемой Crates, которая позволяет легко использовать\n    сторонние библиотеки.\n\n- Инструменты для автоматического форматирования:\n\n  - rustfmt — инструмент для автоматического форматирования кода в\n    соответствии со стандартами оформления Rust. Это\n    официальное средство форматирования, которое помогает поддерживать единый\n    стиль во всех проектах.\n\n- Lint tools:\n\n  - Clippy — это популярный статический анализатор для Rust, который помогает\n    выявлять неэффективный или потенциально\n    опасный код. Clippy также даёт советы по улучшению стиля и качества кода.\n\n- Инструменты тестирования:\n\n  - Встроенные возможности тестирования с использованием аннотации `#[test]`\n    позволяют писать модульные и\n    интеграционные тесты. Cargo поддерживает запуск тестов через команду\n    `cargo test`.\n  - Proptest — библиотека для тестирования на основе свойств (property-based\n    testing), которая позволяет находить\n    пограничные случаи в коде, автоматически генерируя тестовые данные.\n\n- Стиль кодирования:\n\n  - Rust имеет официальный Rust Style Guide, который определяет правила\n    оформления и рекомендации для написания\n    читаемого и поддерживаемого кода. Поддерживается использование snake_case\n    для имен переменных и функций, а также\n    CamelCase для имен типов и структур.\n\n## Источники\n\n- [Официальный сайт Rust](https://rust-lang.org)\n- [Документация по Rust](https://doc.rust-lang.org)\n- [Официальный сайт Haskell](https://www.haskell.org/)\n- [Статьи про Haskell на Habr](https://habr.com/ru/hubs/haskell/articles/)\n- [Официальный сайт OCaml](https://ocaml.org/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farmemius%2Ffunctionalprogramming","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farmemius%2Ffunctionalprogramming","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farmemius%2Ffunctionalprogramming/lists"}