
Комментарии 14
Конечно, свой велосипед с кучей !>:|&, в каждом втором слове кажется автору более удобным... Но IMHO, глядя на Make и на Nest рядом, откровенно вообще не кажется код на Nest более "чистым" или "красивым".
Наверное, своего пользователя Nest найдёт. Мне вообще видится, что есть два равнопопулярных системных подхода: первый - все должно быть максимально просто и прямолинейно, хоть этим можно отстрелить себе ногу (C), второй - накрутим огромную гору абстракций (привет, C++) и введем огромную кучу синтаксического сахара, который уже не сахар вовсе, потому что нужен через каждые два символа (Rust). Первый мне как-то ближе. С Makefile, минималистичными bash-скриптами. И понятными правилами игры.
В Исландии я был на одном водопаде. Вместе с другими людьми я стоял на небольшой каменной платформе, откуда открывался вид на водопад. У многих были дети. От пропасти нас отделяла только натянутая веревка. И я подумал: в Америке они бы обнесли все сеткой и высоченным забором. У них на уме была бы одна мысль: если кто-нибудь упадет, то тут же появится его адвокат. Но там, в Исландии, люди думают так же, как раньше думали в Америке в старое время: если ты упал, ты идиот. (Клинт Иствуд)
Что может быть читаемее С-стиля со скобками?
Отступы? Ха!
Сравнивали ли с https://taskfile.dev/ ?
Чистый DSL на отступах
"На отступах". НА ОТСТУПАХ, КАРЛ! Спасибо, стошнило аж три раза подряд.
Если что, кроме Just и plain Make в мире есть с десяток систем сборки промышленного уровня, не считая гикосистем типа Tup, и чуть ли не каждая из них заявляет, что побеждает проблемы Make.
Вы проанализировали хотя бы самые известные из них, прежде чем писать свой велосипед? Если нет, то почему?
Баш скрипты внутри мейкфайлов писать кстати - это антипаттерн из антипаттернов.
Make часто критикуется за возможность вызвать $(shell...), но вообще если не вызывать всякую процедурщину, то система Target-ов и паттернов Make - это вполне себе чистая ФП система, просто мало кто ей пользуется правильно.
Про ФП в Make — согласен, в теории всё красиво. Но на практике 99% мейкфайлов это гора .PHONY задач, которые превращаются в лапшу из баш-скриптов. Тот самый "антипаттерн", о котором вы пишете, по сути стал стандартом де-факто.
Я не пытаюсь сделать новый Bazel или Nix для "чистых сборок". Nest — это именно таск-раннер. Я пилил его под конкретную боль: когда команд много, их надо нормально группировать по неймспейсам и не гадать, какой тип аргумента прилетел в скрипт.
Just плоский, Taskfile на YAML (вкусовщина, но мне не зашло). Nest — это просто попытка сделать другой UX для тех, кому надоело воевать с портянками в Makefile.
А чего с ними воевать-то? Большую задачу разбиваем по частям на под задачи. Для каждой подзадачи вое правило. Балее объединяем правила. Все тупо и декларативно.
Если нужен набор параметров, то выносим их в settings.mk которые организуем по отдельным папкам /settings/customer1, settings/customer2. И вызов makefile с параметрам сводится к make settings=customerX.
И чего огород городить?
Сравнивали с ninja ?
https://ninja-build.org/manual.html#_writing_your_own_ninja_files
На 15% кликбейт, на 85% правда: makefile это не "запускатель тасок". он делает файл(ы), буквально. make file(s). Если это понять - всё становится проще.
Хватит воевать с Makefile: как я написал свой таск-раннер на Rust, чтобы не сойти с ума