Implementierung des MSH-Interpreters. Ich möchte der geschätzten Öffentlichkeit den Interpreten der neuen Programmiersprache MSH vorstellen. Ich habe bereits Artikel über ihn auf Habr geschrieben. Der letzte ist der
MSH-Dolmetscher . Dieser Artikel enthält Links zu früheren Artikeln zu diesem Thema.
Tatsächlich steht die lokale Öffentlichkeit einer solchen Kreativität eher skeptisch gegenüber. Das ist aber unfair. Eine erfolgreiche Programmiersprache kann die gesamte IT-Branche erheblich voranbringen. Reduzierung des Entwicklungsaufwands. Ich nahm die Entwicklung meiner Sprache auf, um meine eigenen Ambitionen nicht zu befriedigen. Ich glaube, dass es keine erfolgreiche Programmiersprache gibt. Und es ist äußerst notwendig. Darüber hinaus gibt es keine Sprache, aber es gibt eine Ideologie der Sprache. Diese Ideologie ist in der MUMPS-Sprache enthalten. Aber als Programmiersprache existiert es nicht. Es wird nur als Datenbanksprache verwendet, was den Anwendungsbereich erheblich einschränkt. Diese Situation hat sich meiner Meinung nach aufgrund der Gier der Datenbankentwickler und des Mangels an Verständnis für das Potenzial dieser Sprache bei allen anderen entwickelt. MUMPS gibt es jetzt als 1995er Standard. Natürlich ist es in dieser Form längst überholt. Es sind neue Programmierkonzepte entstanden, die eine moderne Sprache haben müssen. Ich habe mich verpflichtet, eine solche Sprache zu entwickeln. In diesem Fall war es notwendig, die Ideologie von MUMPS beizubehalten. Und die Ideologie ist die Einheit von Code und Daten. Die Sprache basiert nicht nur auf Daten, sondern auch auf der Datenstruktur. Und das ist eine ziemlich mächtige Struktur. Das ist ein Baum. Alle anderen Strukturen werden auf Baumbasis modelliert. In einem entarteten Fall kann ein Baum aus einem Eckpunkt bestehen. Tatsächlich ist die Grenze zwischen Code und Daten eher kurzlebig. L
Die Programmlogik kann sowohl im Code als auch in den Daten platziert werden. Und wo die Grenze zwischen Code und Daten zu ziehen ist, hängt vom Programmierer ab. Ich habe versucht, die gesamte Programmlogik in die Daten einzufügen. Und das Programm ging einfach um den Datenbaum herum und führte die Befehle dort aus. Der Code ist natürlich nicht verschwunden, aber die Struktur des Programms lag außerhalb des Hauptprogramms. Die Flexibilität eines solchen Programms war hoch, aber es war einfach unmöglich, ein solches Programm zu verstehen. Code und Daten bilden also eine Einheit. Darüber hinaus ist die Datenstruktur primär in Bezug auf den Inhalt der Daten. Eine Trennung in eine Programmiersprache und eine Datenbank ist nicht selbstverständlich.
Beim Entwurf von Informationssystemen manipulieren Programme in erster Linie Datenstrukturen und nicht Inhalte. Der Inhalt wird nur zum Zeitpunkt der arithmetischen Operationen von Bedeutung. Die sekundäre Natur des Inhalts legt nahe, dass keine Datentypen erforderlich sind. Datentypen werden durch Computerarchitektur und die Unvollkommenheit von Übersetzern erzeugt. Datentypen haben nichts mit der sinnvollen Bedeutung von Informationssystemen zu tun. Es ist klar, dass dies Compiler und IDEs vereinfacht, aber all dies ist zweitrangig. Die Probleme, die Datentypen erzeugen, überwiegen bei weitem die Vorteile, die sie bieten. Dies bedeutet nicht, dass Sie den Inhalt der Daten nicht kontrollieren müssen. Dies sollte jedoch nur zum Zeitpunkt des Eingangs von Daten von außen erfolgen. Dabei helfen die Variablentypen nicht weiter. Die Vielfalt der Dateninhalte geht weit über die Grundtypen der Programmiersprachen hinaus. Es kann sich nicht nur um Zahlen handeln, sondern auch um Zeichenfolgen verschiedener Typen. Und Zahlen können verschiedene Einschränkungen haben. In jedem Fall müssen die eingegebenen Daten auf ihre Richtigkeit überprüft werden. Grundtypen haben also nur einen sehr geringen Bezug zum Dateninhalt.
Moderne Sprache sollte OOP unterstützen. Aufgrund des Fehlens eines deklarativen Teils in der Sprache musste ich mich auf einen Teil der Implementierung der Klassenbeschreibung beschränken. Die Sprache schreibt aber keinen Programmierstil vor. Wollen Sie Objekte verwenden, wollen Sie nicht nicht verwenden. Ereignisbehandlung ist in Assembler weit verbreitet. DOS war alles auf Ereignisbehandlung aufgebaut. In Hochsprachen kenne ich keine Fälle, in denen diese Technik angewendet wird. Obwohl sie ein hohes Potenzial hat. Das Fehlen einer Ereignisverarbeitung in der Sprache zwingt Programme dazu, verschiedene Nachrichtenverarbeitungszyklen zu verwenden. Eine ziemlich ungeschickte Lösung, die viele Probleme verursacht, wenn versucht wird, irgendeine Art von Verarbeitung innerhalb der Schleife durchzuführen. Die parallele Bearbeitung von Aufgaben wird bereits überall eingesetzt, in vielen Sprachen jedoch auf Sprachebene nicht unterstützt. Dies macht Programme vom Betriebssystem und seiner Version abhängig. Die Verluste aus einer solchen Entscheidung liegen meiner Meinung nach auf der Hand.
Auf dieser Ideologie basiert die MSH-Sprache.
- Die Einheit von Code und Datenstrukturen, was bedeutet, dass die Sprache eine leistungsfähige Datenstruktur hat.
- Das Fehlen von Datentypen und in der Folge deren Deklaration.
- Die Einbeziehung moderner Programmiertechniken in die Sprache. In MSH sind dies Objekte, Ereignisbehandlung und parallele Ausführung von Aufgaben.
Wer sich für diese Sprache interessiert, kann sie auf github kennenlernen .
Es sind der Quellcode und ein Arbeitsbeispiel angelegt. Die Arbeit an der Sprache hat gerade erst begonnen und dies ist kein fertiges Produkt. Aber ich denke, Sie können sich ein Bild von der Sprache machen. Die Sprache wurde in Linux x64 entwickelt.