SelfLinux Programmierung Programmierung unter Linux Abschnitt 3 | SelfLinux-0.13.0

| Programmierung unter Linux | Autor Formatierung GFDL

#### 3 Was für unterschiedliche Arten an Programmiersprachen gibt es?

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.