Die Nerd Enzyklopädie 8 - Hello World hat einen Bug
Hello World! hat einen Bug
Solltest du jemals in den erhabenen Genuss kommen eine Programmiersprache erlernen zu dürfen, wird deine erste Lektion vermutlich die Ausgabe von „hello world!“ behandeln. Ein Klassiker, beliebt bei Jung und Alt und so etwas wie der Running Gag in der Programmierer-Szene. (Das Verständnis für Nerd-Humor muss man sich übrigens hart erarbeiten.)
Der erste nachvollziehbare Beleg für diese Tradition geht auf Brian Kernighan zurück. Dieser verfasste für die Bell Laboratories eine Anleitung zur Programmierung mit B (Überraschung: der Nachfolger von B ist übrigens C). Dort wurde „hello, world“ aber nur als Beispiel-Ausgabe eines Programmes verwendet. Erst in einer späteren Anleitung für die Programmiersprache C von 1978 führte Kernighan dann die heute gewohnte Variante ein:
main( ) \{
printf("hello, world\\n“);
\}
(Das \n am Ende steht für „new line“).
Wie dem auch sei: Die Umsetzung dieses einfachen Beispiel ist in den allermeisten Programmiersprachen nicht korrekt, sie hat einen Bug. Aber warum?
Unter Linux gibt es unter /dev das Gerät /dev/null — sendet man Ausgaben an dieses Gerät, passiert in der Regel gar nichts. /dev/null hat einen weniger bekannten Verwandten, nämlich /dev/full, das einen vollen Speicher simulieren soll. Sendet man eine Nachricht an diese Gerät, gibt es die Fehlermeldung zurück, das kein Speicher verfügbar ist:
echo "Hello World!" \> /dev/full
echo: write error: No space left on device1
echo $?
1
Die Rückmeldung ist 1, was soviel bedeutet wie: Ein Fehler ist aufgetreten. Die Idee dahinter ist, dass man prüfen kann, wie ein Programm auf Fehlermeldungen reagiert. Was aber passiert, wenn man die Ausgabe der C-Implementierung von „hello, world“ zu diesem Gerät schickt?
gcc hello.c -o hello
./hello \> /dev/full
echo $?
0
Die Rückmeldung ist 0 - also: „Kein Fehler aufgetreten„, was natürlich nicht stimmen kann. Auch die Implementierungen in anderen mitunter sehr populären Sprachen zeigen dieses Verhalten.
Das Hello-World-Programm ist zwar simpel und erfüllt seinen Zweck; setzt man allerdings strenge Qualitäts-Maßstäbe an, erfordert das die Berücksichtigung aller denkbaren Situationen. Und das ist hier nicht der Fall. „hello, world„ hat also - streng genommen - einen Bug.