Hochsprachen

Um die Nachteile der Assemblerprogrammierung zu umgehen, wurden die Hochsprachen geschaffen (FORTRAN, PL/1, ALGOL, BASIC, Cobol, RGB, Pascal, C, Modula2, ADA, ...). Diese sind nicht mehr maschinenorientiert (Befehlsvorrat orientiert sich am verwendeten Prozessor), sondern anwendungsorientiert (der Befehlsvorrat orientiert sich an der Anwendung).

Die Hochsprachen sind also künstlich (unabhängig von einem bestimmten Prozessor) geschaffen, um bestimmte Anwendungen lösen zu können.

Die Befehle bestehen aus Anweisungen, um etwas auszugeben, Rechenoperationen durchzuführen, Daten einzulesen usw.. Da aber kein Prozessor solche Anweisungen direkt versteht, müssen Hochsprachenprogramme erst in Maschinensprache umgewandelt werden.

Dazu gibt es zwei Möglichkeiten:

Inzwischen gibt es (insbesondere für einige BASIC-Versionen, aber ganz selten auch für vernünftige Sprachen) Entwicklungssysteme, die Compiler und Interpreter beinhalten. Mit dem Interpreter kann man Programme entwickeln, und dann mit dem Compiler erst übersetzen, wenn der Code in Ordnung ist.

FORTRAN ist die älteste und (in den Versionen FORTRAN 66 und FORTRAN 77) meistverbreitete Hochsprache. Sie dient hauptsächlich der Numerik (Maschinenbau, Elektrotechnik, Bauingenieurwesen, Mathematik etc.). Von der Struktur her veraltet. Reine Compilersprache. Für den zugedachten Einsatzzweck gut und effektiv; darüberhinaus beschränkte Fähigkeiten. Die Normung von FORTRAN ist sehr strikt, so daß auch größere Fortranprogramme in aller Regel sehr gut auf andere Rechnersysteme portiert werden können. Dies ist bei kommerzieller Programmentwicklung sehr wichtig, da die sehr zeitintensive und damit teure Entwicklung von Programmen oder Programmteilen dadurch nicht auf einen sehr kleinen Abnehmerkreis mit einem bestimmten Rechner- oder Compilersystem beschränkt ist. Für größere Rechner, die in den genannten Gebieten oft fast nur in FORTRAN programmmiert werden, existieren sehr gute Compiler, die den jeweiligen Quelltext in ein sehr stark optimiertes Maschinenprogramm übersetzen und damit die Rechenleistung einer Anlage gut nutzen.

Die neueste Normung (FORTRAN 90) hat viele Erweiterungen, ist vielleicht etwas überladen und im gesamten Umfang wohl nicht sehr populär. Einige der Erweiterungen werden aber wohl zunehmend genutzt.

BASIC ist ein Abkömmling von FORTRAN, wird aber fast immer interpretiert.

Taugt eigentlich nur zum Lernen, und da auch noch schlecht. Schlecht genormt, uneffektive Erstellung von größeren Programmen, Quelltexte nicht portierbar.

Cobol ist eine rein kaufmännische Sprache. Compilersprache, Normung recht gut, aber sehr beschränkte Fähigkeiten und uneffektive Programmerstellung.

Algol war die erste Sprache mit einer modernen Blockstruktur und hat nur noch geschichtlichen Wert.

Pascal war ursprünglich als reine Lernsprache gedacht und ist dafür sehr gut geeignet. Inzwischen in vielen verschiedenen Erweiterungen (Turbo-Pascal, Prospero-Pascal, UCSD-Pascal) verbreitet. Die Erweiterungen sind meist sehr fähig, aber die dadurch enstehenden Dialekte zu unterschiedlich, um Programme übertragen zu können. Der übertragbare, genormte Teil von Pascal ist dagegen von der Funktion her so stark eingeschränkt, daß man nicht vernünftig damit arbeiten kann.

Es gibt auch eine genormte Erweiterung von Pascal, nämlich Extended Pascal, die aber nicht sehr verbreitet ist.

C wurde urspünglich zur Systemprogrammierung entwickelt (im Rahmen der Erstellung des Betriebssystems Unix), also zum Schreiben von maschinennahen Programmen wie Betriebssystemen oder Teilen davon oder Dienstprogrammen wie Compiler, Editoren etc..

Dabei sollte C die für diese Zwecke ausschließlich verwendete Assemblerprogrammierung möglichst weitgehend ersetzen, da die immer größeren und leistungsfähigeren Betriebssysteme in Assembler zunehmend uneffektiv zu erstellen waren.

Das Konzept der Sprache ist aber so flexibel, daß man damit praktisch alle vorkommenden Programmierprobleme lösen kann. Der Compiler selbst ist relativ klein und einfach; dadurch steht C auf jedem neueren Rechner schnell zur Verfügung. Die Anwendungsbreite von C ist wohl größer als die der meisten anderen Sprachen.

