24.10.2021

Релиз goredo 1.0.0, реализации системы сборки redo, предложенной DJB

Состоялся первый значительный релиз goredo — реализации системы сборки redo, предложенной Дэниелем Бернштейном (DJB) в качестве замены утилите Make. Goredo написан на языке Go и распространяются под лицензией GPLv3.

Redo решает фундаментальные проблемы и устраняет недостатки Make, такие как:

  • отсутствие атомарной сборки целей из коробки;
  • практическая неработоспособность (как минимум, при распараллеливании сборок) при использовании рекурсивных вызовов Make (Recursive Make Considered Harmful (by Peter Miller)), из-за отсутствия блокировок или глобального состояния;
  • потенциальная неработоспособность определения устаревания зависимости при использовании технологий mmap, NFS, FUSE, VCS из-за использования mtime;
  • невозможность динамически задавать зависимости;
  • отсутствие автоматической зависимости от правила сборки, сложность создания зависимостей от переменных окружения;
  • невозможность иметь цели с пробелами в именах.

По сравнению с другими системами сборки, redo:

  • имеет минимальный порог вхождения: не требует изучения нового языка, синтаксиса или диалекта: для большинства проектов достаточно знать и использовать ровно одну дополнительную команду redo-ifchange. Полное описание redo может уместиться на одной странице экрана;
  • полностью независим от используемого языка программирования и языка описания целей: по умолчанию они пишутся на POSIX shell, но могут быть на чём угодно другом, включая бинарные исполняемые скомпилированные программы;
  • может задавать зависимости на несуществующие цели (redo-ifcreate);
  • очень прост в реализации: может быть реализован в 100 SLoC на POSIX shell или 1 kLoC на чистом C, с возможностью распараллеливания и продолжения сборок, включая полную реализацию хэша SHA256;
  • не требует установки каких-либо дополнительных программ (на BSD-системы бывает приходится ставить GNU Make) для конечного пользователя: реализация apenwarr/minimal/do на чистом POSIX shell занимает 1/3 размера лицензии GPLv3 и может быть просто включена внутрь архива программы.

Отличием goredo от других реализаций redo является:

  • различные user-friendly sanity/safety проверки некорректного поведения целей;
  • возможность записи stderr вывода целей на диск, с TAI64N временными штампами;
  • распараллеливание сборок, опционально без ограничения на количество задач;
  • дружелюбность к umask;
  • высокая скорость работы, особенно по сравнению с популярной реализацией apenwarr/redo;
  • состояние сборок сохраняется в человекочитаемых и удобных для машинной обработки recfile;
  • прохождение функциональных тестов из реализаций apenwarr/redo и redo.sh.

Источник.