Könnte man so eine "eigene" Programmiersprache entwickeln?

4 Antworten

Klar geht das.

Das geht sogar nur so.

Um eine Programmiersprache auf die Welt zu bringen, muss man dessen Herzstück - Compiler oder Interpreter - irgendwie entwickeln. :)

Auch das ist "nur" ein Programm.

Ein klassischer Compiler "übersetzt" dann den Sourcecode deiner tollen neuen Sprache direkt in Maschinensprache des Zielsystems um und schreibt ihn in eine ausführbare Datei ("EXE"). Das ist die Programmiersprache, die der Prozessor versteht und verarbeiten kann.

So machen es z.B. C und C++

Man spricht dann von einer "höheren Programmiersprache".

In welcher Programmiersprache der Compiler am Ende geschrieben wird, ist dabei zweitrangig, solange sie für den Zweck geeignet ist.

Man kann mit langsamem Basic einen guten C-Compiler bauen, wenn man möchte.

Der allererste Compiler der allerersten Programmiersprache wurde zwangsläufig durch manuelles Schreiben von Maschinencode entwickelt.

Beim zweiten Compiler hatte man dann die Wahl: Auch direkt Maschinensprache oder den ersten Compiler.

Und so wurden die Programiersprachen immer abstrakter und immer einfacher zu handhaben, weil ja mit der Zeit immer mehr Sprachen und Compiler verfügbar wurden, mit denen das immer einfacher möglich ist.

Die ersten Compiler waren idr. darauf beschränkt, sog. Assemblersprache zu verarbeiten. Assembler sind Programmiersprachen, die den Maschinencode 1:1 in einer lesbaren Befehlsfolge abbilden.

Eine andere schnelle und einfache Möglichkeit ohne viel Hardwarekenntnisse, eine eigene Programmiersprache zu entwickeln, besteht darin, einen Präprozessor zu entwickeln, der den Source in zwei Schritten übersetzt: Eigene Sprache -> C -> das durch einen vorhandenen C-Compiler jagen -> Exe-Datei

So macht es z.B. die Programmiersprache "PureBasic".

Eine weitere Möglichkeit ist die Möglichkeit, mit einer Laufzeitumgebung zu arbeiten. Ds ist ein fiktiver Computer, der auf einem echten Computer emuliert wird.

Dadurch lässt sich leicht plattformübergreifend entwickeln. Heißt: Derselbe Source funktioniert auf Windows und Linux gleichermaßen und auf unterschiedlichen Prozessorarchitekturen, sofern jeweils Laufzeitumgebungen für diese Fälle vorhanden sind.

Die "Exe-Datei" enthält hierbei nicht den Maschinencode eines bestimmten Prozessors sondern solchen für den fiktiven emulierten Prozessor der Laufzeitumgebung, der auf allen kompatiblen Plattformen gleich ist.

Wenn die Laufzeitumgebung clever gemacht ist, compiliert die im Zuge des Ausführens den Code erneut in den passenden Machinencode für die exakte Situation anstatt den Prozesor zu emulieren.

Das kann die Performance eines echten Compilers sogar übertreffen, weil diese zweite Kompilierung auf genau dem Prozessor zugeschnitten ist, der im Computer steckt, auf dem das Programm aufgerufen wird.

So machen es z.B. Java und C#

Java ist in manchen Fällen performanter als vorkompiliertes C.

Dann gibt es noch eine weitere Möglichkeit, einen Interpreter zu entwickeln. Das ist das, was du dir wohl vorstellst: Das ist ein Programm, das den Source zur Laufzeit Zeile für Zeile abarbeitet und direkt selber ausführt anstatt das ganze zu einer .exe zu verarbeiten.

So machen es z.B. .sh-Skripte, JavaScript und Python

Interpreter eignen sich gut für eingebettete Skriptsprachen. Sind aber prinzipiell langsamer, wenn sie wirklich interpretieren.

Auch hier besteht die Möglichkeit, zur Laufzeit nachträglich zu kompilieren wie bei Java.

Wie auch immer deine Programmiersprache aussehen soll: Du musst was bauen, was dafür sorgt, dass die Befehle so verarbeitet werden, dass der ausführende Prozessor sie verarbeiten kann. Also: Programmiersprache -> Etwas, das du mit was anderem entwickelt hast -> Maschinensprache

