Директивы для упрощения создания сложных проектов


#1

Я тут собрал несколько директив, которые очень хотелось бы увидеть в паскале:

$gendef - $define которое будет работать на все модули, откомпилированные после этой директивы и, разумеется, на сам файл, в котором оно было прописано. Особо полезно для создания глобального имени, означающего дебаг-состояние проекта. В таком случае 1 строчкой в начале программы {$gendef DEBUG} можно будет включить более подробный вывод ошибок во всём проекте.

$compile - компилирует .pas и .pabcproj файл. Будет особо полезно при работе с библиотеками. Чтоб изменения в них вступили в силу (записались в .dll файл) библиотеку надо откомпилировать. Если добавить в начало основной программы {$compile MyLib1} то после того как в библиотеке сделаны изменения - можно будет не тянутся мышкой к кнопке Компилировать, а лишь нажать Ctrl+S, F9.

$exec - выполняет указанный файл, а так же $execwait - выполняет указанный файл и ожидает завершения его процесса. К примеру, перед тем как какой то файл будет добавлен как $resource - надо чтоб .exe файл его обработал/пересоздал, или перед/после компиляции надо, чтоб выполнился .bat файл, который правильно соберёт проект.

Идеи пока что довольно сырые потому что нам ними думал только я, но они не из пальца высосаны, это инструменты которые были нужны в той или иной ситуации. А вид директив мне кажется наиболее интуитивным и практичным.


#2
  1. От таких “глобальных” дефайнов печально известный легаси-наследием С++ пытается избавиться уже добрых лет двадцать. Вариант решения проблемы: логирующий синглтон, который подключается к каждому файлу проекта, и которому можно установить статус (логировать, нет).

  2. Ага, уже представляю, как в тяжелом огромном проекте главной потерей времени стала необходимость ручного нажатия кнопки “Конпеляция”…

  3. Зачем к ногам пришивать штаны? К слову, для таких интересных целей есть make.

Вот что еще интересно - кто должен команды 2-3 обрабатывать? Компилятор? Среда? Может, atom/vscode, в котором куча народу код пишет? Нет, в коде должен быть только текст, который читается выполняемым компилятором и парсером Intellisense. В противном случае компилятор (который есть консольное приложение с параметрами) оказывается привязанным к конкретной среде, что есть глупость.


#3

Я это всё представляю выполняемым на этапе компиляции. Поясните лучше в чём заключается проблема, к чему вдруг оказывается привязан компилятор когда его просят выполнить несколько дополнительных команд, как старт процесса или запуск себя же ещё для 1 файла. С дефаином тоже не понял, объясните меньше ссылаясь на печальный опыт других компиляторов. И принимая его во внимание, не воспринимайте пожалуйста как стереотип.

Этими директивами я пытаюсь добиться того чтоб работа которую могут выполнять роботы - выполняли роботы а не люди. Вам разве не неприятно выполнять однообразную работу вместо программирования?