История изменений
Исправление archie, (текущая версия) :
Проекты, которые на С++ писать нужно, будут содержать практически исключительно скрипты сборки, а не декларативщину.
Спорно, очень спорно. Скрипты сборки - это крайне однотипные и шаблонные задачи, делающие примерно одно и то же. Не вижу причин, почему большинство типовых сценариев сборки нельзя декларативно описать в каком-нибудь JSON манифесте. Ну вот навскидку:
- Часть кода в скриптах сборки занимается поиском установленных хедеров и либ в сборочном окружении. Например
find_package
в симейке, который может подтягивать монструозный модуль типа такого. Пакетный менеджер делает этот императивный понос полностью ненужным. Достаточно декларативно описать зависимости в манифесте без всякого скриптования, а пакетный менеджер автоматически выкачает, скомпилит и подключит нужные библиотеки. - В скриптах сборки часто используются различные препроцессоры и кодогенераторы типа doxygen, moc и т.д. Их можно запилить в JSON манифесте через декларативные правила сборки аля make. Да-да, make декларативен, а не императивен.
- Еще часто используются различные кастомные опции сборки типа
BUILD_EXAMPLES=ON
. С этим уже посложнее, но в принципе это можно сделать через if-выражения, которые включают/отключают нужные секции декларативного манифеста. Пример из хаскельного cabal-файла: тыц. - И только если позарез нужна императивщина и одним декларативным манифестом ну никак нельзя обойтись, вот только тогда имеет смысл писать скрипты сборки в виде исключения. Причем не на процедурном CMake, а на самом С++.
Ради интереса прошелся по 10 Most Downloaded крейтам на crates.io: build.rs
нашелся только в 4 из них. Ну то есть раст во многих случаях может успешно обходиться без всяких скриптов сборки. Что мешает то же самое сделать в С++?
Проблемы лаб, которые зачем-то пишутся на С++ вместо условного питона, меня волнуют мало.
Хорошая иллюстрация, почему каждый условный питон имеет свой условный PyPI и pip, а крестоилитка в 2к22 так и продолжает надрачивать на генереные портянки баша из автотулзов. И ничего лучшего видимо уже не предвидится.
Исходная версия archie, :
Проекты, которые на С++ писать нужно, будут содержать практически исключительно скрипты сборки, а не декларативщину.
Спорно, очень спорно. Скрипты сборки - это крайне однотипные и шаблонные задачи, делающие примерно одно и то же. Не вижу причин, почему большинство типовых сценариев сборки нельзя декларативно описать в каком-нибудь JSON манифесте. Ну вот навскидку:
- Часть кода в скриптах сборки занимается поиском установленных хедеров и либ в сборочном окружении. Например
find_package
в симейке, который может подтягивать монструозный модуль типа такого. Пакетный менеджер делает этот императивный понос полностью ненужным. Достаточно декларативно описать зависимости в манифесте без всякого скриптования, а пакетный менеджер автоматически выкачает, скомпилит и подключит нужные библиотеки. - В скриптах сборки часто используются различные препроцессоры и кодогенераторы типа doxygen, moc и т.д. Их можно запилить в JSON манифесте через декларативные правила сборки аля make. Да-да, make декларативен, а не императивен.
- Еще часто используются различные кастомные опции сборки типа
BUILD_EXAMPLES=ON
. С этим уже посложнее, но в принципе это можно сделать через if-выражения, которые включают/отключают нужные секции декларативного манифеста. Пример из хаскельного cabal-файла: тыц. - И только если позарез нужна императивщина и одним декларативным манифестом ну никак нельзя обойтись, вот только тогда имеет смысл писать скрипты сборки исключения. Причем не на процедурном CMake, а на самом С++.
Ради интереса прошелся по 10 Most Downloaded крейтам на crates.io: build.rs
нашелся только в 4 из них. Ну то есть раст во многих случаях может успешно обходиться без всяких скриптов сборки. Что мешает то же самое сделать в С++?
Проблемы лаб, которые зачем-то пишутся на С++ вместо условного питона, меня волнуют мало.
Хорошая иллюстрация, почему каждый условный питон имеет свой условный PyPI и pip, а крестоилитка в 2к22 так и продолжает надрачивать на генереные портянки баша из автотулзов. И ничего лучшего видимо уже не предвидится.