Stand: 16. November 2019
über dieses Dokumentwas es hierin gibt
wo man die neuste Version bekommt
wie man den Verfasser kontaktiert
welche gesetzlichen Einschränkungen es gibtLizenzlosigkeit
Verfasserschutz
Vorbehalt für zusätzliche Einschränkungen für zukünftige Versionen
allgemeine Informationen über Minicodewas es istEinstiegwelche Kompilervarianten es gibt
Geschwindigkeit
Syntax
welche Nach- und Vorteile Minicode bietet
Minicode-DateienDateinamens-EndungenDatentransfer
ZeichenkodierungAllgemeinesAdresse kopierenTransferart in Abhängigkeit von der Situation
Wert kopierenSituationen, in welchen ein neuer Wert erzeugt wird, welcher bisher noch nicht existiert hat
Situationen, in welchen ein neuer Wert erzeugt wird, indem er aus einer Quelle kopiert wird
Situationen, in welchen die Adresse kopiert wird, so dass die Werte abhängig voneinander bleiben
Situationen, in welchen eine neue, unabhängige Liste erzeugt wird, in welcher allerdings die Werte abhängig von den Werten aus der Quell-Liste bleiben
die Details von MinicodeZeichenkodierungen
weiteres Material zu diesem ThemaDokumente
was es hierin gibt
Dieses Dokument
- enthält allgemeine Informationen über die Programmiersprache "Minicode".
wo man die neuste Version bekommt
Derzeit nutze ich OnTheServer.de/Downloads/ um neue Versionen zugänglich zu machen. Sie müsste irgendwo dort in den Unterverzeichnissen sein; das kann sich hin und wieder ein bischen ändern.
Dort gibt es vielleicht auch dieses Dokument in anderen Sprachen.
Es gibt außerdem Minicode.OnTheServer.de als offizielle Webseite von Minicode.
Anmerkung:
- Zu dem Zeitpunkt, als das obrige geschrieben wurde, hat die Subdomain noch nicht existiert. Es war lediglich in Planung diese anzulegen. Ich hoffe, dass ich das gemacht habe, bevor der Erste dieses Dokument in die Hände bekommt.
Die Versions-Angabe von diesem Dokument steht oben rechts ("Stand: ...").
wie man den Verfasser kontaktiert
Der Verfasser von diesem Dokument kann mit der Hilfe von einer elektronischen Nachricht kontaktiert werden. Das hierfür eingerichtete Postfach ist mit der Hilfe von der folgenden Adresse erreichbar:Kontakt@On(entferne mich)TheServer.de
welche gesetzlichen Einschränkungen es gibt
Lizenzlosigkeit
Dieses Dokument
- ist an keine Lizenz gebunden.
- unterliegt nicht den Einschränkungen durch das Urhebergesetz.
- soll allgemeinfrei (public domain) behandelt werden. Also so, als wenn es sich um ein Eigentum von der Allgemeinheit handelt.
Im Übrigen soll alles, was man auf OnTheServer.de und den Subdomains öffentlich zugänglich findet, entsprechend behandelt werden.
Es gibt auf OnTheServer.de allerdings eine Ausnahme:Ich lege gelegentlich im Verzeichnis "OnTheServer.de/temp/" urheberrechtlich geschütztes Material ab.
Es ist nicht gestattet, auf irreführendeweise vorzutäuschen, dass das (ursprüngliche) Dokument an eine Lizenz gebunden wäre.
Verfasserschutz
Es ist nicht gestattet, auf irreführendeweise vorzutäuschen, dass man der (ursprüngliche) Verfasser vom Dokument wäre. Der (ursprüngliche) Verfasser muss jedoch nicht namentlich genannt werden.
Vorbehalt für zusätzliche Einschränkungen für zukünftige Versionen
Ich (der ursprüngliche Verfasser) behalte die Möglichkeit, Einschränkungen füraufzuerlegen. Von den Einschränkungen wären lediglich neue Versionen betroffen. Was bisher veröffentlicht wurde, erhält keine weiteren Einschränkungen.
- die Veränderung oder/und
- die Verbreitung
Von diesem Recht werde ich hoffentlich nie gebrauch machen müssen.
was es ist
Minicode ist eine sehr objektorientierte Programmiersprache. Sie wurde als Hochsprache primär für jene Programmierer entwickelt, welche maschinennah Programmieren können und daher die Möglichkeiten, welche sich aus der Flexibilität von einer maschinennahen Programmierung ergeben, durch die Verwendung von einer Hochsprache nicht verlieren möchten.
Einstieg
Es wurde versucht, den Einstieg in Minicode besonders einfach zu gestalten. Dazu
- sind Sonderzeichen (zum Beispiel: Umlaute) im Quellcode, zum Beispiel in
ohne jeglichen Sonderaufwand für den Programmierer möglich.
- Funktionsnamen und
- Zeichenketten,
- wurden Spezialdefinitionen, welche sich einigermaßen klar vom Quellcode unterscheiden, wie zum Beispiel
in separate Dateien ausgelagert. Wegen der Auslagerung haben Anfänger die Möglichkeit,
- die Konfiguration vom Kompiler und
- die maschinennahe Beschreibung von einer Bibliothek, von welcher etwas importiert werden soll,
- sich leichter auf die Informationen zu konzentrieren, welche für das Vorhaben notwendig sind, und
- die irrelevanten Dateitypen zu ignorieren.
Diese Idee wurde auch in der Dokumentation von der Sprache umgesetzt, indem die gesamte Dokumentation in mehrere separate Dokumente mit entsprechenden Einzelthemen unterteilt ist.- steht ein Webseiten-basierter Kompiler zur Verfügung, so dass die Programmiersprache ausprobiert werden kann, ohne dass ein Kompiler auf dem lokalen Rechner notwendig ist.
Geschwindigkeit
Die Geschwindigkeit sollte nennenswert höher sein, als jene von der Skriptsprache "Python". Es wird allerdings hingenommen, dass durch eine maschinennahe Programmierung, wie zum Beispiel mit der Hilfe voneine höhere Ausführungsgeschwindigkeit erreicht wird, als durch Minicode.
- Assembler oder
- der Maschinensprache,
Wie bei jeder Sprache ergibt sich die Geschwindigkeit aus mehreren Einflüssen:
- Die Notwendigkeit Skriptcode während der Laufzeit zu Interpretieren erfordert Verarbeitungsdauer. Minicode ist jedoch keine Skriptsprache, daher findet die Kompilierung
der Ausführung statt.
- unabhängig und
- vor
- Die Fähigkeiten vom Kompiler entscheiden darüber, wie gut der vorgegebene Quellcode in Maschinencode übersetzt wird. Bestehende Programmiersprachen haben aufgrund von ihrer längeren Existenz oft einen ausgereifteren Kompiler als der offizielle Kompiler von Minicode ist.
- Die Fähigkeiten vom Programmierer entscheiden darüber, wie gut
- der Ansatz ist und
- die Vorgaben für den Kompiler sind.
Auf OnTheServer.de stehen zahlreiche Dokumente zur Verfügung, mit dessen Hilfe Programmierer ihre Fähigkeiten verbesseren können. Speziell jene Dokumente über die maschinennahe Programmierung ermöglichen die Auslagerung von geschwindigkeitsrelevanten Prozeduren, so dass Minicode primär für die nicht-geschwindigkeitsrelevanten Teile eingesetzt werden kann, bei welchen die Verwendung von einer Hochsprach sinnvoll ist.
Syntax
Es wurde versucht, unnötigen Balast fernzuhalten. Um dies zu erreichen wurde versucht,
- eine angemessene Abstraktion von der Maschinennähe zu bieten und
- einen Kompromiss zwischen
zu finden.
- geringer Codegröße und
- guter Lesbarkeit
Um diese Ziele zu erreichen, wurde beispielsweise durch
- die Verwendung von
die Anzahl der Parameter, bei welchen der Programmierer die Reihenfolge kennen sollte, geringer gehalten. Beispielsweise kann der folgende Methoden-basierte Code verwendet werden, um einen Eintrag aus einer Liste zu löschen:
- Methoden anstatt
- Funktionen
meine_Liste.löschen("ein Schlüssel")Eine Funktions-basierte Lösung sähe beispielsweise wie folgt aus:löschen(meine_Liste, "ein Schlüssel")
Hierdurch erübrigt sich in vielen Fällen die Frage, in welcher Reihenfolge die Parameter übergeben werden müssen, da es desöfteren nur noch 1 Möglichkeit gibt.- mehrsprachige
die Möglichkeit bereitgestellt, Sprachschwierigkeiten zu reduzieren. Es sind also beispielsweise mehrere Bezeichnungen für eine bestimmte Funktion zulässig:
- Funktionsnamen,
- Klassennamen und
- Schlüsselwörter
meine_Liste.delete()
meine_Liste.löschen()
welche Kompilervarianten es gibt
Minicode-Quellcode wird von einem Minicode-Kompiler in Maschinencode übersetzt. Maschinencode kann von der Hardware ausgeführt werden.
╔══════════╗ ╔═════════════╗
║Festplatte║ ║Programmierer║
╚════╤═════╝ ╚╤═══════════╤╝
│ ┌────────────┘ └───────────┐
▼ ▼ ▼
┌───────────────┴────────────────┐ ┌──────────────────┴──────────────────┐ ┌───────────────┴────────────────┐
│Minicode Import-Definitionsdatei│ │Minicode Kompiler-Konfigurationsdatei│ │ Minicode Quellcode-Datei │
├────────────────────────────────┤ ├─────────────────────────────────────┤ ├────────────────────────────────┤
│< │ │< │ │# "Hallo Welt!" ausgeben │
│ ... │ │ ... │ │Konsole.schreiben("Hallo Welt!")│
│> │ │> │ └───────────────┬────────────────┘
└───────────────┬────────────────┘ └──────────────────┬──────────────────┘ │
└─────────────────────────────┐ │ ┌────────────────────────────┘
▼ ▼ ▼
╔╧═══════╧═══════╧╗
║Minicode-Kompiler║
╠═════════════════╣
║(enthält ein ║
║Link-Programm) ║
╚════════╤════════╝
▼
┌────────────────┴────────────────┐
│ausführbare Datei oder Bibliothek│
├─────────────────────────────────┤
│Daten: │
│ Hallo Welt! │
│ │
│Maschinencode: │
│ 01010100110... │
└────────────────┬────────────────┘
▼
╔═══╧════╗
║Hardware║
╚════════╝
Der Kompiler steht als Kommandozeilen-Programm und als Webseiten-basierte Version zur Verfügung:
- Das Kommandozeilen-Programm besteht im Wesentlichen aus einer direkt ausführbaren Datei, welche also nicht erst installiert werden muss.
- Die Webseiten-basierte Version ist auf der Projekt-Webseite kostenlos zugänglich, so dass ein Ausprobieren von der Sprache und ein Kompilieren ohne Kompiler auf der eigenen Festplatte möglich ist.
Anmerkungen:
- Zu dem Zeitpunkt, als das Obrige geschrieben wurde, haben die beiden Kompilervarianten noch nicht existiert. Es war lediglich in Planung diese Varianten in dieser Form zu erzeugen und bereitzustellen. Ich hoffe, dass das gemacht ist, bevor der Erste dieses Dokument liest.
welche Nach- und Vorteile Minicode bietet
Nachteile: Vorteile:
- Minicode ist kaum verbreitet. Das heißt:
- Es ist weniger Dokumentation verfügbar.
- Es gibt kaum Ansprechpartner, wenn man Hilfe benötigt.
- Es gibt kaum Alternativen, wenn einem der offizielle Kompiler nicht gefällt.
- Minicode ist noch in der frühen Entstehungsphase. Das heißt:
- Der offizielle Kompiler ist nicht richtig ausgereift.
- Einige Dinge, welche völlig üblich in anderen Programmiersprachen sind, wurden in Minicode noch nicht implementiert.
- Es können in der Zukunft noch so einige Änderungen an der Sprache geschehen und somit kann Inkompatibilität zwischen neueren Kompiler-Versionen und dem bereits geschriebenen Minicode-Quellcode entstehen.
- Minicode bietet eine Abstraktion von der Maschinennähe. Verglichen mit maschinennaher Programmierung heißt das,
- dass die Ausführungsgeschwindigkeit geringer ist und
- dass die Programmgröße höher ist.
- Minicode sollte leicht zu benutzen sein, denn
- der Kompiler muss nicht installiert werden und
- es ist keine Installation von anderer Software (außer einem Betriebssystem) notwendig.
- Der offizielle Kompiler steht auch als Webseiten-basierte Version auf der Projekt-Webseite zur Verfügung, was ein Ausprobieren von der Sprache, ohne Kompiler auf der eigenen Festplatte, ermöglicht.
- Mit dem Syntax wurde versucht, eine Mischung aus geringer Codegröße und guter Lesbarkeit zu realisieren. Die Maschinennähe, wie es sie in Assembler gibt, wurde gesenkt, um damit unter anderem
- komplexere Projekte zu ermöglichen und
- den Programmier- und Wartungsaufwand zu senken.
- Minicode ist allgemeinfrei. Also von mir werden keine Lizenzeinschränkungen auferlegt.
- von mir werden keine Kosten für
- den offiziellen Kompiler noch
- die offiziellen Spezifikationen auferlegt.
- Die Geschwindigkeit sollte weit höher sein, als die von Skriptsprachen, welche ebenfalls einen balastlosen Syntax zu realisieren versuchen (zum Beispiel: "Python").
- Die Software kann so entwickelt werden, dass sie auf allen von Minicode unterstützten Betriebssystemen läuft.
Minicode-Dateien
Um etwas in Minicode zu programmieren, benötigt man Dateien von mehreren verschiedene Typen. Es werden, abhängig vom Projekt, allerdings nicht zwangsweise alle Dateien benötigt:
- Zum Einen Dateien, welche den Quellcode enthalten.
Der gesamte Quellcode von einer Anwendung kann auf mehrere Quellcode-Dateien aufgesplittet werden, wenn sich beispielsweise der Programmierer auf diese Weise Ordnung schaffen möchte.
Ich nennen diese Dateien "Minicode Quellcode-Dateien" (im Englischen: "Minicode source code files").- Zum Anderen 1 Datei, welche die Anweisungen für den Kompiler enthält.
In dieser Datei sind beispielsweise Pfadangaben zuwelche bei der Kompilierung verwendet werden sollen.
- den Import-Definitionsdateien und
- den Quellcode-Dateien,
Ich nenne eine solche Konfigurationsdatei "Minicode Kompiler-Konfigurationsdatei" (im Englischen: "Minicode compiler configuration file").- Desweiteren Dateien, von welchen jede Datei jeweils 1 Bibliothek beschreibt, aus welcher etwas importiert werden soll.
Bei einer Anwendung, welche nichts importiert, ist keine solche Datei notwendig. Es können allerdings durchaus für 1 Anwendung mehrere solche Dateien notwendig sein.
Ich nenne diese Dateien "Minicode Import-Definitionsdateien" (im Englischen: "Minicode import definition files").- Desweiteren - sofern keine Anwendung, sondern eine Bibliothek programmiert wird - ist 1 Datei notwendig, welche die maschinennahen Definitionen für die zu exportierenden Dinge enthält.
Bei einer Anwendung ist keine solche Datei notwendig, da es in Minicode nicht zulässig ist, dass eine Anwendung etwas exportiert. Diese Entscheidung wurde getroffen, da nicht alle Betriebssysteme,bei einer Anwendung einen Export zulassen. Somit kann Minicode weitgehend Betriebssystem-unabhängig bleiben.
- welche unterstützt werden oder
- welche zu unterstützen geplant sind,
Ich nenne eine solche Datei "Minicode Export-Definitionsdatei" (im Englischen: "Minicode export definition file").
In dieser Dokumentation sind im Wesentlichen allgemeine Informationen über Minicode enthalten. Für detailiertere Informationen bezüglich den einzelnen Dateien gibt es separate Dokumentationen, welche im Kapitel "weiteres Material zu diesem Thema - Dokumente" aufgelistet sind.
Dateinamens-Endungen
Ich schlage vor, für Minicode-Dateien die folgenden Dateinamens-Endungen zu verwenden:
Datei-Typ: Dateinamens-Endung: Export-Definitionsdateien "mico-exde" (also zum Beispiel "meine_Bibliothek.mico-exde")
("Minicode - export definition file")Import-Definitionsdateien "mico-imde" (also zum Beispiel "kernel32.mico-imde")
("Minicode - import definition file")Kompiler-Konfigurationsdateien "mico-coco" (also zum Beispiel "Kompiler-Konfiguration für Windows.mico-coco")
("Minicode - compiler configuration file")Quellcode-Dateien "mico-soco" (also zum Beispiel "mein_Code.mico-soco")
("Minicode - source code file")
Ursprünglich waren für die Dateinamens-Endungen Abkürzungen aus 3 Buchstaben vorgesehen:Da es bei dieser Abkürzung bereits eine Kollision mit Dateien von einem anderen Projekt gab, wurde die ungewohnt lange Dateinamens-Endung beschlossen.
- Zum Beispiel "mcs" für "Minicode source code file"
Zeichenkodierung
Ich schlage vor, für alle Minicode-Dateien die Zeichenkodierung "Unicode Transformation Format - 8 bit per part" ("UTF-8") zu verwenden.
Datentransfer
Allgemeines
Für jede Variable, welche in Minicode verwendet wird, wird eine Adresse gespeichert, welche auf eine Speicherstelle im Arbeitsspeicher zeigt.
Wenndann
- Daten kopiert werden,
- kann dies geschehen, indem
Adresse kopieren
Wenndann
- die Adresse von einer Variable in einer andere Variable kopiert wird,
- erzeugt Minicode keinen neuen Wert, sondern die beiden Variablen haben nun einen gemeinsamen Wert.
- spricht Minicode die Speicherstelle von dem Wert, welcher nun beiden Variablen zugewiesen ist, über 1 gemeinsame Adresse an.
Wenndann
- nun der Wert von der einen Variable geändert wird,
- wird damit auch automatisch der Wert von der anderen Variable geändert.
Wert kopieren
Wenndann
- der Wert von einer Variable in eine andere Variable kopiert wird,
- erzeugt Minicode im Arbeitsspeicher einen neuen Wert, welcher unabhängig von seiner Quelle geändert werden kann.
- spricht Minicode diese neue Speicherstelle im Arbeitsspeicher über eine eigene Adresse an.
Wenndann
- nun der Wert von der einen Variable geändert wird,
- wird deshalb nicht der Wert von der anderen Variable geändert.
Transferart in Abhängigkeit von der Situation
Situationen, in welchen ein neuer Wert erzeugt wird, welcher bisher noch nicht existiert hat
- Der Index von einer Liste wird ausgelesen.
Beispiel:Index = meine_Liste("Baden-Württemberg")[]- Eine Schleife wird ohne zu durchlaufende Variable (zum Beispiel ohne zu durchlaufende Liste) durchlaufen.
Beispiel:durchlaufe 5 ... 10 als momentane_Durchlaufsnummer- Ein Operator wird in einer getrennten Form angewand.
Beispiel:meine_neue_Variable = meine_alte_Variable_1 + meine_alte_Variable_2
Alle 3 Variablen sind nun unabhängig voneinander.- Es wird ein Operator in einer kombinierten Form angewand.
Beispiel:meine_Variable_1 = 5
meine_Variable_2 = 4
# einen neuen Wert erzeugen
meine_Variable_1 =+ meine_Variable_2
meine_Variable_1 hält nun den Wert 9 gespeichert. meine_Variable_2 hält nun immernoch den Wert 4 gespeichert.
Wenndann
- nun meine_Variable_2 geändert wird,
- ändert sich deshalb nicht der Wert von meine_Variable_1.
- Eine Benutzereingabe wird eingelesen.
Beispiel:Eingabe = Konsole.lesen()- Ein Wert wird einer Variable zugewiesen.
Beispiel:meine_Variable = "abc"
Situationen, in welchen ein neuer Wert erzeugt wird, indem er aus einer Quelle kopiert wird
- Es wird die "copy"-Methode verwendet.
Beispiel:meine_neue_Liste = meine_alte_Liste.copy()
In diesem Fall wurde die Liste rekursiv kopiert, so dass beim Hinzufügen von einem Eintrag oder beim Ändern von einem Wert in der Liste nur eine von beiden Listen geändert wird.
Situationen, in welchen die Adresse kopiert wird, so dass die Werte abhängig voneinander bleiben
- Eine Variable wird einer Variable zugewiesen.
Beispiel:meine_Variable_1 = 5
# eine Adresse kopieren
meine_Variable_2 = meine_Variable_1
# einen neuen Wert erzeugen
meine_Variable_1 = 2
meine_Variable_1 und meine_Variable_2 halten nun beide den Wert 2 gespeichert.- Ein Schlüssel oder ein Wert wird aus einer Liste ausgelesen.
Beispiel:mein_Schlüssel = meine_Liste[5]{}- Eine Variable wird einer Funktion als Parameter übergeben.
Beispiel:meine_Funktion(meine_Variable)
Situationen, in welchen eine neue, unabhängige Liste erzeugt wird, in welcher allerdings die Werte abhängig von den Werten aus der Quell-Liste bleiben
Wenndann
- in eine der beiden Listen ein Eintrag
- hinzugefügt oder
- entfernt wird,
- fügt dies keinen Eintrag zur anderen Liste hinzu und
- entfernt keinen Eintrag von der anderen Liste.
Wenndann
- ein Schlüssel oder ein Wert aus einer der beiden Listen geändert wird, welcher beim Erzeugen von der neuen Liste bereits in der alten Liste war,
- wird dadurch ein gemeinsamer Schlüssel oder Wert in beiden Listen geändert.
- Es werden Einträge aus einer Liste ausgelesen.
Beispiel:meine_neue_Liste = meine_alte_Liste[0 ... 7]- Es wird der Verkettungsoperator verwendet.
Beispiel:meine_neue_Liste = meine_alte_Liste_1 & meine_alte_Liste_2
Zeichenkodierungen
Minicode verwendet intern
- für Rohdaten Elementenketten, welche aus "1 Byte"-großen Elementen bestehen und
- für Zeichenketten die Zeichenkodierung "Unicode Character Set - 2 byte per character; little endian encoded" ("UCS-2LE"). Bei dieser Zeichenkodierung handelt es sich um Elementenketten, welche aus "2 Byte"-großen Elementen bestehen.
Weitere Informationen zu dieser Zeichenkodierung sind in einem Dokument enthalten, welches im Kapitel "weiteres Material zu diesem Thema - Dokumente" aufgelistet ist.
Dokumente
Name vom Sprache: Umfang vom Inhalt: Weblink: Autor: Dokument: Minicode - Export-Definitionsdateien deutsch
- beschreibt Export-Definitionsdateien für die Programmiersprache "Minicode"
OnTheServer.de/Downloads/ Minicode - Import-Definitionsdateien
- beschreibt Import-Definitionsdateien für die Programmiersprache "Minicode"
Minicode - Klasse - Ganzzahl
- beschreibt die Klasse "Ganzzahl" für die Programmiersprache "Minicode"
Minicode - Klasse - Kommazahl
- beschreibt die Klasse "Kommazahl" für die Programmiersprache "Minicode"
Minicode - Klasse - Liste
- beschreibt die Klasse "Liste" für die Programmiersprache "Minicode"
Minicode - Klasse - Nichtigkeitsangabe
- beschreibt die Klasse "Nichtigkeitsangabe" für die Programmiersprache "Minicode"
Minicode - Klasse - Rohdatenkette
- beschreibt die Klasse "Rohdatenkette" für die Programmiersprache "Minicode"
Minicode - Klasse - Wahrheitsangabe
- beschreibt die Klasse "Wahrheitsangabe" für die Programmiersprache "Minicode"
Minicode - Klasse - Zeichenkette
- beschreibt die Klasse "Zeichenkette" für die Programmiersprache "Minicode"
Minicode - Kompiler-Konfigurationsdateien
- beschreibt Kompiler-Konfigurationsdateien für die Programmiersprache "Minicode"
- zeigt, welche Konfigurationsmöglichkeiten es für den Kompiler gibt
Minicode - Quellcode-Dateien
- beschreibt Quellcode-Dateien für die Programmiersprache "Minicode"
Zeichenkodierungen
- beschreibt verschiedene Zeichenkodierungen