Что: 70621d6e748925421243c68ca6cb080eeb2d2fab Когда: 2020-06-15 12:24:43+03:00 ------------------------------------------------------------------------ Темы: 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. ------------------------------------------------------------------------ оставить комментарий: mailto:comment@blog.stargrave.org?subject=Re:%20%D0%9D%D1%83%20%D0%BE%D1%87%D0%B5%D0%BD%D1%8C%20%D0%BC%D0%BD%D0%B5%20%D0%BF%D0%BE%D0%BD%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D1%81%D1%8F%20redo%20%2870621d6e748925421243c68ca6cb080eeb2d2fab%29 ------------------------------------------------------------------------ Сгенерирован: SGBlog 0.34.0