Freitag, November 22, 2024

Creating liberating content

Kein Internet wegen negativer...

Gerade in einer Industrienation wie Deutschland ist es kaum vorstellbar, dass es Menschen...

Internationaler Güterverkehr: Welche sind...

Der internationale Verkehr ermöglicht die Beförderung von Waren unterschiedlicher Größe und Art zwischen...
Html code here! Replace this with any non empty raw html code and that's it.
StartWirtschaftViertens - die...

Viertens – die immer junge Programmiersprache

Für dieses Programmiersprache „Verkettet“. Dies bedeutet, dass es nur minimale Syntaxregeln gibt und Befehle oder Funktionen (im vierten Sprachgebrauch „Wörter“) nacheinander geschrieben werden, getrennt durch Leerzeichen. Alle über Syntax in gängigen Programmiersprachen implementierten Komponenten (Kommentare, Variablendefinitionen, Kontrollstrukturen wie Schleifen oder Entscheidungen mit IF-THEN-ELSE) sind unter Forth ganz normale „Wörter“.

Umgekehrt bedeutet dies, dass Programmierer ihren Forth selbst „modifizieren“ können, wie sie es wünschen. Forth ist wie ein Kit für Ihre eigenen Programmiersprachen, mit dem Programmierer die gewünschte Anwendung so elegant wie möglich implementieren können.

Der Forth-Quellcode ist gewöhnungsbedürftig. Die Struktur wird nicht von der Sprache bestimmt; Es liegt an den Programmierern, den Quellcode lesbar zu formatieren. Da der Platz für Quellcode auf Speichermedien in den frühen Jahren von Forth ebenfalls stark eingeschränkt war, hatte Forth leider den Ruf einer Programmiersprache erlangt, die nur geschrieben werden kann. Es erfordert etwas Disziplin, um gut lesbare Forth-Programme zu schreiben.

Um sich ein Bild von Forth zu machen, einige der Forth-Quellcodes der „Tetris for Terminals“ (Datei von GNU / Forth) tt.fs.). Der Code implementiert a Pseudozufallszahlengenerator (Pseudozufallszahlengenerator oder PRNG), die im Tetris-Spiel verwendet wird. Bestehende Forth-Wörter wie dup, + und ! in neue Wörter (Funktionen, Unterprogramme) zusammengeführt:

 stupid random number generator

variable seed

: randomize	time&date + + + + + seed ! ;

$10450405 constant generator

: rnd  ( -- n )  seed @ generator um* drop 1+ dup seed ! ;

Die erste Zeile ist ein Kommentar, dem das Wort Forth vorangestellt ist . Es ist Keine aus anderen Programmiersprachen bekannte Syntax, sondern ein Forth-Wort (eine Funktion), das beim Lesen des Quelltextes direkt ausgeführt wird. Diese Funktion liest alle Zeichen im Quelltext bis zum Ende der Zeile und entfernt diese Zeichen. Dies bedeutet, dass der Kommentartext für das Forth-System nicht mehr sichtbar ist und die Kommentarfunktion implementiert wurde. Wenn Programmierer ihre eigenen Ideen haben, welcher Charakter einen Kommentar einfügen soll, fügen sie dem Forth-System einfach ihr eigenes neues Kommentarwort hinzu.

Die Linie variable seed ist leicht zu verstehen. Es wird eine Variable erstellt. Eine Forth-Variable kann einen numerischen Wert speichern, der der nativen Datenbusgröße der CPU entspricht. Also 16, 32, 64 oder im Fall von RISC-V sogar 128 Bit. Hier ist das vierte Wort variable Keine spezielle Syntax, nur eine in Forth geschriebene Funktion, die Speicher reserviert und ihn dem angegebenen Namen zuordnet. Der Name der Variablen hier seedist dann ein neues Forth-Wort, das bei Ausführung die Adresse der Variablen auf den Datenstapel legt (dazu später mehr). In den meisten Forth-Systemen ist diese Variable die einzige Datenstruktur, die das System bereitstellt. Forth-Programmierer erstellen Arrays, Strukturen, Objekte und andere Datenstrukturen mit ihren eigenen Forth-Wörtern. Das Erstellen eigener Datenstrukturen in Forth ist nicht schwierig, und selbst mit gängigen Programmiersprachen müssen Sie häufig selbst komplexere Datenstrukturen erstellen. Warum also nicht bei Null anfangen?

Das vierte Wort : (Doppelpunkt) aktiviert den Forth-Compiler. Alle nachfolgenden Wörter bis zum letzten vierten Wort ; (semis) werden nicht direkt ausgeführt, sondern zu einem neuen Forth-Wort kompiliert. Der Name (oder Bezeichner) des neuen Wortes folgt sofort :.

Dieses neue Forth-Wort hat die Aufgabe, den Zufallszahlengenerator für das Tetris-Spiel zu initialisieren (der hier gezeigte Zufallszahlengenerator ist sehr einfach, für Spiele ausreichend, sollte jedoch nicht für sicherheitskritische Anwendungen verwendet werden).

