Введение
В текущий век технологий, цифровизации, открытий существует очень много способов реализации себя как творца, как созидателя. В графическом дизайне появилось очень много программ для графики, а также планшетов с подключением к компьютеру и без, с экраном и без него; в скульптуре, поэзии, спорте и любых иных сферах, которые только могут прийти в голову, цифровизация так или иначе повлияла на деятельность. То же применимо и к профессии инженера: появилось множество новых подпрофессий, появилось множество различных инструментов для создания систем (как текстовых, так и графических), много разных методик, ресурсов для обучения и т.д.
Однако же остается в силе вопрос: как поддерживать системы? Если системе больше пары лет, она использует множество сторонних решений (библиотек), а так же над ней работает много людей, появляется неизбежная энтропия: система становится запутанной, появляется множество багов, становится сложнее улучшать продукт. Люди решают это разными способами. Например, были придуманы системы версий (Git, Mercurial), которые позволяют создавать и отслеживать версии (кто бы мог подумать!), отслеживать авторов тех или иных участков систем, делать отдельные версии системы для тестов разных фич, и т.п. Также развиваются и языки программирования с окружением вокруг: постепенно внедряются решения для улучшения Developer Experience, появляются пакетные менеджеры (cargo и uv), стандартизируются уже существующие решения.
Но что, если я вам скажу, что можно в принципе не волноваться за кодовую базу, конфликты имен и прочее проблемы, связанные с кодом? Может показаться сказкой, но Unison - язык, который решил все эти проблемы на корню, просто избавившись от файлов кода и перенеся все в специальную базу!
Но обо всем по порядку: Unison - статически типизированный функциональный язык с автоматическим выводом типов, имеющий систему эффектов (которая называется “Способностями”), а также хранит код в виде AST (Абстрактное синтаксическое дерево) в базе данных. Это дает свои преимущества:
- Время сборки почти мгновенное всегда, так как не нужно перекомпилировать уже добавленное;
- Нет конфликта имен ни в каком виде;
- Тесты тоже кешируются и исполняются практически мгновенно, так как нет нужды проверять все, если не было изменений;
- Контроль версий уже встроен в саму систему, при этом нет проблем с форматированием или конфликтов при слиянии разных версий (точнее, они есть, но система сама помогает их разрешить).
Многие из этих терминов и слов могут быть непонятными, и это нормально - как говорил один великий мыслитель: “Век живи, век учись”. Все будет объяснено по ходу текста, так что не переживайте.
Во время обучения мы пройдемся через:
- Настройку и установку окружения;
- Базовые команды в UCM;
- Основы языка;
- Типы данных;
- Функции и их особенности;
- Способности функций;
- Знакомство с Unison Share;
- Написание своих программ и систем.
Сразу скажу: эту книгу я пишу во время освоения языка, так как в Интернете не нашел ни одной книги по Unison в принципе. Если будут опечатки, недостатки и ошибки, прошу присылать их мне на почту (me@ioze.net). Спасибо!
Итак, начнем!