Neue Programmiersprache erfinden?

7 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

(0)

Wie man ursprünglich beginnen mußte hat klaffid ja schon gesagt. Da Du wohl auch wissen willst, wie man es heute macht: Man schreibt den Compiler oder den Interpreter (oder Systeme, die von beidem etwas enthalten) in einer höheren Programmiersprache, die es schon gibt. Meistens wird, soweit ich das überschaue, C dafür genommen. Erstens, weil C für so gut wie jeden Rechner und jedes Betriebssystem vorhanden ist, so daß man die neue Sprache auf möglichst viele Plattformen anbieten kann. Zweitens, weil C "hardwarenah" genug ist, um sich dafür zu eignen, und drittens, weil es um C herum, besonders auf Unix, ein bewährtes Bündel von Entwicklerwerkzeugen gibt (make, lint, ...) insb. auch solchen, die speziell zum Programmieren von Compilern dienen (lex, yacc...).

Wenn auch die neue Sprache "hardwarenah" genug dafür ist, kann man sich auch das Ziel setzen, die neue Sprache in sich selbst zu programmieren, so daß der Compiler sich selbst compilieren kann. Dann kann in der eigenen Sprache weitergearbeitet werden. Das Team von Free Pascal hat in den letzten Jahren nach und nach für einige Rechnerplattformen geschafft (siehe News-Seite bei freepascal.org).

Bei den Sprachen wie Perl, Python oder JavaScript, die sehr weit von der Maschine weg abstrahieren und sich dafür auch etwas mehr Laufzeit gönnen, wäre das wenig sinnvoll, und so wird man dort wohl bei C als Entwicklungssprache bleiben, solange sich keine neue hardwarenahe, bzw. "Systemprogrammiersprache" anstelle von C anbietet. Ob Googles Go-Sprache das vielleicht sein wird? Schaun wir mal.

(1)

Das Bisherige bezog sich auf die Software-Voraussetzungen zur Implementierung der neuen Sprache. Aber Du fragtest ja nach der genauen Vorhgehensweise beim Erfinden einer Programmiersprache. Einiges kannst Du dort nachlesen, wo die geistigen "Eltern" neuer Sprachen die Motivation beschreiben, die sie beim Entwurf ihrer Sprache bewegte. Ebenso interessant ist die manchmal harsche Kritik, die Programmiersprachen von ihren Kritikern einstecken müssen. Einer der angesehensten Informatiker warf COBOL vor, es verkrüppele den Geist, und es sei ein Verbrechen, es zu unterrichten. Studenten, die bereits mit BASIC gearbeitet hatten, hielt er dadurch für unheilbar mental verstümmelt. Man muß seine Auffassung nicht teilen, um sehen zu können, daß schlecht entworfene Einzelheiten einer Sprache denen, die sie nutzen, viel Mühe und Verdruß bereiten kann.

Für die Denkarbeit beim Entwurf einer neuen Sprache kann ich Dir kein besseres Anschauungsmaterial empfehlen als die bisherigen Dokumente zur Entwicklung von Perl Version 6. (Siehe bei http://en.wikipedia.org/wiki/Perl_6 die unten angegebenen exterenen Links.) Diese Version bedeutet in der Entwicklung von Perl einen großen Sprung, da sie eine Menge neuer Fähigkeiten bringt, aber sich auch in ihrer Grammatik stark von den bisherigen Versionen unterscheidet. Die Neudefinition wurde von Anfang an von der Gemeinschaft der Entwickler und Nutzer in einem offenen Prozeß erarbeitet. Es wurden Vorschläge gesammelt, ausführlich diskutiert und kommentiert. In den Dokumenten ist zu vielen Einzelheiten erklärt, warum so und nicht anders entschieden wurde. Inzwischen kann man mit Perl 6 schon ganz passabel arbeiten.

Auch dir danke für eine sehr aufschlussreiche, lange Antwort :)

Und dann hoffe ich mal, dass ich in Info nicht noch unheilbar mental verstümmelt werde ;)

Wenn hier jemand studiert: welche Sprache lernt man da zuerst? Würde mich einfach mal interessieren, weil ich Medieninformatik in Erwägung ziehe.

LG, HugaTV ;)

2

Also in deinem Text sind haufenweise Fehler!

Einen Interpreter benutzt man für Scripte . Es gibt Keine Höheren Programmiersprachen nur Assembler, Programmiersprachen und Scripte !

C oder C++ ist native das heisst entweder Windows , Mac oder Linux aber nicht alles . Für das Plattform unabhängige programmieren verwendet man Java oder Phyton .

