Состоялся первый значительный релиз 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 или 1kLoC на чистом C, с возможностью распараллеливания и продолжения сборок, включая полную реализацию SHA256 хэша;
- может не требовать установки какого-либо дополнительного софта (как на BSD системы бывает приходится ставить GNU Make) для конечного пользователя: pure POSIX shell apenwarr/minimal/do реализация занимает 1/3 лицензии GPLv3 и может быть просто включена внутрь tarball-а программы.
Отличием goredo от других реализаций redo является:
- различные user-friendly sanity/safety проверки некорректного поведения целей;
- возможность записи stderr вывода целей на диск, с TAI64N временными штампами;
- распараллеливание сборок, опционально без ограничения на кол-во задач;
- дружелюбность к umask;
- высокая скорость работы, особенно по сравнению с популярной apenwarr/redo реализацией;
- состояние сборок сохраняется в человекочитаемых и удобных для машинной обработки recfile-ах;
- прохождение функциональных тестов из apenwarr/redo и redo.sh реализаций.
Release.
Ссылка here.