MSH-Dolmetscher
Ich mache Sie auf
meine Vision einer idealen Sprache aufmerksam. In meinen vorherigen Artikeln habe ich bereits meine Vorstellung von der idealen Sprache
von MUMPS zu MSH dargelegt.
Merkmale und Unterschiede der MSH-Programmiersprache von MUMPS .
Die Bewertungen waren überwiegend negativ. Nachdem ich die Rezensionen gelesen hatte, stellte ich überrascht fest, dass alles in der Welt der Programmiersprachen bereits sehr perfekt ist. Aber vage Verdächtigungen nagen mich daran, dass auf dieser Welt nicht alles so gut ist. Natürlich gibt es bereits viele Sprachen, aber eine Vielzahl von Sprachkonzepten wird nicht beobachtet.
Wenn wir die geringfügigen Verzierungen von Sprachen verwerfen, gibt es mehrere solche Konzepte.
- Objektprogrammierung
- Datenverwaltung, Eingabe.
- Übergabe einer variablen Anzahl von Parametern an Prozeduren und Funktionen.
- Verwaltung des Ausführungsprozesses.
Aus der Lösung dieser Probleme werden die Eigenschaften einer Programmiersprache addiert.
Objektprogrammierung
Meiner Meinung nach ist dies ein wichtiges Konzept und es muss in der Sprache vorhanden sein. Selbst wenn die Sprache keine Klassen und Objekte enthält, hindert Sie nichts daran, Programme im Objektstil zu denken und zu schreiben, aber das Vorhandensein solcher Mechanismen ermöglicht es dennoch, diese Aufgabe zu vereinfachen.
Datenverwaltung, Eingabe
Ich halte diesen Abschnitt für den wichtigsten im Sprachbegriff. Ich habe auf Habré viele Diskussionen zu diesem Thema geführt. Meistens für statische und dynamische Typisierung argumentiert. Bei der dynamischen Typisierung wurde der Vorteil als Flexibilität der Sprache bezeichnet, der Nachteil ist jedoch angeblich die Unzuverlässigkeit der Sprache und die schlechte Anpassungsfähigkeit an Entwicklungsumgebungen. Bei der statischen Eingabe ist alles genau umgekehrt. Ich halte die Argumente über die beste Zuverlässigkeit von Sprachen mit statischer Typisierung für absurd. Es ist möglich, dass statische Typisierung bei der Entwicklung von Programmierwerkzeugen hilft, aber nicht mehr. Ich bin kein Befürworter beider Ansätze. Ich betrachte das Tippen als solches als das Hauptübel moderner Programmiersprachen. Obwohl es in der überwiegenden Mehrheit der Programmiersprachen vorhanden ist. Die Sprache sollte die gesamte Datenverwaltung vollständig übernehmen, einschließlich des Verständnisses ihrer Typen. Welches ist ganz real. Und der Programmierer muss sich mit der Logik des Programms befassen. Wenn Sie die Daten überprüfen müssen, hilft die Eingabe nicht. Sie müssen nur auf Inhalt überprüft werden. Ich kann das Vorhandensein von Typisierung nur durch Tradition und Trägheit des Denkens erklären.
Übergabe einer variablen Anzahl von Parametern an Prozeduren und Funktionen
Dies ist ein kleines Problem, das jedoch von den meisten Sprachen nur schwer gelöst werden kann. Obwohl es in Assembler ein gutes Beispiel gibt. Parameter durch den Stapel übergeben. Sie müssen nur die Liste der formalen Parameter verlassen und die Parameter durch eine Liste übergeben. Es ist mir nicht ganz klar, eine variable Anzahl von Funktionswerten für was und wie zu verwenden zurückzugeben. In jedem Fall muss eine Entität zurückgegeben werden.
Prozessmanagement
Dieser Abschnitt halte ich auch für entscheidend für das Sprachkonzept. Die Kontrollkonstrukte von Sprachen sind nahezu identisch. Mit dem Befehl goto entstehen kleine Nuancen. Ich verstehe nicht, warum sie dieses Team mit solcher Raserei bekämpfen. Ein sehr praktischer Befehl, insbesondere wenn das Argument dieses Befehls berechnet werden kann. Bei der Implementierung von Parallel Computing sind Varianten der Variante hauptsächlich 2. Entweder werden sie mittels Bibliotheken implementiert oder sie können in die Sprache selbst aufgenommen werden. Ich bin ein Befürworter der zweiten Methode.
In Sprachen fehlt die Ereignisbehandlung. Obwohl es weit verbreitet ist. Um eine GUI zu erstellen und die Ereignisverarbeitung zu implementieren, wird die Hauptschleife gestartet. Diese Lösung glänzt nicht mit Eleganz. In einen solchen Kreislauf zu gelangen, ist ein weiteres Problem. Eine normale Sprache sollte über eine Ereignisbehandlungsfunktion verfügen.
Meine Ideen sind natürlich subjektiv und vielleicht sogar falsch. Aber sie basieren auf meiner persönlichen Erfahrung. Ein modernes Betriebssystem ist ein Haufen Müll, der nicht debuggt wird und der niemals debuggt wird. Stapel von APIs, verschiedene Bibliotheken, aus denen Fehler gestreamt werden. Die Anzahl der Programmiersprachen hat alle möglichen Grenzen überschritten. Darüber hinaus unterscheiden sie sich prinzipiell kaum voneinander. Und im Allgemeinen werde ich nichts über die Anzahl der Frameworks sagen. Jedes durchschnittliche System ist ein mehrschichtiger Kuchen aus verschiedenen, möglicherweise schlecht kompatiblen Subsystemen, dessen vollständiges Debugging niemals durchgeführt wird. Das Debuggen eines einfachen C-Programms kann Monate dauern. Und all dies wird meiner Meinung nach durch das Eingeben von Programmiersprachen erzeugt.
Im Moment gibt es keine Sprache, die meinen Vorstellungen über die richtige Programmiersprache entspricht. Meiner Meinung nach ist die Programmiersprache MUMPS am nächsten dran, aber es gibt keine Implementierung einer solchen Sprache als Programmiersprache. Es gibt Datenbankimplementierungen, in denen diese Sprache als Sprache verwendet wird. Die Einschränkungen dieses Ansatzes liegen auf der Hand, weshalb ich eine neue MSH-Sprache entwickelt und deren Implementierung als Dolmetscher geschrieben habe. Im Moment ist nicht alles, was ich tun werde, darin implementiert. Insbesondere gibt es keine Entwicklungsumgebung, aber Sie können sich ein Bild von der Sprache machen.
Die Implementierung ist für Linux x64 gemacht.
Wer sich für meine Arbeit interessiert, schreibt an die Mail, ich werde die Verteilung senden.PS.
MSH ist nicht nur eine typenlose Sprache, sondern auch nicht deklarativ. Grundsätzlich enthält es keine Variablenbeschreibungen. Im allgemeinen Fall hat eine Variable nicht nur einen Typ, sondern auch eine Struktur. Arrays, Listen, HASH, Stacks und eine Deklaration sind erforderlich, um jede der Strukturen zu beschreiben. In MUMPS gibt es im Prinzip keine solchen Deklarationssprachen, jede Variable ist ein Baum. Für einen solchen Baum ist kein Platz reserviert. Zum Zeitpunkt des Schreibens von Daten wird ein Baumknoten erstellt, und es gibt nur solche Knoten, in denen die Aufzeichnung durchgeführt wurde. Es gibt keine Einschränkungen für die Art des Index. Daher ist der Vergleich von MUMPS mit PHP, Java Script und anderen Sprachen falsch. MUMPS ist eine separate Welt mit eigenen Problemen und Vorteilen. Um es zu verstehen, müssen Sie das Denken neu aufbauen. Es ist unmöglich, MUMPS zu verstehen, wenn man missbräuchliche Bewertungen liest. Wir müssen uns darauf einlassen. Lesen Sie die Dokumentation. Installieren Sie das MUMPS-System. Arbeite daran. Die Tatsache, dass sie mich hier nicht verstehen, ist ganz natürlich. Wir sprechen über verschiedene Welten. In der Welt von MUMPS gibt es keine Diskussionen, die wir hier über Typen, Strukturen führen. Nur wenige MUMPSisten interessieren sich dafür, wie und wo ihre Daten gespeichert werden. Alle Daten in MUMPS haben immer zwei Darstellungen: eine Zahl und eine Zeichenfolge. Und je nach Operation wird diese oder jene Darstellung genommen. Ich kenne immer das genaue Ergebnis, abhängig von der Operation, die ich angewendet habe. MUMPS zwingt den Programmierer, in Bezug auf einen Baum zu arbeiten. Bäume können sich sowohl auf externen Medien befinden: Globals (analog zu Datenbanken) als auch im Speicher: locales (analog zu Variablen in Programmen). Grundsätzlich arbeite ich beim Entwurf eines Informationssystems direkt mit Daten auf einer Festplatte mit lokalen Zwischendaten. Ich habe ein Minimum und sie verursachen keine Probleme für mich. Daher finden Sie in MUMPS-Foren keine Diskussionen über die Variablentypen ihrer Lokalisierungen. Eine typische Entwurfsmethode ist das Entwerfen von Eingabebäumen an Wochenenden. Und dann schreiben Sie bei Bedarf Programme, um Eingabe- und Ausgabebäume zu bilden. Daten in MUMPS sind primär und Programme sind sekundär. Mit meinen Artikeln möchte ich möglichst vielen Programmierern diese andere Welt von MUMPS näher bringen. Ich denke, diese Welt ist korrekter. Ich bewundere diese einfache, kraftvolle und elegante Sprache. Es macht mir Freude, darüber zu schreiben. Zu meinem großen Bedauern habe ich wenig zu tun. Ich möchte eine Sprache schaffen, in der alles geschrieben werden kann, ohne die Grenzen dieser Sprache zu überschreiten. Schreiben Sie einen Server, schreiben Sie einen Desktop-Client und fügen Sie den Browsern eine Sprache hinzu.