Ogni volta che un programma Perl, Python, C ++ o Tcl si ferma con un'eccezione non gestita, quei runtime linguistici si preoccupano di registrare un codice di uscita diverso da zero per il processo. Anche i programmi basati su Eclipse restituiscono 1 se falliscono durante l'avvio. I programmi eseguiti dallo standard java.exe
, tuttavia, restituiscono felicemente zero, non importa quanto terminino bruscamente, a meno che il programma non chiami System.exit()
con un valore di uscita. Anche AssertionFailedError
o UnsatisfiedLinkError
vengono riportati al programma chiamante come uscite di successo.
Naturalmente non tutti i sistemi hanno codici di ritorno del programma, ma Unix e Windows sono stati abbastanza importanti da garantire java.lang.Process.exitValue()
per i processi figli; non garantiscono anche l'onorare le convenzioni per i processi dei genitori?
Si tratta di un difetto nella progettazione del linguaggio o solo nell'implementazione? C'è una discussione che sia una buona idea?