Wie entw. man eine neue Progr.Sprache ?

Dieses Thema im Forum "Programmieren" wurde erstellt von ghost rider, 8. Dezember 2002.

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. ghost rider

    ghost rider Megabyte

    Registriert seit:
    23. März 2002
    Beiträge:
    2.319
    Hi @ll,

    wegen zahlreicher Antworten hier dieser Rubrik und weil es mich einfach mal interessiert möchte ich folgende Frage stellen:

    Wie wird eine neue Programmiersprache entwickelt ? Welche Voraussetzungen sind nötig ? Braucht man hierzu eine Plattformunabhängige Spezialsoftware oder würde ein einfacher Texteditor schon genügen.

    Ich hab ja, ist ja schon sehr lange her, mal die Frage gestellt, wie der CPU denn "beigebracht wird", wie sie welche Bitfolge wie zu interpretieren hat, also als internen Steuerungsbefehl , oder als Anweisung im Programm selbst usw.

    Dies ist ja auch ein Punkt, der dabei eine Rolle spielt, denke ich mal. Gehe ich richtig in der Annahme, wenn ich sage, daß man auf jedenfall die Befehlssätze der jeweiligen CPU kennen muß, auf der die Software letztendlich laufen soll?.

    Ich weiß, dies ist eine ziemlich abstrakte Frage, aber ebenso eine äußerst interessante.

    mfg ghostrider
     
  2. ghost rider

    ghost rider Megabyte

    Registriert seit:
    23. März 2002
    Beiträge:
    2.319
    Hallo SourceLE,

    big thx. Das mit dem Programmieren, kannste mir ja ggfs. immer noch nachschicken bei Bedarf.

    mfg ghostrider
     
  3. SourceLE

    SourceLE Kbyte

    Registriert seit:
    4. November 2002
    Beiträge:
    488
    rumschlagen\'.

    MfG & CU
     
  4. ghost rider

    ghost rider Megabyte

    Registriert seit:
    23. März 2002
    Beiträge:
    2.319
    Hallo SourceLE,

    das wär ja prima... , würde sicherlich mein Verständnis für das ganze wesentlich erhöhen.... ;).

    Mail mir doch mal bitte, wie wir das machen. Danke.

    mfg ghostrider
     
  5. SourceLE

    SourceLE Kbyte

    Registriert seit:
    4. November 2002
    Beiträge:
    488
    Hi...

    also wenn es Dich wirklich so brennend interresiert, kann ich Dir gerne einiges von meinem Studienmaterial zur Verfügung stellen.

    IST ABER NUR FÜR PRIVATE ZWECKE!!!!!

    Vorkenntnisse benötigst Du dafür eigentl. nicht. Naja ein bisschen Technik und Arithmetik ist es schon.

    MfG & CU
     
  6. ghost rider

    ghost rider Megabyte

    Registriert seit:
    23. März 2002
    Beiträge:
    2.319
    Hi Lightning,

    genau darum geht es mir, daß man praktisch von "Null auf" anfängt, also nur den Rechner ohne OS hat, und dafür die Software schreibt.

    Allerdings denke ich mal, daß es doch zu schaffen ist, sonst hätten wir ja heute nicht unzähliges an Software.

    mfg ghostrider
     
  7. SourceLE

    SourceLE Kbyte

    Registriert seit:
    4. November 2002
    Beiträge:
    488
    Hi...

    aber wenn ein OS zur Verfügung steht, braucht man sich doch nicht mit Binärcode rumschlagen. Sehe ich das falsch? Oder meinst Du das nicht mal ein Betriebssytem anwesend ist? Na dann Ja!

    MfG & CU
     
  8. Lightning2SE

    Lightning2SE Byte

    Registriert seit:
    11. November 2002
    Beiträge:
    10
    Hallo!
    Interessante Frage! Also die einfachste Möglichkeit eine Neue Sprache zu entwickeln ist , in einer Schon vorhandenen Sprache
    eine neue zu schreiben. ( Compiler = Scanner,Parser und Codeerzeuger). Wenn du sie quasi "aus dem nichts" schreiben willst,
    dann ist das im Prinzip für einen Menschen allein unschaffbar, weil du
    die Umgebung in Binärcode schreiben müßtest, und dazu reicht ein Menschenleben garnicht aus.
    MFG
    Lightning
     
  9. ghost rider

    ghost rider Megabyte

    Registriert seit:
    23. März 2002
    Beiträge:
    2.319
    Hallo Oliver,

    danke für die zusätzliche Information.

    mfg ghostrider
     
  10. olig9

    olig9 Byte

    Registriert seit:
    12. Mai 2001
    Beiträge:
    56
    So, jetzt will ich hier auch mal mein Wissen loswerden...

    Zu der Sache mit Goto: Der Begriff ist ein Schlüsselwort für den Compiler, d.h. er hat eine Liste mit Worten, die eine spezielle Bedeutung haben. Wie diese Liste im einzelnen aussieht, hängt (wohl) vom Compiler ab.
    Ich verweise dabei aber mal auf ein Posting von weiter oben, das etwas zu Metasprachen sagte. Optimalerweise ist nämlich die Struktur und alles, was zu einer Programmiersprache gehört, in einer Metasprache beschrieben. Und aufgrund dieser Beschreibung kann der Compiler dann deinen Befehl durch eine Kombination aus vergleichen, addieren und vertauschen beschreiben.

    Übrigens ist hier die ganze Zeit die Rede vom Compiler; ich glaube allerdings, daß es einfacher sein dürfte, eine Sprcahe für einen Interpreter zu entwickeln (z.B. Basic)

    Oliver
     
  11. SourceLE

    SourceLE Kbyte

    Registriert seit:
    4. November 2002
    Beiträge:
    488
    Hi...
    Vorwort: Mein ehemal. Seminarlehrer möge mir verzeihen. ;-)

    Nun zum Thema:
    Eine CPU besteht aus mehreren Elementen:
    1. Die ALU (Arithmetic and Logic Unit; kurz Rechenwerk)
    hierzu später mehr.
    2. Die Register (inkl. Akkumulator)
    Der Akkumulator ist das wohl meistbenutzte Register. Fällt eine arithmetische Operationan, enthält dieser das von der ALU berechnete Ergebnis.
    3. Befehlsregister
    Enthält den aktuellen Maschinenbefehl.
    4. Befehlszähler
    Enthält die Adresse des nächsten Maschinenbefehls.
    5. Flag-Register
    Enthält das Statuswort. Information der zuletzt von der ALU ausgeführten Operation
    6. Adress- und Datenbus.
    Hier werden nicht nur Daten ausgetauscht, sondern auch getaktet (Taktgeber des Prozessors).

    Geben wir also zuerst was sinnvolles ein: b=b+a und codieren zunächst bis Assembler:

    mov ax, adr_b
    mov ax, adr_a
    add ax, bx
    mov adr_b, ax

    das ist nichts weiter, wie der Maschinencode für: add r01, r02. Jetzt fehlt nur noch der Binärcode für Diesen, also der nächste Codierungsschritt:

    add = 00111000 (addieren)
    r01 = 11000001 (Register 1)
    r02 = 11000010 (Register 2)

    Also: 00111000 11000001 11000010

    Wie diese Binärzahl entsteht ist ein Extrathema! Fest steht aber, hier gibt es Umwandlungs- und Rechenregeln. Diese Zahl entsteht also nicht zufällig.

    Nehmen wir mal an das 00111000... wirklich als auszuführender Befehl existiert.

    Nun zur ALU: Damit nun diese Operation ausgeführt werden kann

    -wird die ALU durch den Befehlsregister (oder direkt vom Datenbus) über den auszuführende Befehl informiert. (Der gesamte Maschinenbefehl ist im Befehlsregister gespeichert).
    -werden die Operanten aus den Registern (diese Daten kommen vom Datenbus) dazugenommen.
    -wird das Ergebnis zum Datenbus und im Falle einer Adresse zum Adressbus gegeben.

    Dazwischen liegen aber noch der FLAG-Register und der Befehlszähler. Ebenfalls wichtig ist der Arbeitsspeicher (RAM).

    Jetzt zum schon genannten Gitter (Matrix).
    Alle Transistoren/Dioden sind in Spalten und Zeilen eingeteilt. Und an den Datenleitungen/ Adressleitungen kann jeweils pro Leitung ein Signalzustand anliegen also 0 oder 1. Das Ergibnis ist, dass so und soviel Transistoren/Dioden aktiv sind und andere eben nicht.

    Kurz: das Ergebnis von 00111000 11000001 11000010 hat also die entsprechenden Signalzustände.

    Wahrscheinlich bin ich jetzt nachträglich durch die Prüfung gefallen; aber einfacher ging es wirklich nicht.

    MfG & CU
    [Diese Nachricht wurde von SourceLE am 11.12.2002 | 21:15 geändert.]
     
  12. SourceLE

    SourceLE Kbyte

    Registriert seit:
    4. November 2002
    Beiträge:
    488
    Hi...

    ja genau; war aber die absolute Kurzform. Aber ich glaube da gibts noch einen 3. Zustand. Also UND, ODER und NICHT (Inverter). Ich arbeite grade an der etwas längeren Version (mich packt der Ehrgeiz, eigentl. hab ich aber schon die Hälfte vergessen). Ist aber auf jedenfall interessant. ASM ist genau das Stichwort; hier muss man das nämlich drauf haben.

    MfG & CU
     
  13. AS_X

    AS_X Halbes Megabyte

    Registriert seit:
    17. Oktober 2002
    Beiträge:
    585
    also das mit der cpu funzt ja wie oben erwähnt:
    mit schaltern, genauer mit transistoren, die zu einer art gitter zusammengeschaltet sind.
    wie genau weiß ich grad nicht, aber je nach spannung, die am transistor liegt speichert die cpu eine 0 oder eine 1.
    dann ist der prozessor in register aufgeteilt, die das speichern übernehmen. hab mich mal kurz mit assembler beschäftigt, da kriegt man das alles mit!
     
  14. SourceLE

    SourceLE Kbyte

    Registriert seit:
    4. November 2002
    Beiträge:
    488
    Hi...

    Schnellübersicht:

    eigentl. gings am Anfang darum; wie man eine neue Sprache entwickelt. Gelandet sind wir nun aber da, wiso der Computer unsere Befehle und Programme überhaupt versteht, obwohl er gar nicht unsere Sprache beherrscht.

    Willkommen im Club :-)

    MfG & CU
     
  15. kadajawi

    kadajawi Megabyte

    Registriert seit:
    23. Dezember 2000
    Beiträge:
    1.792
    also ein eigenes OS ist nix besonderes ;) Aber OS|=Programmiersprache. Ein Freund von mir ist gerade an seinem eigenem OS dran, allerdings scheint da die Problematik zu sein an die ganzen Hardwarespezifikationen zu kommen um überhaupt die nötigen Treiber programmieren zu können
     
  16. kadajawi

    kadajawi Megabyte

    Registriert seit:
    23. Dezember 2000
    Beiträge:
    1.792
    Ganz kurz Off-Topic:
    "Ein Beispiel: für das Hören einer MP3-datei unter Windows braucht man mindestens eine 75 MHz CPU, in den kleinen HiFi-MP3-Player ist noch nicht mal ein Viertel dieser Leistung, wenn nicht sogar nur kHz."
    Öhm... also afaik hat der Prozessor in meinem MP3 CD-Player 70 oder 100 MHz (weiss jetzt nicht genau welche Ausführung verbaut wurde). Allerdings, in der Tat ist er stark runtergetaktet um Strom zu sparen (ich glaub um die 10-20 MHz).
     
  17. AS_X

    AS_X Halbes Megabyte

    Registriert seit:
    17. Oktober 2002
    Beiträge:
    585
    ich bin an eurer runde interessiert, konnte aber nicht ganz durchblicken, was ihr grade macht?
    vielleicht kann ich ja helfen?

    programmierst du selbst nicht?
    [Diese Nachricht wurde von AS_X am 10.12.2002 | 18:16 geändert.]
     
  18. SourceLE

    SourceLE Kbyte

    Registriert seit:
    4. November 2002
    Beiträge:
    488
    Satteln das Pferd falsch auf\'. Um dass Alles zu kapieren muss man wirklich mit der Recheneinheit beginnen > der CPU. Erst wenn man in etwa weiss wie die funzt, ergeben sich später die AHA-Effekte von alleine.

    Mal sehen ob ich das möglichst kurz hinbekomme...
     
  19. ghost rider

    ghost rider Megabyte

    Registriert seit:
    23. März 2002
    Beiträge:
    2.319
    Hallo SourcLE,

    danke für Deine Bemühungen und Geduld, wirklich prima.

    Langsam nähern wir uns ja dem Kern meiner Frage: Wie es sichergestellt ist, daß eine bestimmte Binärfolge genau die vorher (evtl. willkürlich) festgelegte Befehlsdefinition ausführt und nicht eine völlig andere Befehlsdefinition, die über einen anderen Binörcode bewirkt werden sollte.

    Noch kurz was zu "meiner obigen Hardwareadressierung":

    Wenn ich jetzt sage: die Anschlüsse A1-A6 sind irgendein Controller Ein-/Ausgang , hätte dieser dann eben die Hardwareadresse von den Anschlußkürzlen in Hex-Schreibweise ?

    mfg ghostrider
     
  20. SourceLE

    SourceLE Kbyte

    Registriert seit:
    4. November 2002
    Beiträge:
    488
    Hi...

    also ich fange mal mit der Frage an

    ...wie es geschieht, daß dann eben eine bestimmter Befehl einer Hochsprache, einer Binärcodefolge fest zugeordnet wird, wie z.b. einer Variablen ein bestimmter Wert in einem Programm übergeben wird.

    Also zu erst mal übersetzt der Compiler keine einzelne Anweisung; sondern immer den gesammten Quelltext. Wie du sicher (schon weiter) oben gelesen hast, wird das dann alles in Maschinencode umgewandelt. Aber eins nach dem anderen.

    Als erstes kommt der Präprozerssor; welcher einige Ersetzungen im Quelltext durchführt. Jetzt tritt der Compiler in Kraft. Der Compiler selber lässt sich in verschiedene Unterprogramme einteilen:

    - der Parser (analysiert und zerlegt den Quelltext)
    - den Code-Generator (erzeugt (ASM-Code)
    - der Optimierer (Grösse und Geschwindigkeit)
    - der Assembler (erzeugt den echten Maschinencode)

    Zuletzt kommt der Linker. Dieser bindet mehrere Objektdateien zu einem Programm zusammen.

    Wie das nun mit den "finden von Variablen" ist und wie Binärcode zugeordnet wird. Dazu müssen wir die CPU "zerflücken" und ein kleiner Lehrgang zum Thema Zahlensysteme ist auch nicht unumgänglich. Womit sich auch gleich ein paar weitere Fragen von Dir beantworten lassen.

    Ich geb mir mal Mühe.

    MfG & CU

    PS: Im gewissen Sinne ist die Schlussfolgerung richtig.
    [Diese Nachricht wurde von SourceLE am 10.12.2002 | 13:40 geändert.]
     
Status des Themas:
Es sind keine weiteren Antworten möglich.

Diese Seite empfehlen