Dieses Dokument beschreibt die Thematik von Programmiersprachen. Es dient nicht einem Vergleich und nicht einer objektiven Einschätzung. Das Anliegen des Dokumentes ist es, den Sinn und Zweck von Sprachen in der Informatik zu beschreiben. Es werden grundlegende Gedanken erläutert, wie z.b. Was sind Sprachen? Wieviele Sprachen sind realistisch? Und wie realisieren wir eine mögliche Sprachlandschafe?
Zum Schluss wird eine aktuelle Tool-Chain genannt, mit der es möglich ist das Ziel der Sprachen zu erreichen.
Viel Spaß beim Lesen.
Sprachen in der Programmierung gibt es viele. Jede scheint ihre Berechtigung zu haben, doch wieviele Sprachen sind notwendig um korrekt zu modellieren?
Sprachen dienen dazu um im Computer zu modellieren bzw um ihn zu konfigurieren.
Am Ende wird auf eine Maschinencode-Ebene programmiert und konfiguriert. Letztlich steuert man den Elektronenfluss und wandelt einen elektrischen Input in einen Output um. Dabei wird der Input mit Sensoren aufgenommen und der Output durch Aktoren repräsentiert. Dazwischen gibt es viele unterschiedliche Features.
Features sind Merkmale, die die Translation des Inputs zum Output abstrahieren und so einen einfachen Umgang der Translation ermöglichen.
Generell kann man sagen, der Rechner besteht nur aus Bits, Transistoren und Kondensatoren. Die Bits kann man als Atome sehen, die Transistoren als Werkzeug und die Kondensatoren als Zeit. Raum ist derjenige, der benötigt wird um alle Transistoren, Kondensatoren und Leitungen zu platzieren. Demnach die Werkstatt.
Vielleicht werden Programmierer und Elektroingenieure daher als Bastler bezeichnet?
Was ist also eine Sprache? Wofür brauchen wir eine Sprache? Und warum brauchen wir eine Sprache?
Es ist so, dass der Rechner im Prinzip eine Touring-Maschine ist. Eine Touring-Maschine besteht aus einem Band, einem Alphabet und einem Schreiblesekopf. Die Daten stehen auf dem Band im Alphabet der Maschine geschrieben. Der Schreiblesekopf verarbeitet dann die Daten und schreibt sie wieder im Alphabet auf das Band. Oft an einer anderen Stelle des Bands. Das Band, d.h. der Speicher, bildet demnach auch einen Raum.
Doch was sind dann Sprachen?
Sie sind letztlich Features. Demnach dienen sie der Abstraktion und sind Werkzeuge der Logik. Logik ist wiederum eine Beschreibung um Gegebenheiten zu formulieren. D.h. auch eine Abstraktion. D.h. auch ein Feature. D.h. auch eine Sprache.
Es ergibt sich ein zyklischer Schluss. D.h. Sprachen formulieren Gegebenheiten.
"Du bist verheiratet" ist eine Gegebenheit. Sie ist aus anderen Gegebenheiten entstanden, wie z.B. Dass man sich kennenlernte.
Ist demnach alles eine Gegebenheit? Fast. Features, wie eine Sprache eröffnen eine neue Dimension. Eine Dimension, die nicht räumlich ist. Sondern kreativer, abstrakter und unendlicher Natur.
(Einstein: "Die Dummheit des Menschen und das Universum scheinen unendlich zu sein. Bei zweitem bin ich mir nicht ganz sicher.")
Sprachen dienen demnach der Kreativität, Abstraktion (als Feature) und Vielfältigkeit.
Somit ergibt sich die Frage des Blogs: Wieviele Sprachen sind notwendig?
Sprachwissenschaftler sagen: Jede Sprache, die aktuell von Menschen auf der Erde gesprochen werden, sind gleichwertig. D.h. es lässt sich in jeder Sprache den gleichen Gedanken in ähnlicher Effizienz, Effektivität, Robustheit und Transformität formulieren. Effizienz im Sinne von zeitlicher Geschwindigkeit, Effektivität im Sinne von vergleichbaren und gleichem Ergebnis, Robustheit im Sinne von Fehlerkorrektur und Transformität im Sinne von vielfältigen Variationen.
Sind alle Sprachen gleichwertig, so brauchen wir nur eine.
In der Informatik spricht man dabei von touring-vollständigen Sprachen.
Jetzt ist es jedoch so, dass wir weder wissen, ob uns ein Feature fehlt, in dem Touringmodell, noch wissen wir, ob wir alle erreicht haben.
In Prognosemodellen wissen wir, dass die Anzahl der unbekannten Variablen immer größer ist als die berücksichtigten.
Daher Sprechern wir mehr als eine Sprache.
Was heißt das in der Praxis?
Wie brauchen alle Sprachen, soweit sie sich deutlich unterscheiden. Deutlich unterscheiden bedeutet wiederum, sie müssen in ihren Wörtern, die Features präsentieren, so unterschiedlich sein, dass die Schnittmenge signifikant kleiner ist als die gesamte Anzahl der Wörter. D.h. die Schnittmenge sollte 80% nicht übersteigen. Konkret wäre das beste sie hätten keine Schnittmenge. Dann benötigen wir "beide" Sprachen.
Die Anzahl der notwendigen Sprachen ist somit abhängig davon, wie unterschiedlich sie sind. Wenige unterschiedliche Sprachen sind gleichwertig, zu vielen gleichen Sprachen. Zusätzlich zum Unterschied der Sprachen, ist die Anzahl der "notwendigen" Sprachen, abhängig von der Anzahl der Features (Worten unterschiedlicher Bedeutungen innerhalb der Sprache).
Im Chinesischem gibt es unterschiedliche Dialekte. Jedoch sind die Schriftzeichen gleich. So haben wir damit schriftlich die gleiche Bedeutung, jedoch sprachlich unterschiedliche Laute.
Dass bedeutet, dass im schriftlichen sich die Features zu 100% überschneiden, was tendenziell dazu führt, dass die Dialekte von der Bedeutung gleich sind, wir also keine weiteren Features gewinnen indem wir einen weiteren Dialekt lernen. Die gesprochene chinesische Sprache ist trotz ihrer Dialekte tendenziell gleich, da die Bevölkerung anhand der Zeichen weitere Bedeutungen lernt (insbesondere fachliche), so dass, trotz unterschiedlicher Laute, die gleiche Bedeutung entsteht. In anderen Sprachen ist es mit den Dialekten äquivalent. Auf die Theorie bezogen schließen wir, man erlangt keine weitere Dimension durch einen Dialekt.
(Ausnahme entsteht, wenn der Dialekt auch geschrieben wird, denn dann entsteht tendenziell auch eine andere Bedeutung. Bsp Servus vs. Tschüß und ciao. Servus soll herzlicher sein als Tschüß und ciao in Deutschland cooler.
Das zeigt auch, dass für gesprochene Sprachen die Bedeutung immer ortsspezifisch ist. Was bedeutet, dass alle gesprochenen Sprachen gleich wichtig sind zu lernen.)
Bei der Informatik kann man zum Glück reduzierter bleiben.
Geht man davon aus, man verwendet nur Sprachen, die sich in ihren Wörtern zu mindestens 20% unterscheiden. (da 20% der Breite der gaussschen Normalverteilung für nicht signifikante Abweichungen um den Erwartungswert entspricht), ergibt sich die Anzahl der "notwendigen" Sprachen anhand der existierenden Features.
Für Features gilt das gleiche wie für Sprachen, sie müssen sich in ihren Eigenschaften zu mindestens 20% unterscheiden.
Das praktisch zu betrachtene Feature ist atomar. Hat also nur eine Eigenschaft.
So ergibt sich die Anzahl der notwendigen Sprachen in der Informatik zum aktuellen Zeitpunkt hier Vorort und im Sinne der möglichen Verwaltung, anhand der atomaren Features der verwendeten Sprachen. (Ein Feature ist solange atomar, solange niemanden zwei Merkmale in diesem Feature einfallen, welche von der Mehrheit anerkannt werden.)
Atomare Features in der Informatik zum aktuellen Zeitpunkt, sind beispielsweise :
Kopieren, Zeiger, Vererbung, Polymorphismus, Verschiebung, Lokalisierung, Container, Schablonen, Timing, Responsbility und mehr. (Bitte in den Kommentaren erweitern.)
Das entspricht in der Programmierung :
Copyconstructor, Pointer, Inheritance, Adressen und Addressoperationen, class/structs, Templates/Generics, Multithreading/Concurrency und Handshakes, Visibility.
Das sind alles Features, die in c++ enthalten sind, jedoch nicht in c.
Wir erlangen durch diese Features in der höheren Programmiersprache somit mehrere zusätzliche Dimensionen.
Java kann dies auch, jedoch hat es bis auf den Gabagecollector nicht mehr zusätzliche Features. Es lohnt sich also nicht Java und C++ zu können, sondern nur den Unterschied zu wissen. (Pointer, Copy Paradigma, Gabagecollector.)
Es ist so, dass die Sprache C, z.B. das Feature Vererbung nicht kann. Dennoch ist die Sprache touringvollständig. D.h. es ist möglich das gleiche Programm in C, wie auch C++ zu schreiben. Jedoch in einer geringeren Dimension und somit nicht so kreativ und vielfältig. Modellierung, soweit dies bedeutet Eigenschaften der Gegebenheiten zu formulieren, ist in C schwerer, da wir weniger abstrahierende Dimensionen haben.
In der Informatik gibt es nun zusätzlich sogenannte Domain Specific Languages (DSL). Es werden dabei Sprachen verwendet, welche die Business Logik abdecken. Sie beziehen sich beispielsweise auf den Bereich des Bankings. Konkret: Ein Banker kann damit Zahlungen spezifizieren oder Gegebenheiten des broking modellieren. Z.B. kann er sagen: verkaufe Aktie, wenn der Wert niedriger ist als andere Aktie.
Brauchen wir diese?
Ja, denn sie erhöhen die Dimensionen. Und wenn die Dimensionen endlich sind, dann kommt man dem Ziel näher.
Domain spezifische Sprachen sind notwendig. Jedoch, sollten sie nicht zu ähnlich sein. Zusätzlich sollten sie ausschließlich atomare und unterschiedliche Features implementieren.
Zum Beispiel wären da: Ableitung, Integral, Korrelation/Faltung und auch Bewertungssysteme, Fuzzi Logik, Kooperation (friend classes) und Kooperationsstrategien und ihre Bestandteile (John Nash Equilibrium).
Tools :
Aktuell gibt es ein interessantes Tool, welches sich Embededer nennt.
Dieses ist, mit MSP (ein DSL Tool), zusammen ein Werkzeug, welches sich sehr gut zur Definition eigener DSL dient. Und was mittlerweile auch auf C++ aufbaut.
Daneben sind weitere Tools wie Spufax und Eclipse Xtext zu empfehlen.
Vielleicht lässt sich das automatic completion Tool Xtext auch mittlerweile mit Embededer kombinieren.
Wieviele DSLs brauchen wir?
Nur noch wenige, denn die Maschinen sind endlich.
Ideen und Dimensionen womöglich unendlich.
Disclaimer :
Die verwendeten Begriffe entsprechen nicht zu 100% der üblichen Verwendung.
Genaue Angaben/Referenzen können leider nicht hinzugefügt werden.
Rassistische Eindrücke sind nur aufgrund der Informatik zu verschulden.
Änderungen der eigenen Meinung sind unbeabsichtigt. Stand 2016. Ort München. Kostenlose Vervielfältigung ist erlaubt, unter hinzufügen dieses Reclaimer. Das gut unterliegt der Creative Common License 3.0, zu finden unter creative-common.org.
Autor Sebastian Böhmer.