Sé que las aserciones se pueden habilitar/deshabilitar en el tiempo de ejecución para la depuración y la producción, respectivamente. Sin embargo, encontré que las aserciones también aumentan el tamaño del binario generado (alrededor de 100-200 bytes en el ejemplo a continuación).Compilación sin aserciones
En C y C++, podemos hacer esto en tiempo de compilación teniendo #define NDEBUG
antes de #include <assert.h>
.
¿Hay alguna manera para que el compilador Java haga esto automáticamente? Me gustaría dejarlos en el código fuente para depuración más adelante. Pero tampoco quiero que el binario resultante sea más grande de lo necesario (tenemos un límite de tamaño como requisito de diseño).
código C:
//#define NDEBUG
#include <assert.h>
int main(void) {
assert(0); // +200 bytes without NDEBUG, 0 with NDEBUG
return 0;
}
código Java:.
public class Test {
public static void main(String[] args) {
assert(System.nanoTime()==0); // increases binary size by about 200 bytes
}
}
En respuesta a bn de respuesta:
public class Test2 {
public static final boolean assertions = false;
public static void main(String[] args) {
if(assertions) {
assert(System.nanoTime()==0);
}
}
}
EDIT: De hecho, parece para mí que esta habilitación/deshabilitación es un compile-tim más útil e característica que en tiempo de ejecución. Quiero decir, ¿cuántos usuarios finales los habilitarán? En cuanto a un programador se refiere durante el proceso de depuración, es probable que recompile el código de todos modos.
Eso no prueba que cada afirmación tenga un costo de 200 bytes, solo que sí. – EJP
@EJP: Seguro.Lo que quise decir es que hay un aumento no despreciable causado por aseveraciones como un todo. La cantidad exacta ciertamente depende de la complejidad de la declaración. – tskuzzy
Si te molestas con tales cosas, estás con el idioma equivocado. – lvella