Eine ganze Menge Programmiersprachen entstanden, weil man sie nur in einer bestimmten Softwareumgebung braucht. Die ersten Programmiersprachen waren zum einen kompiliert, erzeugten also Maschinencode. Zum anderen waren sie für die Entwicklung von Stand-Alone Anwendungen gedacht. Mit einem zweiten Konzept, des Interpreters konnte man dagegen eine Programmiersprache in jedes Programm einbauen. Bei einem Interpreter wird der Quelltext on the fly übersetzt und daher gibt es hier auch die Möglichkeit Funktionen eines Systems aufzurufen in das die Programmiersprache eingebettet ist. Ein Großteil der Scriptsprachen entfällt in diese Kategorie wie die ganzen Shell-Scripts, aber auch in komplexer Software integrierte Sprachen wie die in Matlab oder R in Statistikpaketen.
R ist auch inzwischen eine eigenständige Programmiersprache gehört aber zu den „Special Purpose“ Sprachen. Während Sprachen wie Pascal, C oder Java den Anspruch haben sich für eine breite Anwendung zu eignen. wenn auch nicht für jede gleich gut, ist eine Special Purpose Sprache eine die bestimmte Feature hat die man nur für bestimmte Anwendungen braucht, dann sind sie aber sehr nützlich. R hat z.B. als elementaren Datentyp das Array nicht Skalare. Sinnvoll wenn man Statistik betreibt also große Datenmengen auswertet. Bei Pearl hat man eine Skriptsprache rund um die regulären Ausdrücke herum gebaut. APL ist eine Sprache für Mathematiker die nicht mal in einer Programmiersprache von ihren geliebten Symbolen lassen wollen. Alle drei – wen verwundert es – sind interpretiert.
Eine andere Intention für eine neue Sprache sind veränderte Anforderungen. Mit dem Auftauchen des Internets kommunizierten plötzlich Computer auf der ganzen Welt miteinander. Vorher tauschte man Daten aus oder hatte statische Informationen in HTML. Doch wie realisiere ich eine Anwendung die auf dem Zielcomputer Daten eines Servers braucht oder interaktiv ist, ohne das der Anwender jedes Mal eine Anwendung installiert und damit sie auf jedem Rechner läuft und nicht nur auf dem PC unter Windows. Es entstanden mindestens drei Ansätze dieses Problem zu lösen. PHP ist eine Scriptsprache die man in HTML einbetten und mixen kann. Die Ausgabe erscheint dann da wo der PHP Quelltext im HTML steht. Zur Ausführung braucht man ein Modul auf dem Server, der also die ganze Arbeit hat (ein Grund warum der Blog deutlich langsamer als die Webseite ist). Javascript macht das gleiche nur im Browser, verlagert also die Arbeit auf die Clients was eigentlich besser ist, doch dafür muss der Browser auch die Sprachfeatures verstehen was in der Anfangszeit problematisch war, weil Microsoft und Netscape jeweils ihre eigenen Süppchen kochten. Java entwickelt als vollwertige Programmiersprache für Anwendungen die vom Microcontroller bis zum Großrechner alles abdecken sollte, erlaubte es die Arbeit aufzuteilen – sie konnte vollständig auf dem Client laufen, auf dem Server oder verteilt. Das Konzept hat sich nicht durchgesetzt. Java erweis sich als zu viel Speicher verbrauchend, zu langsam und obwohl als da in einer eigenen virtuellen Umgebung ablaufend, als sicher angepriesen, gilt Java neben Adobe Produkten heute als ein Einfallstor für Schadsoftware,.
Java führt mich zur letzten Gruppe: Den Firmenstandards. Denn als Microsoft seine selbst veränderte Java-Engine aufgrund eines Prozesses von Sun nicht mehr ausliefern dürfte entwickelten sie einfach ihren Java-Clone – nur ein bisschen besser: C#. Es ist nicht der erste Firmenstandard. Microsoft hatte auch BASIC für Microcomputer adaptiert. Das Microsoft-BASIC wurde zum Standard, mit der Folge das jeder diese fürchterliche Implementation mit dem Spagetti Code für BASIC hielt – dagegen wehrten sich die Erfinder von BASIC erfolglos. Google musste als Folge natürlich auch eine eigene Sprache kreieren, nämlich Go. Firmenstandards haben Vor- und Nachteile. Der Vorteil ist, das eine Firma eine Sprache schneller weiter entwickeln kann, als wenn man immer mit einem Gremium alles abstimmen muss. Paradebeispiele sind die Entwicklung von BASIC durch Microsoft oder Pascal durch Borland. Der andere ist, dass man nun natürlich auch auf Produkte dieser Firma angewiesen ist.
In der Summe wird es wohl immer mehr Programmiersprachen geben. Auch weil immer neue Konzepte auftauchen. In den Sechzigern war es die Strukturierte Programmierung und die Typisierung von Daten, in den Siebzigern die Objektorientierung, die es enorm erleichterte, Code wieder zu verwenden und Probleme zu abstrahieren. Schon hier gab es aber den Bruch: erfolgreich wurden nicht Sprechen die vollständig objektorientiert waren wie Smalltalk, sondern Sprachen die Objektorientierung mit dem vorigen Modell verheiraten wie C++. (Ob dies angesichts der Fehler von C so sinnvoll ist sei mal bezweifelt).
Doch nicht immer braucht man alles, weshalb Dinosaurier wie FORTRAN noch heute eingesetzt werden, auch weil man bestehende Programme zwar erweitert, aber selten in eine neue Sprache umschreibt. Vor allem kann es auch nicht „die Sprache“ geben, schon alleine weil es zu viele grundlegende Konzepte gibt. Es gibt mindestens drei unterschiedliche Ansätze:
- prozedurale sprachen: Der von meisten am schnellsten verstandenen Ansatz bei dem man die Anweisungen angibt die nacheinander ausgeführt werden. Die meisten Programmiersprachen fallen in diese Kategorie.
- regelbasiette Sprachen: Man definiert nicht dem Algorithmus komplett, sondern Daten, Beziehungen und Regeln die man kennt und der Computer ermittelt die Lösung auf Basis der bekannten Daten und Regeln. Sie waren im Bereich der KI sehr erfolgreich.
- Funktionale Sprachen haben den Ansatz der Mathematik, das Funktionen die Eingangsdaten in die Ausgangsdaten transformieren. Im strengen Sinne kennen diese Sprachen dann keine Blockstrukturen und Wiederholungsstrukturen mehr.
- Manche definieren Sprachen wie SQL als eine weitere Kategorie. Hier gibt man an wie man Daten erhalten will, nicht jedoch wie dies geschehen muss.
Je nachdem welche Problemstellung man hat, wird eine der Gruppen besser geeignet oder schlechter geeignet sein. So wird es auch in Zukunft immer mehr Sprachen geben. ich muss auch sagen ich will nicht die Programmiersprache die alles kann, denn dann wird sie auch unhandlich und schwerfällig. Man kann in Maßen Funktionalität in Bibliotheken auslagern aber wenn eine Sprache schon in den Kernfeatures viel können muss, ist auch der Kern entsprechend groß. Darüber hinaus gibt es natürlich noch die technischen Grundgegebenheiten, Java hat diesen Spagat versucht, vom Microcontroller bis zum Server auf allen Systemen zu laufen, ob im Browser oder als Standalone Anwendung und ist daran gescheitert