[О блоге] [наверх] [пред] [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.

    [оставить комментарий]