C oder C++ sind für Interpreter viel viel viel zu langsam ! Besser ist es Assembler zu verwenden (ist Hardware nahe , schwer , aber Super mega schnell )

Eine Programmier Sprache braucht ausser dem nicht immer einen Compiler . Durch einen Interpreter kann man den Code in der eigenen Programmiersprache in C++ Code umbauen . Der wird dann Kompeliert und alles ist als wäre es in C++ gemacht worden.

Ausserdem ist C für (fast) alles sinnlose . Alles ist prozentual ! Total sinnlos . Mit Java kann man OO programmiren (Geht Super einfach)

0
@JavaFreak

Die Fehler beginnen eigentlich erst in diesem Kommentar.

Einen Interpreter benutzt man für Scripte.

Nicht ausschließlich. Es gibt auch Kombinationen aus Compiler und Interpreter, bei denen Code für die Entwicklung des Produkts erst in eine Zwischensprache übersetzt und später zur Ausführungszeit interpretiert wird. Gerade Java ist so ein Beispiel.

Es gibt Keine Höheren Programmiersprachen (...)

Programmiersprachen wie Java, C, C++, ... werden aufgrund ihrer Abstraktion (weg von Maschinensprachen) als höhere Programmiersprachen bezeichnet. Sie sind leichter lesbar, also besser verständlich für den Menschen.

(...) nur Assembler, Programmiersprachen und Scripte!

Eine Unterscheidung zwischen Programmiersprache und Skript ist wie die Unterscheidung zwischen Federkiel und beschriebenem Pergament. Das Werkzeug (Programmiersprache) wird für die Herstellung des Produkts (Skript) verwendet.

(...) oder Phyton.

Die Sprache heißt Python.

C oder C++ sind für Interpreter viel viel viel zu langsam ! 

Nein. Sie wurden im Übrigen bereits für Interpreter eingesetzt (z.B. Lua, CPython, Caml Light, ...).

Ausserdem ist C für (fast) alles sinnlose . Alles ist prozentual ! 

Ja, auch die vielen Treiber, Grafik APIs (wie Direct3D, OpenGL) oder die JVM, ... alles sinnlos. Am besten, man hätte das alles objektorientiert (und somit auch einigem Overhead) zusammengebaut. 🤦

PS.: Ja, ich bin nur durch Zufall auf diesen sehr alten Thread gestoßen. Aber selbst vor 7 Jahren (und mehr) waren diese Aussagen völliger Quatsch.

2

Die Frage ist, in welcher Sprache wurde denn der erste Compiler geschrieben, wenn es noch gar keinen Compiler gab, um diesen Compiler in Maschinencode umzuwandeln?

Die Antwort: In gar keiner. Die ersten Compiler wurden direkt in Maschinencode geschrieben. Natürlich war der nicht so Umfangreich un dmächtig wie heutige Compiler. Aber da es dann einen Compiler gab, konnte man neue Compiler in einer Programmiersprache schreiben, womit es für Menschen viel einfacher ist einen besseren Compiler zu programmieren. Es war also nur ein einfacher Compiler nötig, um einen komplizierteren zu kompilieren.

Wenn du heute eine neue Sprache entwickeln wolltest, wäre das viel einfacher, da du einen Compiler dafür in einer schon vorhandenen Sprache programmieren könntest.

Das klingt logisch, so hatte ich mir das auch gedacht, aber die Umsetzung früher klingt mir noch leicht... theoretisch.

Aber schon interessant :)

Was genau meinst du mit Maschinencode? Also ich kenne als systemnahe Sprache ja Assembler, aber das ist wohl nicht dasselbe. Ist es so eine Art binäre Zahlen-System, indem so was programmiert wurde? Klar, im Innern versteht der Rechner das ja eh nur in Nullen und Einsen. Wurde das dann auch genauso geschrieben?

Nochmal LG, HugaTV

0
@HugaTV

Maschinencode ist fast Assembler. Assembler-Code wird ja von einem Programm, das man auch Assembler nennt in das eigentliche Programm umgewandelt. Dieses Programm besteht nur noch aus Zahlen. Das ist der Maschinencode. Allerdings: Die Assembler-Sprache ist einfach eine Andere Darstellung dieser Zahlen, so dass es ein Mensch einfacher lesen kann. Also z.B. gibt es (je nach Computer-Art unterschiedlich) den Assembler-Befehl "nop", der die Zahl 90 ist. Das Assembler-Programm schreibt dann "nop" einfach in die entsprechende Zahl um.