Die Anweisungen in C sind wie bei den anderen Hochsprachen anwendungsorientiert, aber andererseits so definiert, daß sie sehr effektiven Maschinencode nach dem Übersetzen ergeben. Zusammen mit der Möglichkeit von C, direkt im Speicher des Rechners Werte lesen und schreiben können, kann man sehr maschinennahe Programme verwirklichen und trotzdem den Quelltext so portabel wie möglich halten. C läßt dem Programmierer sehr viele Freiheiten und behindert praktisch keinen Wunsch.

Zusammen mit der sehr effektiven und schnellen Programmerstellung bietet sich dadurch C für kommerzielle Programmentwicklung an. Besonders nachteilig ist die Kehrseite der Freiheit: Im Gegensatz zu mehr restriktiven Sprachen wie Pascal oder Modula2 erlaubt C nicht nur (fast) alles, was der Programmierer bezweckt, sondern auch alles, was er falsch macht. Beispielsweise kann man Rückgabewerte von Funktionen ignorieren, ohne einen C-Compiler nennenswert zu stören. Ein Pascalcompiler bekommt dabei einen halben Herzinfarkt. Ebenso kann man einen Zeiger auf einen bestimmten Datentyp mühelos einem Zeiger auf einen anderen Datentyp zuweisen.

Dadurch ist die Programmierung in C sehr fehlerträchtig, wenn man nicht freiwillig und mit viel Selbstdisziplin einige Spielregeln einhält. Noch wichtiger wird dies, wenn mehrere Leute an einem größeren Projekt arbeiten.

Eigentlich gibt es zwei verschiedene C:

Mit dem Aufkommen von objektorienterten Denkansätzen entstanden auch dementsprechende Weiterentwicklungen von C. Dabei hat ganz klar C++ das Rennen gemacht ([Stroustrup: C++]); diese Sprache ist im wesentlichen eine Erweiterung von C und ist inzwischen praktisch in fast allen Bereichen der Softwareentwicklung dominierend. Insbesondere für große Entwicklungsprojekte ist diese Sprache gut geeignet.

Da C++ den Sprachumfang von C fast exakt als Untermenge enthält, ist in C++ zumindest alles möglich, was auch in C machbar ist: im Guten wie im Bösen. Da in [Stroustrup: C++] zwar sehr schön alles beschrieben ist, was über C hinausgeht, aber wenig auf die möglichen Probleme eingegangen wird, die man sich mit C aus Unkenntnis einhandeln kann, halte ich gar nichts davon, C++ als Einsteigersprache zu empfehlen, ohne zuerst ein klares Verständnis zu entwickeln.

Wenn man C++ allerdings als Weiterentwicklung von C auffaßt, kann man sehr viele Vorteile aus dieser Sprache ziehen.

Andere Erweiterungen von C (Objective C) dürften sich nicht mehr in voller Breite durchsetzen.

Microsoft versucht derzeit, seine Neuschöpfung C# in den Markt zu drücken. Dies ist von der Grundidee eine Kreuzung zwischen C++ und Java; wo der große Vorteil gegenüber diesen bereits existierenden Sprachen liegt, wird nicht so recht klar (außer daß Microsoft versucht, das verhaßte Java des verhaßten Konkurrenten Sun zu verdrängen). Ein technischer Fortschritt scheint es jedenfalls nicht zu sein, eher ist das Gegenteil der Fall.

Java ist inzwischen im Bereich der objektorientierten Programmierung (OOP) auch sehr weit verbreitet, und wird oft als direkte Konkurrenz zu C++ gesehen. Diese beiden Sprachen haben aber sehr unterschiedliche Stärken und Schwächen, wodurch sich Java eher zur Erstellung nicht zu großer, sehr portabler Projekte eignet (insbesondere wegen der recht umfangreichen portablen Bibliotheken, beispielweise zum Erstellen der Benutzeroberfläche eines Programms), C++ dagegen ab einer gewissen Projektgröße die Nase vorne hat und spätestens dann unentbehrlich wird, wenn auf Laufzeiteffizienz geachtet werden muß.
Java nimmt eine Sonderstellung hinsichtlich der Unterscheidung in Compiler- und Interpretersprachen ein: ein Java-Quelltext wird zwar kompiliert, aber üblicherweise nicht zu Maschinensprache, sondern in einen sogenannten Bytecode (p-Code, Pseudocode), der rechnerunabhängig ist. Dieser wird dann zur Laufzeit von einem systemabhängigen, aber vom Anwendungsprogramm unabhängigen Interpreter ausgeführt.

(Zur Einordnung sollen diese Vergleiche genügen; es gibt natürlich noch viel mehr Sprachen als die hier aufgeführten. Die nicht erwähnten haben großteils auch eine Daseinsberechtigung, ohne hier explizit erwähnt worden zu sein.)

AnyWare@Wachtler.de