Es gibt viele Arten von Programmiersprachen. Die meisten Programmiersprachen folgen nicht nur einem Typ, so dass es schwierig ist, für jede Sprache einen Typ zuzuordnen. Die Beispiele für jeden Typ sind in jedem Abschnitt unten aufgeführt, da sie die bekanntesten Beispiele für diesen Typ sind.
Hohes Niveau vs. niedriges Niveau
| ![[icon]](https://www.alegsaonline.com/image/20px-Wiki_letter_w_cropped.svg.png) | Dieser Abschnitt benötigt weitere Informationen. (August 2018) |
High-Level-Programmiersprachen erfordern im Vergleich zu Low-Level-Programmiersprachen weniger Kenntnisse über die Hardware. Programmiersprachen auf hoher Ebene erfordern einen Interpreter, der den Quellcode in Programmiersprachen auf niedriger Ebene umwandelt.
Deklaratives vs. Imperatives Programmieren
Deklarative Programmiersprachen beschreiben ein "Problem", aber sie sagen gewöhnlich nicht, wie das Problem gelöst werden soll. Die Problembeschreibung bedient sich der Logik, und das "Lösen" des Problems sieht oft so aus, als beweise es automatisch ein System logischer Axiome. Beispiele für solche Programmiersprachen sind Prolog, XSLT, LISP und SQL.
Imperative Programmiersprachen beschreiben ein System von Zustandsänderungen. Beim Start befindet sich das Programm in einem bestimmten Zustand, und dem Computer werden Schritte vorgegeben, denen er folgen muss, um eine Aktion auszuführen. Die Befolgung der Schritte führt dazu, dass das Programm den "Zustand ändert".
Im Allgemeinen sind deklarative Programmiersprachen sicherer und kürzer. Imperative Programmiersprachen sind häufiger anzutreffen, da sie einfacher zu verwenden sind.
Funktionell vs. Prozedural
Die funktionale Programmierung betrachtet die Programmierung wie eine Funktion in der Mathematik. Das Programm empfängt Eingaben, zusammen mit einigen Informationen, und verwendet diese Informationen zur Erzeugung von Ausgaben. Es hat keinen Zwischenzustand, und es ändert auch keine Dinge, die nicht mit der Berechnung zusammenhängen.
Verfahrensprogramme spezifizieren oder beschreiben Sätze von Schritten oder Zustandsänderungen.
Stapelbasiert
Stapelbasierte Sprachen sehen einen Teil des Programmspeichers wie einen Stapel von Karten an. Es gibt nur sehr wenige Dinge, die mit einem Stack gemacht werden können. Ein Datenelement kann ganz oben auf den Stapel gelegt werden. Dieser Vorgang wird allgemein als "Push" bezeichnet. Ein Datenelement kann von der Oberseite des Stapels entfernt werden. Dies wird als "Pop" bezeichnet. Sie können sich das Element am oberen Ende des Stapels ansehen, ohne es zu entfernen. Dies wird als "Peek" bezeichnet.
Wenn ein Programm als "push 5; push 3; add; pop;" geschrieben wird, legt es 5 oben auf den Stapel, legt 3 oben auf die 5, addiert die beiden obersten Werte (3 + 5 = 8), ersetzt die 3 und 5 durch die 8 und druckt die oberste (8). Beispiele für Programmiersprachen, die auf dem Stack basieren, sind die Sprachen Postscript und Forth.
Objektorientiert
Objektorientierte Programmiersprachen fassen Daten und Funktionen, die Daten ändern, in einer einzigen Einheit zusammen. Diese Einheit wird als "Objekt" bezeichnet. Objekte können miteinander interagieren und die Daten eines anderen Objekts ändern. Dies wird üblicherweise als Kapselung oder Information Hiding bezeichnet. Die meisten modernen Programmiersprachen sind objektorientiert oder erlauben zumindest diese Art der Programmierung. Beispiele hierfür sind Java, Python, Ruby, C++, C# und andere C-Sprachen.
Flussorientiert
Die flussorientierte Programmierung sieht Programmierung als Verbindung verschiedener Komponenten. Diese Komponenten senden Nachrichten hin und her. Eine einzelne Komponente kann Teil verschiedener "Programme" sein, ohne dass sie intern geändert werden muss.