Das war jetzt ein bisschen vereinfacht dargestellt. Es gibt auch noch andere Dinge, die der Compiler machen muss, z.B. Sprungadressen berechnen. Manchmal ist ein Assembler-Befehl auch nicht immer die selbe Zahl, sondern je nach Kontext eine andere. Aber mehr oder weniger ist es so wie ich geschrieben habe.

Da stellt sich wieder die Frage....wie hat man das erste Assembler-Programm in Maschinencode umgewandelt? ;) Das hat man dann wohl direkt in Maschinencode (Zahlen) eingegeben. Und den ersten Compiler hat man dann in Assembler geschrieben. Glaube nicht, dass man den binär eingegeben hat, wäre aber auch möglich gewesen.

Es gibt bei Compilern auch verschiedene Techniken. Einige wandeln den Programmcode direkt in Maschinencode (Zahlen) um und andere wandeln ihn in Assembler um und benutzen dann ein bereits vorhandenes Assembler-Programm, um das dann in Maschinencode umzuwandeln.

0
@klafidd

Und wie hat man dann den Eingabe-Mechanismus für den Maschienencode erstellt? ^^

Die frage nach der ersten "Programmiersprache" und womit diese erstellt wurde ist mir schon des öfteren untergekommen und die Antwort ist genau so simpel wie logisch... Denn das erste Ding, das man so halbwegs als Computer bezeichnen konnte wurde nicht im eigentlichen Sinne programmiert. Er wurde einfach nur gebaut. Er bestand aus ein paar Schaltern (für den "Benutzer") und einigen Schaltungen (für das ganze interne Zeug). Wenn mann zwei Schalter gedrückt hat, haben diese dann einige (innere) Schaltsysteme ausgelöst und dadurch dann eine Lampe zum leuchten gebracht.

Wenn man dann z.B. den Schalter gedrückt hat, über dem eine "3" stand und dann den Schalter über dem eine "5" stannd, dann hat ein lämpchen geleuchtet, über dem eine "8" stand.

Dieser "Computer" wurde immer weiter entwickelt, bis dieser dann irgendwann in der Lage war Monitore anzusteuern und größere Rechenprozesse zu absolvieren und damit konnte man dann anfangen seine ersten Programmiersprachen zu entwickeln.

1
@UGCom

Wow! Ich kann mich jeden Tag mehr für Computer und Programmieren begeistern. Und Hut ab vor denjenigen, die als erste auf die Idee gekommen sind, mit einem Computer "zu sprechen". Und natürlich auch vor euren Antworten :)

Angenehm formuliert, und trotzdem so wissenschaftlich. Schön, dass ich damit auch was anfangen kann, obwohl ich erst zwei Jahre Informatik hab.

Danke!

0
@klafidd

Meine ersten Computer waren nur in Maschinencode zu programmieren ...

Das war ein Selbstbau-Computer auf 8080-basis, später auf Z80-Prozessor ausgebaut. Er hatte wahsinnige 2KB RAM-Speicher, später noch 2KB nicht flüchtiger RAM-Speicher dazu. (ca. 1978 - 1982)

http://www.killozap.de/Photo/Z80-1/z80-1.html

So sah sowas dann aus ...

Es gab keinen Bildschirm, keine normale Tastatur. Als Bildschirm hab ich mal den Oszilloscopen meines Vaters missbracuht, mir der wahsinnigen Auflösung von 16 x 16 Bildpunkten ...

1
@Minihawk

Als Bildschirm hab ich mal den Oszilloscopen meines Vaters missbracuht

Einfach genial ^^

Jetzt wo ich das gelesen habe, bekomme ich doch glatt wieder Lust, meinen ganzen Elektro-Schrott rauszukramen, und mir nen kleinen Roboter zu basteln.

Mal gucken ob ich noch irgendwo ein paar anständige Micro-Controller habe.

Made my Day =)

0

Früher war der Anreiz, eine Programmiersprache zu erfinden, wesentlich größer als heute. Man hatte dumme Rechner, die nur Basic verstanden und für bestimmte Aufgaben viel zu langsam waren.

Ich habe damals für meinen Oric Atmos auch eine Programmiersprache geschrieben. Dies habe ich gemacht, weil der Rechner für die Berechnung der Mandelbrotfunktion unter Basic viel zu langsam war.

Die Programmiersprache benutzte die umgekehrte Polnische Notation (UPN), was für Computer die denkbar infachst umsetzbare Technik ist. Bei UPN werden Daten und Befehle auf einen "Stack" geschrieben.

So wird z.B. eine Addition so geschrieben:

5 6 + Berechnet die Addition von 5 und 6

5 6 + 7 8 - * Berechnet (5+6)*(7-8)

Es gibt Programmiersprachen, die UPN benutzen, die bekannteste ist FORTH.

