Wiem, że asercje mogą być włączone/wyłączone w środowisku wykonawczym odpowiednio do debugowania i produkcji. Jednak stwierdziłem, że asercje zwiększają również rozmiar generowanego pliku binarnego (około 100-200 bajtów w poniższym przykładzie).Kompilowanie bez twierdzeń
W C i C++, możemy to zrobić w czasie kompilacji, mając #define NDEBUG
przed #include <assert.h>
.
Czy jest jakiś sposób, aby kompilator Java automatycznie to zrobił? Chciałbym zostawić je w kodzie źródłowym do późniejszego debugowania. Ale nie chcę również, aby wynikowy plik binarny był większy niż jest to konieczne (mamy limit rozmiaru jako wymaganie projektu).
kod C:
//#define NDEBUG
#include <assert.h>
int main(void) {
assert(0); // +200 bytes without NDEBUG, 0 with NDEBUG
return 0;
}
Java kod:.
public class Test {
public static void main(String[] args) {
assert(System.nanoTime()==0); // increases binary size by about 200 bytes
}
}
W odpowiedzi na bn na odpowiedź:
public class Test2 {
public static final boolean assertions = false;
public static void main(String[] args) {
if(assertions) {
assert(System.nanoTime()==0);
}
}
}
EDIT: Faktycznie, wydaje się, dla mnie to włączanie/wyłączanie jest bardziej użytecznym kompilatorem e funkcja niż czas działania. Chodzi mi o to, ilu użytkowników końcowych je włączy? Jeśli chodzi o programistę podczas procesu debugowania, prawdopodobnie i tak będzie on rekompilował kod.
Nie dowodzi to, że każdy dowód kosztuje 200 bajtów, tyle tylko, że tak. – EJP
@EJP: Na pewno.Chodziło mi o to, że istnieje niezaprzeczalny wzrost spowodowany przez twierdzenia jako całość. Dokładna kwota z pewnością zależy od złożoności oświadczenia. – tskuzzy
Jeśli zawracasz sobie tym głowy, jesteś w niewłaściwym języku. – lvella