Каждый раз, когда программа на Perl, Python, C ++ или Tcl останавливается с необработанным исключением, эти языковые среды выполнения заботятся о регистрации ненулевого кода завершения процесса. Даже программы на основе Eclipse возвращают 1, если они терпят неудачу во время запуска. Программы, выполняемые по стандарту java.exe
, однако, с радостью возвращают ноль, независимо от того, как резко они заканчиваются, если только программа не вызывает System.exit()
с выходным значением. Даже AssertionFailedError
или UnsatisfiedLinkError
возвращаются в вызывающую программу как успешные выходы.
Конечно, не во всех системах есть коды возврата программ, но Unix и Windows были достаточно важны, чтобы гарантировать java.lang.Process.exitValue()
дочерние процессы; разве они не гарантируют соблюдение соглашений для родительских процессов?
Это недостаток в дизайне языка или просто в реализации? Есть ли аргумент, что это хорошая идея?