Есть ли в D (D2) механизм принудительной компиляции кода во время сборки релиза?
В C у вас может быть что-то вроде
#ifndef NDEBUG
/*Something that will only run in a debug build*/
#endif
Я знаю, что у Д есть
debug(mymodule) {
//Do something
}
Но это требует, чтобы пользователь передал -debug для каждого модуля, чтобы включить его.
Я ищу глобальный механизм, который всегда будет запускать код в обычной сборке, но компилировать его, когда вы передаете флаг -release. Я знаю, что некоторые встроенные функции имеют эту возможность (например, assert), но есть ли способ сделать это и для пользовательского кода?
debug
и-release
не имеют ничего общего друг с другом в D.-release
подразумевает, что вы компилируете релизную версию, и отключает различные проверки (например, утверждения).-debug
включает операторы отладки. Таким образом, вы можете утверждать, что в D на самом деле нет режима отладки. У вас есть режим выпуска и режим без выпуска с возможностью включения операторов отладки в любом режиме. Я не думаю, что-release
должен действительно изменить семантику вашего кода, как-debug
, поэтому, вероятно, поэтому вы не можете делать то, что пытаетесь сделать. - person Jonathan M Davis   schedule 07.07.2010debug{ //... }
. Имхо, лучше сделать так, чтобы было легко ошибиться при разработке, чем при релизе. - person 0scar   schedule 07.07.2010-release
: скомпилируйте релизную версию, что означает отсутствие генерации кода для контрактов и утверждений. Проверка границ массива не выполняется для системных и доверенных функций. Он не предназначен для включения или отключения пользовательского кода помимо того, что указано в контрактах и утверждениях. Даже если все, что вы собираетесь сделать, это включить или выключить некоторые из ваших собственных проверок, к лучшему или к худшему, это не то, для чегоrelease
, похоже, предназначен. Вот для чего предназначенdebug
, и если это недостаточно подробно для вас, используйте-version
. Это немного сбивает с толку, но, похоже, так оно и есть. - person Jonathan M Davis   schedule 07.07.2010