Und natürlich kannst du eine "einfache" Programmiersprache bauen, die ein Anfänger versteht.

Das ist also, wie du siehst, keine schwarze Magie :)

Woher ich das weiß:Berufserfahrung

Natürlich kannst du das. Das schwierige am Programmieren sind aber nicht die Programmiersprachen, sondern die Logik dahinter. Programmiersprachen sind einfacher als jede natürliche Sprache, es gibt nur ein paar dutzend Wörter, die Grammatik ist extrem simpel, und die meisten Code-Editoren schlagen oft schon viele Dinge vor, sodass man nicht mal alles auswendig wissen muss. Hier gibt es nicht viel zu vereinfachen, und man läuft auch Gefahr, Dinge komplizierter zu machen, wenn man die Sprache zu sehr vereinfacht, da man dann eventuell wieder Umwege für Dinge braucht, die weg-vereinfacht-wurden.

Aber wie gesagt sind nicht die Programmiersprachen die Herausforderung am Programmieren. Programmieren ist das, was man mit einer Programmiersprache macht. Mit einer Programmiersprache beschreibt man einen Programmablauf, man beschreibt, was unter welchen Umständen wie passieren soll.

Gerade heute mit Technologien wie ChatGPT könntest du ein Programm in einer Sprache verfassen, die du vermutlich ganz gut beherrschst: Deutsch.

Du könntest beschreiben, was das Programm wie tun soll, und ein LLM wie ChatGPT könnte es in eine Programmiersprache übersetzen. Dennoch könnte das Programm Fehler haben. Eventuell hast du in deiner Beschreibung Sonderfälle vergessen oder einen Logikfehler begangen. Vielleicht läuft das Programm auch nicht sehr performant, weil deine beschriebene Lösung nicht sehr effizient ist. Da hilft es dir nichts, dass dir die Sprache, mit der du die Lösung beschreibst, sehr gut liegt, wenn es daran scheitert, dass die Lösung, die du beschreibst, nicht ausreichend oder fehlerhaft ist.

Mit Programmiersprachen ist es eben nicht anders. Eine Programmiersprache kann man in wenigen Tagen erlernen. Wie man Probleme mit Logik löst, wie man ein umfangreiches Programm strukturiert, welche Datenstrukturen effizient sind, wie man Sicherheitslücken vermeidet, und welche Sonderfälle man beachten muss, das lernt man über lange Zeit, denn hier gehört neben Bildung auch viel Erfahrung dazu.

Es gibt z.B. Scratch, ein Programmiertool für Kinder. Das kommt praktisch ohne Sprache aus, das Programmieren an sich macht das aber auch nicht leichter.

Woher ich das weiß:Berufserfahrung – Tätigkeit als Webentwickler in einer Digitalagentur
Anhand dieser Idee kann man Programmiersprachen "vereinfachen" für Menschen, die nicht programmieren können.

Scratch ist ein gutes Beispiel, wie Programmieren ohne "Programmieren" geht.

Durch visuelle Bausteine kann man leichter verstehen was jetzt eigentlich wie abläuft, ohne einfach nur Zeichen in einer Textdatei anzustarren.

Aber natürlich; dein Beispiel kann man auch umsetzen, auch wenn es sich dann eher um das einfache abrufen von Funktionen handelt.

Eine Programmiersprache ist nach einem Syntax aufgebaut. Diesen muss man irgendwie umsetzen / verstehen können.

Was heisst für Dich Programmieren lernen. Programmieren an und für sich lernte Du in dem Du eine Programmiersprache lernst, bzw. anwendest? Die Programmiermethodik ist je nach verwendeter Programmiersprache unterschiedlich.

Mit heutige Programmiersprachen kannst Du eigene Bibliotheken mit Funtionen und Methoden zusammenbauen, die Du durch simple Aufrufe ausführen kannst.

Es braucht also nicht eine neue Programmiersprache, sondern nur Kenntnisse in einer Programmiersprache und Wissen über das System auf dem Deine Software laufen soll.

Woher ich das weiß:eigene Erfahrung