Programmiersprachen lassen sich nach unterschiedlichen Kategorien
klassifizieren. Zuerst einmal gibt es Sprachen, die zwar oft als
Programmiersprachen bezeichnet werden, aber in eigentlichem Sinne
keine darstellen: dazu gehören z. B. die Seitenbeschreibungssprache
PostScript, die Auszeichnungssprache HTML des World Wide Web oder
die Datenbank-Anfragesprache SQL. Daneben gibt es die echten
Programmiersprachen, mit denen man dem Computer tatsächlich etwas
"befehlen" kann.
Daneben gibt es die Unterscheidung in proprietäre und offene
Programmiersprachen; Programmiersprachen heißen i. A. offen, wenn:
-
sie in allgemein zugänglicher Form standardisiert sind
-
eine freie Implementierung existiert
-
für mehrere Betriebssysteme Implementierungen existieren
-
sie nicht von einem elitären Zirkel, sondern einer offenen
Community gepflegt und fortentwickelt werden.
Sonst heißen sie proprietär; welchen Typ Sprachen der Linuxer
bevorzugt, ist nach dem oben gesagten nicht schwer zu erraten...
Etliche Programmiersprachen sind nur für einen bestimmten Zweck
optimiert, für den sie sich dann hervorragend eignen. Dafür taugen sie
gar nichts, wenn man mit ihnen irgendwas anderes machen will
(Nischensprachen). Im Gegensatz dazu sind die Allzwecksprachen
prinzipiell für alle Probleme geeignet, auch wenn sie sie
unterschiedlich gut oder elegant bewältigen.
Ein Computer, "so wie er ist", versteht genau genommen nur eine
Programmiersprache: die Maschinensprache
seines Prozessors (auch Assembler genannt).
Um Programme in anderen Sprache überhaupt zum Laufen zu bringen,
muss man einen der folgenden Wege einschlagen:
-
Ein Compiler
übersetzt vor der Ausführung das gesamte Programm
in die Maschinensprache; das hat u. a. den Vorteil, dass damit
eine recht schnelle Ausführung erzielt wird. Nachteil ist, dass
das Compilieren selbst sehr zeitaufwändig sein kann und gewisse
Programmiertechniken, die dann und wann sinnvoll sind (z. B. sich
selbst ändernde Programme), hier nicht eingesetzt werden können.
-
Ein Interpreter arbeitet Stück für Stück die Anweisungen der
Programmiersprache ab; das geht i. A. auf Kosten der Geschwindigkeit,
vereinfacht aber u. U. die Entwicklung von Programmen.
-
Um die Vorteile beider Welten vereinen zu können, gibt es auch noch
folgende Möglichkeit: die Programmiersprache wird von einem Compiler
in eine Zwischensprache ( Bytecode) übersetzt, die dann von einem
Interpreter ("virutal machine") hochperformant ausgeführt werden kann.
Um Programmierprobleme zu beschreiben, gibt es unterschiedliche
Paradigmen. Die wichtigsten sind:
-
das funktionale Paradigma: man beschreibt, wie verschiedene
Funktionen ihre Funktionswerte aus den Eingabewerten bestimmen und
beschreibt das Problem als geeignete Komposition mehrerer Funktionen.
-
das imperative Paradigma: man gibt dem Computer Anweisungen, wie er
das Problem schrittweise lösen kann.
-
das objektorientierte Paradigma: man modelliert das Problem mit
unterschiedlichen Objekten, die untereinander über wohldefinierte
Schnittstellen kommunizieren.
Dies ist nur eine grobe Definition. Um zu erkennen, was dies
tatsächlich bedeutet, muss man erst etwas Programmiererfahrung
sammeln. Darüberhinaus gibt es andere Ansätze in Nischensprachen
(z.B. PROLOG: logisches Paradigma)
In der theoretischen Informatik ist noch der Begriff der
"Turing-Vollständigkeit" bedeutsam; eine Sprache heißt turing-
vollständig, wenn man jedes Problem, das berechenbar ist, mit
ihr lösen kann. Eine Allzweck-Sprache ist immer turing-vollständig,
es gibt aber auch turing-vollständige Sprachen, die, obgleich sie
alles berechnen können, für die Praxis nicht taugen, da sie entweder
so kompliziert sind, dass sie keiner beherrschen kann, oder so simpel,
dass für eine einfache Addition seitenlange Anweisungsschritte nötig
sind...
Weitere Unterscheidungsmöglichkeiten ergeben sich nach dem
Einsatzbereich der Programme:
-
Daemonen (auch: Services, Dienste) sind Programme, die ständig im
Hintergrund laufen sollen und dort irgendwelche Sachen erledigen, z.B.
Webseiten ausliefern, Mail weiterleiten, den Drucker steuern usw. Der
eigentliche Computerbenutzer kommt mit ihnen so gut wie gar nicht in
Berührung. Da für solche Dämonen ein Höchstmaß an Stabilität und
Performance sowie eine enge Interaktion mit dem Betriebssystem
angestrebt wird, sind sie meist in C geschrieben, es gibt aber auch
Ausnahmen.
-
Viele Programme sind dazu gedacht, von der Textkonsole aus gestartet
zu werden, dabei ggf. Argumente und Funktionen entgegenzunehmen und
mit einer Ausgabe zu antworten. Dazu gehören unter anderem die
grundlegenden Befehle (cp, ls, rm, ...), Shell-Scripte oder
Programme in anderen Skriptsprachen, insbesondere die "Einweg-Scripte",
die nur für eine einmalig zu erledigende Aufgabe geschrieben und
anschließend nicht mehr verwendet werden.
-
Die meisten Endbenutzer sind es gewohnt, dass ein Programm über eine
gefällige grafische Benutzeroberfläche (GUI - Graphical User Interface) zu bedienen ist. Die
meisten Standardsprachen verfügen über Bibliotheken oder
Schnittstellen, mit denen sich solche GUI-Programme realisieren lassen
können.
-
Seit dem Durchbruch des
World Wide Web gewinnt die Gattung der
webbasierten Programme an Bedeutung: diese nehmen ihre Eingaben über
ein Formular
im Webbrowser entgegen und liefern als Antwort eine
HTML-Seite, die im Browser angezeigt wird. Charakteristisch ist, dass
der Benutzer und der Rechner, auf dem das Programm läuft, voneinander entfernt
sind. Dies ist die klassische Domäne von Skriptsprachen wie Perl,
Python oder PHP.
-
Ein bisschen aus dem Rahmen fallen die so genannten
"Sandbox-Programme". Diese sind gar nicht dazu gedacht, direkt vom
Betriebssystem heraus gestartet zu werden, sondern machen nur in einer
speziellen Umgebung ("Sandbox") Sinn. Für Programme in der Sprache
PROLOG
ist das der PROLOG-Interpreter, für
JavaScript
der Browser usw.
|