[О блоге]
[наверх]
[пред]
[2020-06-15 12:24:43+03:00]
[70621d6e748925421243c68ca6cb080eeb2d2fab]
Темы: [redo]
Ну очень мне понравился redo
Всего второй день вожусь с redo, но чем дальше, тем больше и больше мне
он нравится! Немного его рекламы:
* Может делать всё что делает make. При этом с одинаковым поведением
везде, вне зависимости от десятков диалектов разносторонних Make
* Без hard-coded предположений о том что вы там собираете
* С гораздо меньшим количеством кода (redo можно в 100 строк POSIX shell
написать)
* С возможностью большого параллелизма сборки
* С чётко и точно управляемыми зависимостями между целями
* С отсутствием специфичного синтаксиса/нового языка: по сути -- всё
есть /bin/sh, хотя без проблем можно использовать и любой другой язык
* С поддержкой и рекурсии и полной информации о зависимостях
одновременно (без "Recursive Make Considered Harmful" дерьма)
* Создание зависимостей на основе C заголовочных файлов -- теперь
абсолютно адекватно и очень просто
* Используются checksum-ы, вместо timestamp-ов, гранулярность которых --
огромная проблема и они плохо работают в мире где есть NFS, mmap,
VCS, FUSE, быстрые компьютеры, выполняющие много задач в пределах
одной секунды, нестабильные часы. Для хранения checksum использует БД
* Цели собираются атомарно -- битые/недоделанные файлы не будут
считаться успешно выполненными целями, как это было бы в Make
* Легко делать зависимости от параметров сборки, от конфига и
предоставленных опций, что в Make проблематично
* Очень удобно что явный вызов redo TGT всегда приводит к сборке этой
цели, аналогично если бы она была .PHONY. В Make проблематично делать
цели которые иногда хочется чтобы были PHONY, с другой, чтобы при
участии в качестве зависимостей не были бы
Если документация для POSIX shell это 22 экрана у меня в lynx, то в redo
вообще всего несколько понятий можно назвать, полностью описывающие его
возможности:
redo-ifchange, redo-ifcreate, XXX.do, default.XXX.do, $1/$2/$3, .redo
Это все термины которые в нём можно встретить. .redo -- state, для
хранения checksum и действий (вообще в одной из реализаций которую я
использовал, state хранится в куче файлов, так что это implementation
specific). $1/$2/$3 -- аргументы с которыми вызываются XXX.do файлы.
default.XXX.do -- цель, вызываемая в качестве fallback-а. redo-ifchange
-- собирает текущую цель, если зависимости изменились. redo-ifcreate --
аналогично, но если появились (а не изменились) указанные файлы.
DJB всё же гений! Мало того, что как криптограф он создал алгоритмы
которые хочется везде и всюду применять: Salsa20, Poly1305, *25519,
SipHash (ну не только он один его сделал), NaCl, так ещё и чисто в
программерских/технических задачах он крут: maildir, Mail-Followup-To,
redo, daemontools (выглядит тоже до гениальности просто и решает
важнейшие задачи для демонов), DNSCurve (это то, что обязано быть вместо
DNSSEC), CDB (формат БД, который Postfix например может использовать).
Причём daemontools я видел и трогал только вскольз, запуская curvedns
демон -- надо будет поближе присмотреться, глядишь, будет очередной
killer проект от DJB.
[оставить комментарий]