Wer kann Exceptions noch explizit erklären? - 100€ Prämie! - Timeout/Deadline = 31.12.2019
bearbeitet von ursus contionabundo> Hello,
>
> > Eine "Exception" ~= "Exitroutine" benötigt auch keine Klassen.
>
> Völlig falsch! Eine Exception ist keine Exitroutine!
Die "Exception" an sich nicht - deren Behandlung (und, falls programmierbar und programmiert: Erkennung) aber schon.
Ich würde schon etwas wie `exit(2)` als "Exitroutine" bezeichnen - weil die syntaktische Ausgestaltung als Funktionaufruf (also: call) und die nachfolgenden (wenn auch aus Sicht eines Programmierers oft "unsichtbaren") Aktionen (Man denke an allein an den Garbage Collector!) nahelegen, dass es genau das ist.
> Im Übrigen meldet sich jedes Programm beim Beenden an das OS zurück mit einem sogenannten Exitcode. Wobei ein `Prozess beendet mit Exit-Code 255` heißt daß es per Exception beendet wurde. exit 0 hingegen ist (regelmäßig) ein fehlerfreier Return.
Eben der Elternprozess (dem der Exit des Kindes signalsiert wird) soll (kann) den Exit-Code auswerten.
Zutreffend ist, dass Programme für den Elternprozess (also nicht für das OS!) einen Exit-Status-Code hinterlassen und dass dieser, wenn es denn keine Null ist, signalisiert: Da ging was schief (Fatale Fehler) oder aber auch: vielleicht (Notizen, Warnungen) ging was schief. [Was aber genau welcher Code (!=0) signalisiert ist Vereinbarungssache und soll sich an Konventionen - die durchaus sehr unterschiedlich sind - halten](https://en.wikipedia.org/wiki/Exit_status).
Das jetzt PHP (und Perl) als Interpreter eine 255 als exit-code hinterlassen wenn ein Syntaxfehler (compilation error) auftrat (Perl übrigens gerne eine 9 wenn es denn ein fehlendes Package vermutet oder eine Subroutine nicht definiert ist) ist z.B. eine solche Konvention.
Beispiele (Jeweils die letzte Zeile zeigt den Exit-Code):
~~~
$> echo -e "foo bar;" | perl; echo $?
Can't locate object method "foo" via package "bar" (perhaps you forgot to load "bar"?) at - line 1.
9
~~~
~~~
$> echo -e "foo bar(;" | perl; echo $?
syntax error at - line 1, near "(;"
Execution of - aborted due to compilation errors.
255
~~~
~~~
$> echo -e "<?php\nfoo();" | php; echo $?
PHP Fatal error: Uncaught Error: Call to undefined function foo() in Standard input code:2
Stack trace:
#0 {main}
thrown in Standard input code on line 2
255
~~~
~~~
$> echo -e "<?php\nfoo" | php; echo $?
PHP Parse error: syntax error, unexpected end of file in Standard input code on line 3
255
~~~
~~~
$> echo -e "exit(3);" | perl; echo $?
3
~~~
~~~
$> echo -e "<?php\nexit(3);" | php; echo $?
3
~~~
Dann wäre da noch der Umstand, dass die Ausgabe von Fehlermeldungen auf die Error-Konsole (stderr) erfolgen kann (Ausgaben im Beipiel unten unterdrückt). Klarer Fall von "Routine" - in dem Fall des Interpreters/Kompilers.
~~~
$> echo -e "<?php\nfoo();" | php 2> /dev/null; echo $?
255
~~~
Wer kann Exceptions noch explizit erklären? - 100€ Prämie! - Timeout/Deadline = 31.12.2019
bearbeitet von ursus contionabundo> Hello,
>
> > Eine "Exception" ~= "Exitroutine" benötigt auch keine Klassen.
>
> Völlig falsch! Eine Exception ist keine Exitroutine!
Die "Exception" an sich nicht - deren Behandlung (und, falls programmierbar und programmiert: Erkennung) aber schon.
Ich würde schon etwas wie `exit(2)` als "Exitroutine" bezeichnen - weil die syntaktische Ausgestaltung als Funktionaufruf (also: call) und die nachfolgenden (wenn auch aus Sicht eines Programmierers oft "unsichtbaren") Aktionen (Man denke an allein an den Garbage Collector!) nahelegen, dass es genau das ist.
> Im Übrigen meldet sich jedes Programm beim Beenden an das OS zurück mit einem sogenannten Exitcode. Wobei ein `Prozess beendet mit Exit-Code 255` heißt daß es per Exception beendet wurde. exit 0 hingegen ist (regelmäßig) ein fehlerfreier Return.
Eben der Elternprozess (dem der Exit des Kindes signalsiert wird) soll (kann) den Exit-Code auswerten.
Zutreffend ist, dass Programme für den Elternprozess (also nicht für das OS!) einen Exit-Status-Code hinterlassen und dass dieser, wenn es denn keine Null ist, signalisiert: Da ging was schief (Fatale Fehler) oder aber auch: vielleicht (Notizen, Warnungen) ging was schief. [Was aber genau welcher Code (!=0) signalisiert ist Vereinbarungssache und soll sich an Konventionen - die durchaus sehr unterschiedlich sind - halten](https://en.wikipedia.org/wiki/Exit_status).
Das jetzt PHP (und Perl) als Interpreter eine 255 als exit-code hinterlassen wenn ein Syntaxfehler (compilation error) auftrat (Perl übrigens gerne eine 9 wenn es denn ein fehlendes Package vermutet oder eine Subroutine nicht definiert ist) ist z.B. eine solche Konvention.
Beispiele (Jeweils die letzte Zeile zeigt den Exit-Code):
~~~
$> echo -e "foo bar;" | perl; echo $?
Can't locate object method "foo" via package "bar" (perhaps you forgot to load "bar"?) at - line 1.
9
~~~
~~~
$> echo -e "foo bar(;" | perl; echo $?
syntax error at - line 1, near "(;"
Execution of - aborted due to compilation errors.
255
~~~
~~~
$> echo -e "<?php\nfoo();" | php; echo $?
PHP Fatal error: Uncaught Error: Call to undefined function foo() in Standard input code:2
Stack trace:
#0 {main}
thrown in Standard input code on line 2
255
~~~
~~~
$> echo -e "<?php\nfoo" | php; echo $?
PHP Parse error: syntax error, unexpected end of file in Standard input code on line 3
255
~~~
Dann wäre da noch der Umstand, dass die Ausgabe von Fehlermeldungen auf die Error-Konsole (stderr) erfolgen kann (Ausgaben im Beipiel unten unterdrückt). Klarer Fall von "Routine" - in dem Fall des Interpreters/Kompilers.
~~~
$> echo -e "<?php\nfoo();" | php 2> /dev/null; echo $?
255
~~~
Wer kann Exceptions noch explizit erklären? - 100€ Prämie! - Timeout/Deadline = 31.12.2019
bearbeitet von ursus contionabundo> Hello,
>
> > Eine "Exception" ~= "Exitroutine" benötigt auch keine Klassen.
>
> Völlig falsch! Eine Exception ist keine Exitroutine!
Die "Exception" an sich nicht - deren Behandlung (und, falls programmierbar und programmiert: Erkennung) aber schon.
Ich würde schon etwas wie `exit(2)` als "Exitroutine" bezeichnen - weil die syntaktische Ausgestaltung als Funktionaufruf (also: call) und die nachfolgenden (wenn auch aus Sicht eines Programmierers oft "unsichtbaren") Aktionen (Man denke an allein an den Garbage Collector!) nahelegen, dass es genau das ist.
> Im Übrigen meldet sich jedes Programm beim Beenden an das OS zurück mit einem sogenannten Exitcode. Wobei ein `Prozess beendet mit Exit-Code 255` heißt daß es per Exception beendet wurde. exit 0 hingegen ist ein fehlerfreier Return.
Zutreffend ist, dass Programme für den Elternprozess (also nicht für das OS!) einen Exit-Status-Code hinterlassen und dass dieser, wenn es denn keine Null ist, signalisiert: Da ging was schief (Fatale Fehler) oder aber auch: vielleicht (Notizen, Warnungen) ging was schief. [Was aber genau welcher Code (!=0) signalisiert ist Vereinbarungssache und soll sich an Konventionen - die durchaus sehr unterschiedlich sind - halten](https://en.wikipedia.org/wiki/Exit_status).
Das jetzt PHP (und Perl) als Interpreter eine 255 als exit-code hinterlassen wenn ein Syntaxfehler (compilation error) auftrat (Perl übrigens gerne eine 9 wenn es denn ein fehlendes Package vermutet oder eine Subroutine nicht definiert ist) ist z.B. eine solche Konvention.
Beispiele (Jeweils die letzte Zeile zeigt den Exit-Code):
~~~
$> echo -e "foo bar;" | perl; echo $?
Can't locate object method "foo" via package "bar" (perhaps you forgot to load "bar"?) at - line 1.
9
~~~
~~~
$> echo -e "foo bar(;" | perl; echo $?
syntax error at - line 1, near "(;"
Execution of - aborted due to compilation errors.
255
~~~
~~~
$> echo -e "<?php\nfoo();" | php; echo $?
PHP Fatal error: Uncaught Error: Call to undefined function foo() in Standard input code:2
Stack trace:
#0 {main}
thrown in Standard input code on line 2
255
~~~
~~~
$> echo -e "<?php\nfoo" | php; echo $?
PHP Parse error: syntax error, unexpected end of file in Standard input code on line 3
255
~~~
Dann wäre da noch der Umstand, dass die Ausgabe von Fehlermeldungen auf die Error-Konsole (stderr) erfolgen kann (Ausgaben im Beipiel unten unterdrückt). Klarer Fall von "Routine" - in dem Fall des Interpreters/Kompilers.
~~~
$> echo -e "<?php\nfoo();" | php 2> /dev/null; echo $?
255
~~~