Mysteriöse Abstürze
Programmierer, achtet auf Eure Sprache!
Abstruse Sprachen mit Killerpotential?
Mysteriöse Abstürze
Als Computerwissenschaftler verfolge ich die Schwächen der verschiedenen Programmiersprachen mit großem Interesse. In den Anfangstagen des Computers wurden Anwendungen auf unterster Ebene bei den Nullen und Einsen programmiert – und eine Menge Fehler produziert. Nach und nach gab es differenziertere Programmiersprachen, etwa Cobol für Datenverarbeitungsanwendungen, Fortran für Rechenaufgaben, C für die Systemprogrammierung und schließlich C++. In der Luft- und Raumfahrt-Industrie wird häufig Ada eingesetzt.
Während der letzten 40 Jahre wurde immer wieder versucht, diese Sprachen zu standardisieren mit dem Ziel, dass sie bei allen Implementierungen auf die gleiche Weise arbeiten und uns vor unliebsamen Überraschungen bewahren sollten.
Nun könnte man vielleicht annehmen, dass bei einer Standardisierung jedes i so aussieht wie das andere (also mit einem Punkt drüber), und dass jedes t einen Strich hat – und dieselbe Bedeutung hat. Damit wäre gewährleistet wäre, dass bei der Umsetzung einer Tabellenkalkulation, einer Datenbank oder eines Webservices in ein Programm die verwendete Programmiersprache immer das tut, was wir gemäß der Definition des Standards erwarten würden. Pustekuchen!
Zicken-Sprachen
Mysteriöse Abstürze
Leider sind wir von einem solchen Szenario noch sehr weit entfernt. Moderne Programmiersprachen sind hoch komplex und werden von Komitees standardisiert, und trotz großer Anstrengungen von allen Seiten sind Kompromisse, Inkonsistenzen, Unvollständigkeiten und vieles andere, das einfach nicht wie gewünscht funktioniert, an der Tagesordnung. Wir nennen solche Mängel “vulnerabilities”, Schwachstellen also, die dafür sorgen, dass Programme immer wieder unerwartetes Verhalten zeigen.
Schön wäre es, wenn man davon ausgehen könnte, dass die Programmiersprachen-Komitees und Compiler-Bauer die Programmierer über derlei “Zicken” der einzelnen Sprachen informieren. Leider ist auch das meist nicht der Fall, deshalb treten Fehler heute mit derselben Regelmäßigkeit und einer ähnlichen Häufigkeit auf wie vor 20 Jahren. Sämtliche Programmiersprachen weisen solche Mängel auf, die Unterschiede sind nur gradueller Art. Man könnte sie umgehen, aber meist tun dies Programmierer nicht – häufig aus Unwissenheit, was natürlich keine Entschuldigung ist.
Auch Word wird sprachlos!
Mysteriöse Abstürze
Es war wohl Ironie des Schicksals, als folgende nette Geschichte uns das Problem wieder einmal bewusst machte: Die Arbeitsgruppe, die sich mit Programmiersprachen-Schwächen beschäftigt und der ich als Mitglied angehöre, bekam vor kurzem die Kopie einer ziemlich chaotischen Regel-Liste für C++ zugesandt.
Das Regelwerk sollte die Sprache für ihren Einsatz in der Luftfahrt-Industrie sicherer machen. C++ ist bekanntlich einer der komplexesten Programmiersprachen-Standards, bei dem es immer wieder zu unliebsamen Überraschungen kommt. Das Regelwerk wurde als Word-Datei verschickt. Beim Öffnen der Datei durch meine Kollegen kam es zum Absturz bestimmter Word-Versionen – um genau zu sein waren es Word 2000 sowie einige Service Packs von Word 2003.
Word wurde bestimmt weit häufiger getestet als irgendeine Software für die Luft- und Raumfahrtindustrie. Nun dürfen Sie einmal raten, mit welcher Programmiersprache Word geschrieben wurde! Na?