Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Введение

В текущий век технологий, цифровизации, открытий существует очень много способов реализации себя как творца, как созидателя. В графическом дизайне появилось очень много программ для графики, а также планшетов с подключением к компьютеру и без, с экраном и без него; в скульптуре, поэзии, спорте и любых иных сферах, которые только могут прийти в голову, цифровизация так или иначе повлияла на деятельность. То же применимо и к профессии инженера: появилось множество новых подпрофессий, появилось множество различных инструментов для создания систем (как текстовых, так и графических), много разных методик, ресурсов для обучения и т.д.

Однако же остается в силе вопрос: как поддерживать системы? Если системе больше пары лет, она использует множество сторонних решений (библиотек), а так же над ней работает много людей, появляется неизбежная энтропия: система становится запутанной, появляется множество багов, становится сложнее улучшать продукт. Люди решают это разными способами. Например, были придуманы системы версий (Git, Mercurial), которые позволяют создавать и отслеживать версии (кто бы мог подумать!), отслеживать авторов тех или иных участков систем, делать отдельные версии системы для тестов разных фич, и т.п. Также развиваются и языки программирования с окружением вокруг: постепенно внедряются решения для улучшения Developer Experience, появляются пакетные менеджеры (cargo и uv), стандартизируются уже существующие решения.

Но что, если я вам скажу, что можно в принципе не волноваться за кодовую базу, конфликты имен и прочее проблемы, связанные с кодом? Может показаться сказкой, но Unison - язык, который решил все эти проблемы на корню, просто избавившись от файлов кода и перенеся все в специальную базу!

Но обо всем по порядку: Unison - статически типизированный функциональный язык с автоматическим выводом типов, имеющий систему эффектов (которая называется “Способностями”), а также хранит код в виде AST (Абстрактное синтаксическое дерево) в базе данных. Это дает свои преимущества:

  • Время сборки почти мгновенное всегда, так как не нужно перекомпилировать уже добавленное;
  • Нет конфликта имен ни в каком виде;
  • Тесты тоже кешируются и исполняются практически мгновенно, так как нет нужды проверять все, если не было изменений;
  • Контроль версий уже встроен в саму систему, при этом нет проблем с форматированием или конфликтов при слиянии разных версий (точнее, они есть, но система сама помогает их разрешить).

Многие из этих терминов и слов могут быть непонятными, и это нормально - как говорил один великий мыслитель: “Век живи, век учись”. Все будет объяснено по ходу текста, так что не переживайте.

Во время обучения мы пройдемся через:

  1. Настройку и установку окружения;
  2. Базовые команды в UCM;
  3. Основы языка;
  4. Типы данных;
  5. Функции и их особенности;
  6. Способности функций;
  7. Знакомство с Unison Share;
  8. Написание своих программ и систем.

Сразу скажу: эту книгу я пишу во время освоения языка, так как в Интернете не нашел ни одной книги по Unison в принципе. Если будут опечатки, недостатки и ошибки, прошу присылать их мне на почту (me@ioze.net). Спасибо!

Итак, начнем!