Bernd Leitenbergers Blog

Wenn Freaks Programmiersprachen machen….

Der von Michael K. als Rätsel gestellte Aufsatz von Kerningham über Pascal zeigt recht deutlich, warum man eine Programmiersprache oder ein Betriebssystem nicht nutzen sollte, dass von einem Freak erstellt wurde. Man kann sicher einiges an Pascal kritisieren, wie praktisch an jeder Programmiersprache – man wird immer schlauer. Das Hauptproblem von Pascal ist, dass es als Lehrsprache konzipiert wurde. Vielleicht das natürlichste, das ein Uniprofessor tut, aber es ist im praktischen Einsatz Blödsinn. Es macht keinen Sinn Programmieren auf einer Sprache zu lernen und im Einsatz dann eine andere nutzen. So fehlen Pascal wichtige Funktionen in der Ein/Ausgabebibliothek und die Stringverwaltung ist auch ziemlich schlecht implementiert.

Viele Punkte in dem Memo zeigen aber etwas anderes, nämlich die Grundeinstellung die Kerningham hat und die sich in C und Unix wiederfindet. Nämlich das man als Programmierer grenzenlose Freiheit braucht. Nur dazu ein Beispiel: Er bemängelt dass man in Pascal keine Fliesskommazahl an eine Funktion übergeben kann die Integer Zahlen erwartet, wie dies in FORTRAN der Fall war.

FORTRAN hatte nur formale Parameter als Platzhalter, genauso wie der K&R Standard von C. Es gab keine Wertparameter. Bei einem Variablenparameter wird aber die Adresse des Parameters übergeben. Welchen Sinn soll es nun machen, eine Fließkommazahl an eine Funktion zu übergeben, welche die Information als Integer interpretiert – die interne Repräsentation ist schließlich eine andere. Von dem Problem des Überlaufs ganz zu schweigen.

Die Konzeption von C ist dann auch ein Rückschritt zu Pascal: grenzenlose Freiheit. An und für sich was tolles. Man muss sich nicht um Datentypen kümmern, kann direkt auf den Speicher zugreifen und mit der fehlenden Prüfung des Stacks bei Funktionen oder ob der Speicher bei Feldern / Strings ausreicht um den Inhalt aufnehmen kann man auch den Code des Programmes überschreiben – absichtlich oder eben als Sicherheitslücke, die allseits bekannten Buffer-Overflows.

Ein einfaches Beispiel ist die Möglichkeit eine Zuweisung in der if Anweisung durchzuführen. Das erlaubt es die Zuweisung eines Rückgabeparameters einer Funktion und den Test auf 0 (es gibt ja keine Booleschen Variablen in C) in einer Anweisung zu machen. Für dieses Ersparen von etwas Tipparbeit handelt man sich schwer auffindbare Fehler ein, wenn man eigentlich einen vergleich mit „==“ anstatt „=“ durchführen wollte.

Überhaupt scheinen die Designer von C und Unix der irrigen Ansicht zu folgen, dass die Hauptarbeit beim Programmieren das Eintippen ist. Mit der kurzen Schreibweise von C mit vielen Operatoren, den Klammern kann man sicher am Tag eine Minute Tipparbeit sparen – um dann Stunden nach einem Fehler aufgrund dieser kurzen Schreibweise zu suchen. Oder man spart eine Sekunde beim Tippen von „ls“ und darf dann eine Minute mal das Manual studieren, welche der zahllosen kryptischen Parameter gerade benötigt wird.

Sicherheit bedingt eine Einschränkung der Freiheit. Ein System das Parameter prüft lässt eben nicht grenzenlose Typkonvertierungen zu. Doch aus irgendeinem Grund gibt es eine ganze Reihe von Programmierern die sich von Systemen mit maximaler Freiheit aber auch maximaler Gefahr von Fehlern verbunden ist angezogen führen.

Ich muss sagen C hat mich nachhaltig beeindruckt. Bevor ich Softwaretechnik studiert habe habe ich ja schließlich auch schon programmiert in BASIC, Assembler und vor allem in Pascal. Als ich dann zum ersten Mal mit C zu tun habe fühlte ich mich in die Computersteinzeit zurückversetzt: Das soll also die tolle Programmiersprache sein in der jeder programmiert? fehlerträchtig, umständlich (so muss man bei Strings dauernd selbst kopieren oder speicher allokieren anstatt das es eine Bibliothek dafür gibt) und kryptisch.

Seitdem habe ich auch C++, Perl, Java und C# als Abkömmlinge dieser Sprache kennen gelernt. C++ und Perl sind noch schlimmer. Sprich unnötig kompliziert und umfangreich (C++) oder noch kryptischer (Perl). Java und C# haben weitgehend mit C gebrochen was die Fehlermöglichkeiten angeht. Viele Anleihen von Pascal und anderen Sprachen sind übernommen worden. Aber ich muss sagen C hat mich so weitgehend negativ beeindruckt, dass ich mich für die Sprachen auch nicht sehr erwärmen kann – die Syntax ist eben noch „C-Style“.

Wie wäre die Geschichte verlaufen, wenn Wirth anstatt nach Pascal noch weitere Lehrsprachen (Modula, Oberon) zu erfinden, Pascal verbessert hätte. eine vernünftige Stringverwaltung (nicht mit fixer Länge und 255 Byte Beschränkung) und definierte Prozeduren für Lowlevelzugriffe geschaffen hätte die dann herstellerspezifisch implementiert werden. Das verschaffte Turbo Pascal ja auch den Erfolg. es gäbe zumindest für den Anwender keine Probleme mit Viren, nicht dauernde Sicherheitsupdates etc.

Die mobile Version verlassen