Programmiersprachen lernt man, um Computern in für sie verständlicher Form Anweisungen geben zu können. Die Vielfalt der Sprachen ist schwierig zu überschauen, was schon die erste Frage nahelegt. Warum gibt es so viele verschiedene Programmiersprachen?
Inhalt
Was sind Programmiersprachen?
Der Prozessor, das Herzstück jedes modernen digitalen Computers, besitzt mit seinem Befehlssatz eine Menge von
Welche Aufgaben übernimmt der Prozessor?
Instruktionen, die er direkt ausführen kann. Jeder dieser Befehle wird dazu als Binärzahl in ein Register des Prozessors zur Ausführung geladen. Diese Befehle sind sehr einfach und umfassen beispielsweise die Addition zweier Binärzahlen fester Länge oder die Übertragung des Inhalts einer Registers an eine bestimmte Speicheradresse. Das direkte Programmieren mit diesen Befehlen ist theoretisch möglich, wäre aber extrem mühsam und auch dementsprechend fehleranfällig. Programmiersprachen sind zu dem Zweck entworfen worden, das Programmieren leichter und effizienter zu gestalten als das Schreiben von Maschinencode.
Die einfachste Programmiersprache: Assembler
Die Befehle von Assembler entsprechen den Instruktionen des Prozessors, weswegen man für jede Prozessorarchitektur einen eigenen Typ von Assembler verwenden muss Im Gegensatz zum Maschinencode selbst versieht man die Befehle aber mit einfach zu merkenden Bezeichnungen, was auch für die Adressierung von Speicherzellen gilt. Assembler ist immer noch mühsam in der Handhabung, hat aber den Vorteil, dass Programme sehr gut auf höchste Geschwindigkeit optimierbar sind. Mit Assembler wird auch das Programm bezeichnet, das Assemblerprogramme in Maschinensprache übersetzt.
Höhere Programmiersprachen
Solche Programmiersprachen stellen dem Programmierer um einiges gehaltvollere und weniger einfache Befehle als Assembler zur Verfügung. Daraus entsteht die sogenannte semantische Lücke zwischen dem Programmtext und den Wirkungen seiner Ausführung einerseits und dem sehr einfachen Befehlssatz und einem Speicher von Binärzahlen andererseits. Diese Lücke wird von höheren Programmiersprachen auf zwei Arten geschlossen. Programme unterliegen der Kompilierung oder der Interpretation.
Kompilierung bedeutet, dass das ganze Programm in eine Abfolge von Befehlen in Maschinensprache übersetzt wird und dann erst ausgeführt. So lässt sich diese Übersetzung durch den Compiler mit höherer Effizienz durchführen. Bei der Interpretation übersetzt man während der Ausführung eines Programms jeden Befehl
Was sind höhere Programmiersprachen?
einzeln, was nur geringere Effizienz ermöglicht. Diese Vorgangsweise wird bei sogenannten Skriptsprachen gewählt, in denen oft kleinere Programme für
Systemadministration und Ähnliches vorherrschen. Alle Programmiersprachen besitzen eine Syntax und eine Semantik. Die Syntax ist die Grammatik der
Sprache. Sie legt fest, welche Texte als Programme in einer bestimmten Sprache gelten. Im Gegensatz zu natürlichen Sprachen sind die entsprechenden Regeln relativ einfach, müssen aber streng eingehalten werden. Die Semantik einer Programmiersprache legt fest, was die einzelnen Befehle bedeuten.
Gemeinsamkeiten von Programmiersprachen
Diese ergeben sich aus den Aufgaben von Computern. Programmiersprachen müssen Befehle für die Ein- und Ausgabe von Daten aufweisen, sonst könnte der Computer keine Daten zur Verarbeitung aufnehmen und keine Ergebnisse ausgeben. Auch Befehle für arithmetische Operationen sind praktisch universell, obwohl es in der genauen Ausführung schon beträchtliche Unterschiede gibt. Nachdem die vom Computer zu bearbeitenden Daten ansprechbar sein müssen, sind in praktisch allen Programmiersprachen Deklarationen von Variablen vorgesehen. Die Steuerbefehle regeln den Ablauf eines Programms. Ein solcher Befehl legt beispielsweise eine Bedingung fest, unter der man das Programm an anderer Stelle weiter abarbeitet. Das kann auch eine Schlaufe sein, in der eine Gruppen von Befehlen wiederholt ausgeführt wird, bis eine Bedingung erfüllt ist.
Typen von Programmiersprachen und bekannte Beispiele hochqualitativer Sprachen
Die verschiedenen Typen entsprechen Stilen der Programmierung. Diese Stile unterscheiden sich durch die Organisation der zu verarbeitenden Informationen und die Art ihrer Verarbeitung.
Imperative Programmierung
Dieses Programmierparadigma ist das älteste, das schon für die ersten Programme zum Einsatz kam. Das ist kein Zufall, denn es entspricht am besten der Organisation der Prozessoren und ihrer Befehlssätze. Der Quellcode des Programms beschreibt so direkt wie möglich die Schritte, die der Computer ausführen soll. Solche Programmiersprachen sind auch heute noch wichtig, insbesondere für Systemprogramme wie Betriebssysteme. Die für diese Zwecke am meisten verbreitete Sprache ist C. Seit einigen Jahren gibt es die neuere Sprache Rust. Ihre Verbesserungen bestehen darin, dass einige Sicherheitsmaßnahmen existieren. Bestimmte typische Programmierfehler sind in Rust gar nicht möglich, weil sie der Syntax der Sprache widersprechen. Lesen Sie hier alles zum Thema Syntax.
Strukturierte Programmierung
In imperativen Programmiersprachen steht es dem Programmierer frei, die Abfolge der Befehle zu wählen und damit ist es leicht möglich, sehr unübersichtliche Programme zu schreiben. Sie werden zwar korrekt ausgeführt, sind aber schwierig zu ändern. Erst recht gilt das, wenn die Anpassungen nicht von den ursprünglich damit befassten Programmierern ausgeführt werden müssen. Die Idee der strukturierten Programmierung ist es, sich freiwillig auf einige wenige Kontrollstrukturen zu beschränken und bestimmte Maßnahmen zur besseren Organisation der Programme obligatorisch zu machen. Damit gestalten sich Programme übersichtlicher, weniger fehleranfällig
Welche Programmierung ist sinnvoll?
und viel leichter wartbar. Alle höheren Programmiersprachen sind in diesem Sinn bis zu einem gewissen Grad strukturiert. Im engeren Sinn bezeichnet der Begriff Programmiersprachen, die imperative Programmierung mit einer Strukturierung verbinden. Ein neues und gutes Beispiel für diesen Typ einer Programmiersprache ist Go. Ein besonderer Vorteil von Go ist der Compiler, der viel schneller ist als derjenige vergleichbarer Sprachen.
Für diese Art der Programmierung steht die Beschreibung des Problems im Vordergrund. Der Ablauf der Befehle zur Lösung des Problems findet sich dann automatisch. Funktionale Sprachen wie LISP oder die Sprachen der Logikprogrammierung sind Beispiele dafür. Man könnte meinen, dass diese Sprachen zu den neuesten gehören würden, da die Funktionalität des automatischen Findens einer Lösung anspruchsvoller sein sollte als eine imperative Programmierung. LISP gehört aber zu den ältesten Programmiersprachen, die immer noch in Verwendung sind. Einen Dialekt dieser Sprache zu lernen gilt als wichtiger Teil der Ausbildung eines wirklich guten Programmierers, auch, wenn man diese Sprache selbst nie verwendet.
Claudia Rothenhorst ist Medien- und Reise-Redakteurin bei der Web-Redaktion. In ihrer Freizeit reist sie gerne und schreibt darüber unter anderem auf Reisemagazin.biz.
Weitere Artikel von Ihr erscheinen u.a. im Blog der Webagentur Awantego.