Ich habe damals Buchstaben als Kommandos benutzt, für die Berehcnung habe ich Festkomma-Arithmetik in Assembler programmiert, aber das braucht man heute bei den schnellen Prozessoren nicht mehr, ich hatte nur 1 Megahertz.

Also der Reihe nach: Die erste Programmiersprache war Maschinensprache. Das wurde dann in etwa so realisiert, dass du Lochkarten gestanzt hast oder auch Kabel umgesteckt hast.

Wie man eine neue Programmiersprache erfindet: Man denkt sie sich aus, wobei man sich an bestimmten Paradigmen orientieren kann (Objektorientiert, imperativ, ...). Wenn man dann eine Sprache in der Theorie entwickelt hat, die alles nötige bereitstellt, um Turing-vollständig zu sein und auch noch ein paar gängige Funktionen wie verschiedenste Operatoren, Funktionen, evtl. Klassen, Strukturen etc. bereitstellt, geht es an die Implementierung: Dazu schreibst du einen Compiler für die Sprache - et voilà. Assembler brauchst du dazu auf jeden Fall, denn der Compiler übersetzt deine Programmiersprache in Maschinensprache (im Prinzip Assembler), die der Computer dann "versteht" (näheres würde zu weit führen; siehe dazu z.B. ein Informatikstudium).

Und noch was: Bjarne Stroustrup hat keine neue Programmiersprache erfunden, sondern C um die objektorientierten Bestandteile wie Klassen etc. erweitert. Nur so am Rande.

Aber C++ ist doch was anderes als C.

Wenn man's vermischt, ist schlecht.

Egal, ich versteh das immer noch als "neue" Programmiersprache, die eben auf C aufbaut, aber trotzdem was eigenes ist.

Dann geh ich mal Informatik studieren. :) Schon gebongt. Hoffentlich.

0

Am Anfang war es einfach. Da gab es nur die in die Mikroprozessoren eingebaute Maschinensprache. Diese orientierte sich nur an dem, was die Prozessorhardware unmittelbar konnte. Für Menschen, die nichts mit der Mikroprozessorentwicklung zu tun haben, erschließen sich solche Sprachen sehr schwer. Mit den Maschinensprache konnte man die Assemblersprachen entwickeln und übersetzen, die für Menschen eine leichter verständliche 1:1-Übersetzung der Maschinensprachen waren. Diese werden ständig weiterentwickelt, so daß sogenannte Makroassembler entstanden, die mehr konnten als die Maschinensprache. Die Fortsetzung dieser Entwicklung führte zu höheren Sprachen, die menschlichen Bedürfnissen, insbesondere der menschlichen Sprache und Symbolik (z.B. Formeln in Büchern) immer besser angepaßt waren und so Menschen zunehmend in die Lage versetzten, immer anspruchsvollere Aufgaben zu lösen, ohne noch über technische Grenzen des Computers nachdenken zu müssen. Solche Sprachen werden meist mit Kompilern oder Interpretern in die Assemblersprache des jeweiligen Prozessors übersetzt und dann mit dem passenden Assembler in die jeweilige Maschinensprache umgeformt. Je nach Anspruch des Erfinders einer Sprache war sie einfach und eng begrenzt oder verfolgte das Ziel, aus sich selbst heraus unbegrenzt erweitert werden zu können. Die Entwicklung zeigt, daß sich die Sprachen immer ähnlicher werden, je weiter sie entwickelt werden, weil die Liebhaber einer Sprache nach immer mehr Möglichkeiten und Fähigkeiten streben aber dazu nicht die Sprache wechseln wollen. Hätte man das am Anfang dieser Entwicklung schon gewußt, hätte man nur eine Sprache entwickeln müssen, mit der man alle Aufgaben lösen kann. Eine solche Sprache ist Object Pascal. Sie ist unbegrenzt erweiterbar. In den allermeisten Fällen geht das ausschließlich durch den Einsatz dieser Sprache selbst. Wo das noch nicht geht oder die Entscheidende Idee fehlt, kann man Code in Assembler einbauen. Weil auch die Entwicklungswerkzeuge (Compiler mit integriertem Assembler, IDE usw,) in Object Pascal geschrieben sind, braucht man darüber hinaus nichts für diese Weiterentwicklung außer der Hardware, auf der diese Werkzeuge verwendet werden sollen. In Form von Free Pascal Compiler und Lazarus-IDE gibt es das als weitgehend systemunabhängige Werkzeuge und Sprache nach dem Motto "Write once, compile anywhere" Zitat von (https://en.wikipedia.org/wiki/Lazarus_%28IDE%29).

Was möchtest Du wissen?