Das vierte Wort time&date speichert sechs Werte (Sekunde, Minute, Stunde, Tag, Monat, Jahr) auf dem Forth-Systemstapel. In einem Forth-System werden alle Eingabe- und Ausgabeparameter für Funktionen implizit durch einen Datenstapel übergeben. „Implizit“ bedeutet hier, dass die Anzahl der Parameter beim Definieren des Forth-Wortes und auch beim Aufrufen nicht angegeben wird. Der Stack ist eine integrierte LIFO-Datenstruktur (Last-In – First-Out) jedes Forth-Systems. Es erfordert einige Übung, um die Bewegung der Parameter auf dem Datenstapel zu verfolgen. Anfänger können sich mit detaillierten Kommentaren bedienen. Die Anzahl der Parameter ist im Quelltext nicht sichtbar.

: randomize
  time&date
  + + + + +
  seed !
;

Der nächste Zusatz zieht + sind vierte Wörter, deren Funktion darin besteht, die beiden obersten Elemente auf dem Stapel zusammenzuführen und das Ergebnis an den Stapel zurückzugeben. Forth verwendet die Postfix-Notation für mathematische Funktionen. Die Werte werden zuerst auf den Stapel gelegt und dann wird die mathematische Funktion aufgerufen, die die Werte aus dem Stapel „verbraucht“ und die Ergebnisse wieder auf dem Stapel belässt.

Ein Startwert (Startwert) für den Zufallszahlengenerator wird basierend auf dem aktuellen Datum und der aktuellen Uhrzeit bestimmt. Das Wort über Variablen seed legt seine eigene Speicheradresse auf den Stapel und das nächste Wort !, ausgesprochen „Speichern“, speichert den berechneten Wert im Speicherort der Variablen seed. Es sollte angemerkt werden, dass ! kann nicht nur in Variablen schreiben, sondern auch in einen beliebigen Speicherbereich mit den richtigen Eingabewerten auf dem Stapel schreiben.

Die nächste Zeile ist wieder leichter zu verstehen:

$10450405 constant generator

Es wird ein neues Forth-Wort mit dem Namen erstellt generator. Es ist eine numerische Konstante mit dem Hexadezimalwert 10450405. Wenn dieses neue Forth-Wort im weiteren Programm verwendet wird, wird dieser Wert auf den Stapel gelegt.

Die letzte Zeile des kleinen Beispiels generiert jetzt ein Forth-Wort, das bei Ausführung eine neue Zufallszahl generiert und auf dem Stapel belässt:

: rnd  ( -- n )             erzeuge Zufallszahl
  seed @                    lade aktuelle Saat des PRNG
  generator um* drop 1+     errechne Zufallszahl
  dup                       Zahl verdoppeln
  seed !                    und eine Kopie als neue Saat speichern
;

Doppelpunkt (:) Schalten Sie den Compiler wieder ein und rnd ist der Name des hier definierten neuen Forth-Wortes. Die Klammern ( und ) eine andere Form des Kommentars darstellen (wo ( ist ein viertes Wort, das alle Zeichen im Quelltext bis zum Zeichen enthält ) verbraucht, weggeworfen und damit dem Forth-System vorenthalten). Dies ist ein Stapelkommentar, der als Dokumentation für Programmierer dient und beschreibt, welche Eingabe- und Ausgabeparameter diese Funktion erwartet oder generiert. In diesem Fall wird es eine natürliche (Zufalls-) Zahl n nach dem anruf rnd links vom Stapel.

Von seed Der Körper beginnt seine neue Funktion. seed als Variable von oben legt sie ihre eigene Speicheradresse auf den Stapel. Das vierte Wort @ (ausgesprochen „fetch“) ist das Gegenstück zu ! (speichern) und verwendet die Adresse als obersten Eintrag im Stapel und gibt den an der Adresse im Hauptspeicher gespeicherten Wert als Ergebnis an den Stapel zurück.

Das vierte Wort generator (eine numerische Konstante) platziert den Hexadezimalwert 10450405 auf dem Stapel, der das Wort darstellt um* (vorzeichenlose Doppelmultiplikation „um Stern“) mit dem Wert seed multipliziert und als doppelte exakte Zahl auf dem Stapel belassen.

Das Wort drop verwirft den oberen Wert des Stapels, hier den Teil mit dem höheren Wert der doppelt exakten Zahl (die Zufälligkeit findet im unteren Teil der Zahl statt). Dieses Ergebnis, der untere Teil der doppelten exakten Zahl, ist dem Wort zugeordnet 1+ plus eins und dann das Wort dup dupliziert. dup liest das oberste Element auf dem Datenstapel und legt eine Kopie davon ab. Die Kopie des Werts befindet sich jetzt als neuer Startwert in der Variablen seed während der ursprüngliche Wert auf dem Stapel verbleibt und aufgrund der Funktion auf die weitere Verwendung im Programm wartet. Das Wort ; (Semikolon) schließt die Definition des neuen Forth-Wortes rng Deaktiviert den Forth-Compiler und gibt die Steuerung an das interaktive Forth-System zurück.

Zur Homepage gehen

Continue reading

Dax schließt nach einer glänzenden Woche leicht im Minus – weshalb die 16.300 Punkte entscheidend sind

Düsseldorf Nach einer fulminanten Börsenwoche hat sich die Lage am deutschen Aktienmarkt vorerst beruhigt. Zum Handelsschluss lag der Leitindex Dax 0,2 Prozent tiefer bei 16.105 Punkten. Auf Wochensicht ergibt sich ein Gewinn von mehr als drei Prozent...

Enjoy exclusive access to all of our content

Get an online subscription and you can unlock any article you come across.