Реализация интерпретатора MSH. Хочу представить уважаемой публике интерпретатор нового языка программирования MSH. Я уже о нем писал статьи на Habr. Последняя из них Интерпретатор MSH. В этой статье есть ссылки на предыдущие статьи по этой тематике.

Вообще то местная публика довольно скептически настроена к подобному творчеству. Но это несправедливо. Удачный язык программирования может существенно продвинуть всю ИТ отрасль. Сократив трудозатраты на разработку. Я взялся за разработку своего языка не для удовлетворения собственных амбиций. Я считаю что удачного языка программирования нет. А он крайне необходим. Причем языка нет, а идеология языка есть. Эта идеология содержится в языке MUMPS. Но как языка программирования его нет. Он используется только как язык баз данных и это существенно ограничивает сферу его применения. Такая ситуация, по моему мнению, сложилась из за корысти разработчиков баз данных и непонимания потенциала этого языка всеми остальными. Сейчас MUMPS существует в виде стандарта 1995 года. Конечно в таком виде он давно устарел. Появились новые концепции программирования которые обязан иметь современный язык. Разработать такой язык я и взялся. При этом необходимо было сохранить идеологию MUMPS. А идеология заключается в единстве кода и данных. Язык опирается не просто на данные, а на структуру данных. И это достаточно мощная структура. Это дерево. Все остальные структуры моделируются на основе дерева. В вырожденном случае дерево может состоять из одной вершины. Вообще то грань между кодом и данными достаточно эфемерна. Л

огика программы может быть размещена как в коде, так и в данных. И где провести грань между кодом и данными зависит уже от программиста. Я пробовал размещать всю логику программы в данных. А программа просто обходила дерево данных и выполняла находящиеся там команды. Код конечно никуда не делся, но структура программы находилась вне основной программы. Гибкость такой программы была высокой, но разбираться в такой программе было просто невозможно. Так что код и данные составляют единство. Причем структура данных первична по отношению к содержанию данных. Разделение на язык программирования и базу данных является не естественным.

При проектировании информационных систем в основном программы манипулируют структурами данных, а не содержанием. Содержание становится существенным, только в момент выполнения арифметических операций. Вторичность содержания наводит на мысль об отсутствии необходимости в типах данных. Типы данных порождены архитектурой компьютеров и несовершенством трансляторов. К содержательному смыслу информационных систем типы данных никакого отношения не имеют. Понятно, что это упрощает компиляторы и IDE, но все это вторично. Проблемы которые порождают типы данных, значительно перевешивают те преимущества которые они дают. Это совсем не значит что не надо контролировать содержание данных. Но делать это надо только в момент поступления данных снаружи. И помощи в этом типы переменной не дают. Разнообразие содержания данных намного превосходит базовые типы языков программирования. Это могут быть не только числа, но и строки различных типов. Да и числа могут иметь различные ограничения. Проверять входные данные на корректность в любом случае необходимо. Так что базовые типы к содержанию данных имеют весьма слабое отношение.

Современный язык должен поддерживать ООП. Из за отсутствия декларативной части в языке, пришлось ограничиться только частью реализации описания класса. Но язык не навязывает стиль программирования. Хочешь используешь объекты, не хочешь не используешь. Обработка событий широко используется в Ассемблере. DOS весь был построен на обработке событий. В языках высокого уровня я не знаю случаев использования данной методики. Хотя у нее высокий потенциал. Отсутствие в языке обработки событий вынуждает в программах использовать различные циклы обработки сообщений. Довольно корявое решение, порождающее массу проблем при попытке выполнить какую то обработку внутри цикла. Параллельная обработка заданий уже используется повсеместно, но во многих языках она не поддерживается на уровне языка. Это порождает зависимость программ от ОС и ее версии. Потери от такого решения по моему очевидны.

Это та идеология на которой построен язык MSH.

  1. Единство кода и структур данных, что означает наличие в языке мощной структуры данных.
  2. Отсутствие типов данных и как следствие их декларации.
  3. Включение в язык современных методик программирования. В MSH это объекты, обработка событий и параллельное выполнение заданий.

Кого заинтересовал этот язык, может с ним ознакомится на github.

Там выложены исходные тексты и рабочий пример. Работа над языком только началась и это еще не готовый продукт. Но получить представление об языке я думаю можно. Разработка языка велась в Linux x64.

Комментарии (37)


  1. AntonSazonov
    23.11.2019 11:24
    +1

    А где, собственно, реализация?


  1. farcaller
    23.11.2019 11:45
    +1

    В репе есть дока (ODT) по синтаксису, но из нее я понял только что if-else можно писать как I-E. Почему, зачем — ничего не понятно.


    1. misha_shar53 Автор
      23.11.2019 14:26
      -1

      А вы какие документы прочитали?


    1. misha_shar53 Автор
      24.11.2019 06:23

      Потому что основой языка является MUMPS. И такая форма команд там исторически сложилась. Это стандарт языка MUMPS.


  1. skymal4ik
    23.11.2019 13:33
    +1

    Не нашёл самого интересного. А именно примеров кода. Или даже Hello World. Или схему принципа разделения кода и данных. Думаю Readme на гитхабе не помешает. Без этого лично мне даже искать дальше лень. Но за труд и открытие кода спасибо.

    PS Предложения могут состоять из более, чем нескольких слов. Ато читая текст создаётся ощущение, что он написан для несмышленных, что немного напрягает. Моё личное имхо.


    1. misha_shar53 Автор
      23.11.2019 14:17
      -1

      В каталогах msh примеры кода.


    1. misha_shar53 Автор
      23.11.2019 15:08
      -1

      Пример кода в github есть. Принцип разделения кода и данных выбирает сам программист. Лично я выбираю эту грань в зависимости от того насколько настраиваемая программа должна быть. Чем гибче должно быть приложение, тем больше приходится выносить в данные.


  1. FForth
    23.11.2019 13:37

    Вообще то грань между кодом и данными достаточно эфемерна. Л

    Некоторая реализация Goto переходов в иллюстрации Forth языка с сайта проекта rosettacode.org :)

    P.S. Какие то решённые примеры и на MUMPS есть на данном сайте.


  1. lair
    23.11.2019 13:55
    +1

    Удачный язык программирования может существенно продвинуть всю ИТ отрасль.

    Ключевое слово — удачный. Оснований считать ваш язык удачным пока нет.


    (особенно учитывая насколько недружелюбна соответствующая репа на гитхабе)


    1. misha_shar53 Автор
      23.11.2019 14:31
      -1

      Удачным пока этот язык считаю как минимум я. Остальные не имели счастья с ним познакомиться. Поэтому я и написал эту статью. С наскока понять достоинства и недостатки языка невозможно. В любую среду программирования надо входить, тем более в язык типа MUMPS. Техника программирования в таких языках существенно отличается.


      1. lair
        23.11.2019 14:33
        +1

        Удачным пока этот язык считаю как минимум я

        Это неудивительно.


        Остальные не имели счастья с ним познакомиться.

        Что тоже неудивительно, учитывая, как вы пишете материалы об этом языке.


        Поэтому я и написал эту статью.

        Из которой все так же не понятно ни какие преимущества предоставляет этот язык, ни как он выглядит, ни как им пользоваться. Проще говоря, как не было понятно, зачем он и какая от него польза, так и не понятно.


        1. misha_shar53 Автор
          23.11.2019 15:02
          -1

          Статья не является описанием языка. Для этого дана ссылка на github. Там есть и пример кода и пример приложения,


          1. lair
            23.11.2019 15:05
            +1

            Статья не является описанием языка.

            Тогда к чему фраза "поэтому я и написал эту статью"?


            Там есть и пример кода и пример приложения,

            Ну я вот поискал и не нашел.


            1. zagayevskiy
              23.11.2019 20:16

              Да вот, какой-то БухЮзер
              ХЗ, ничего не понял, если честно.


              1. lair
                24.11.2019 00:40
                +1

                Выглядит весьма ужасно.


                1. misha_shar53 Автор
                  24.11.2019 09:15

                  Команды языка выглядят стандартно, мало отличаются от других языков. По другому записывается обращение к переменным, да и то оно мало отличается от обращения к массивам.


                  1. lair
                    24.11.2019 10:50
                    +1

                    Команды языка выглядят стандартно, мало отличаются от других языков.

                    Начнем с того, что в многих других языках (по крайней мере, во многих, которые знаю я) команд нет вообще. Так что говорить, что в вашем языке команды выглядят стандартно — это смелое заявление.


                    Но если ваши "команды" — это то, с чего начинается каждая строчка, то… Do и Set, серьезно? Это просто мусор, "современные языки" способны отличить вызов функции или присвоение по синтаксису, "команды" для этого не нужны. K и S? Вас клавиатура бьет током за каждый символ?


                    Понимаете, я считаю, что код, который приведен по ссылке ужасен, потому что он (а) избыточен и (б) практически нечитаем.


                    1. misha_shar53 Автор
                      25.11.2019 05:32

                      А в тех языках которые знаю я команды все таки есть. Например в Си команды switch, goto, for, while, do while. Они вас не напрягают? В MUMPS системах на команды добавлен дополнительный функционал в виде условия выполнения этой команды и было бы не логично убрав команду потерять функционал. Так что это далеко не мусор. А последовательное решение. А насчет клавиатуры, я уже отвечал в комментариях на этот вопрос. Вопрос читаемости спорный и очень индивидуальный.


                      1. lair
                        25.11.2019 11:19

                        Например в Си команды switch, goto, for, while, do while.

                        Это не команды, это то, что по-английски называется statements, а по-русски — оператор.


                        Они вас не напрягают?

                        Неа. Удивительным образом, даже в C для присвоения или вызова функции не нужно ключевое слово.


                        В MUMPS системах на команды добавлен дополнительный функционал в виде условия выполнения этой команды

                        Вообще-то, операторы ветвления есть в большей части современных языков. А в Boo (Ruby, Perl, и не думаю, что этот список полон) есть и модификаторы.


                        Как видим, ни "команды", ни даже отдельные ключевые слова для присвоения или вызова функции для этого не нужны.


                        Так что это далеко не мусор.

                        С точки зрения чтения? Мусор.


                        Вопрос читаемости спорный и очень индивидуальный.

                        Ну так я и написал: я считаю. Другое дело, что если таких "я" достаточно много, ваш язык сложно считать удачным.


                        1. misha_shar53 Автор
                          25.11.2019 12:23

                          Как бы команды не назывались, это не меняет сути дела. Чем модификаторы лучше решения в MUMPS не понимаю. Наличие команд не является проблемой.


                          1. lair
                            25.11.2019 12:25

                            Как бы команды не назывались, это не меняет сути дела.

                            Конечно, не меняет: фраза "мало отличаются от других языков" как была необоснована, так и осталась.


                            Чем модификаторы лучше решения в MUMPS не понимаю.

                            Читаемостью.


                            Наличие команд не является проблемой.

                            Проблемой является ужасный код. А "команды", и вообще ваш синтаксис — это одна из причин этого.


        1. misha_shar53 Автор
          25.11.2019 05:23

          Предыдущие статьи не пробовали читать?


          1. lair
            25.11.2019 11:13

            Пробовал, там то же самое.


  1. FForth
    23.11.2019 15:28
    +2

    Я уже о нем писал статьи на Habr.

    Я взялся за разработку своего языка не для удовлетворения собственных амбиций

    Я считаю что удачного языка программирования нет.

    Я пробовал размещать всю логику программы в данных.


    Не проще ли попробовать попробовать сравнить с существующими решениями и парадигмами языков программирования и написать статью в этом ракурсе, без всяких этих Я?

    А, то например, кто то считает и язык блоковых схем Дракон открытием в применении для IT специалистов, вне рассмотрения рамок его подходящего применения.

    P.S. Неужели Вам охота ловить минусы в карму при публикации очередной своей статьи может и при рациональных мыслях при разработке своего языка?
    Например автор языка Factor при переходе к его разработкe от практики использования Java ясно описал своё видение почему.


    1. misha_shar53 Автор
      23.11.2019 15:54
      -1

      Статья написана с целью ознакомить с реализацией языка, а не для поднятия кармы. Я вообще не понимаю как карма подымается или опускается. Мысли других людей мне не доступны. Я пишу Я, потому что это именно мое мнение.


      1. FForth
        23.11.2019 16:29
        +3

        Где в статье с заголовком «Реализация интерпретатора MSH» — представлены детали реализации интерпретатора MSH? (ткните пальцем, если что то проглядел)

        P.S. В Ваших публикациях только одна статья имеет положительный рейтинг.
        Не пробовали понять почему?
        Когда человек пишет часто Я, не подтверждая это значимой кому-то информацией (может и субъективной, но в сравнении с каким то своим описанным частным опытом), то это признак, что корона для головы немного великовата, не зная даже сколько Вам лет в текущем состоянии. :)
        И, да этот пост некоторый троллинг для того, чтобы расширить зону восприятия внутреннего Я вашего Эго.


        1. misha_shar53 Автор
          24.11.2019 06:32

          Реализация приведена на github. Какие детали реализации вас заинтересовали?


        1. misha_shar53 Автор
          24.11.2019 07:03

          Ну короны к сожалению у меня нет. Короны носят короли, на плечах которых огромная ответственность за судьбу страны. А вы наверно имели ввиду шизофреников. Спасибо что сравнили меня хотя бы с королем.


      1. aamonster
        23.11.2019 17:59
        +3

        Простите за грубость, а почему вы решили, что ваше мнение людям интересно?


        Людям интересны они, а не вы. Так что стоило бы посмотреть на людей (не на себя) и рассказать, какую пользу ваш язык принесёт им. Допустим, веб-девелоперу (отдельно бэкэнду, отдельно фронтэнду). Или программисту встраиваемых систем. Или разработчику игр (там может быть несколько разных областей и языков в рамках одной игры). Или… В общем, взяли бы какой-нибудь продукт и показали, как с вашим языком будет лучше. Ну или в процессе написания поняли бы, что лучше не будет, и стали бы искать другую нишу. У MUMPS-то своя ниша была.


        Ну и с реализацией вы не ознакомили. Впрочем, реализовать язык – не адски сложная задача, теория сейчас хорошо проработана.


        1. misha_shar53 Автор
          24.11.2019 06:49

          Насчет людей, я надеюсь, что вы не одиноки во вселенной.
          Насчет реализации уже написал. Реализация конечно не адская задача, но довольно сложная и теория мало помогает. С идеологией языка намного сложнее. Обычно дальше вариаций на тему Си никто не идет.


          1. aamonster
            24.11.2019 10:13
            +2

            "Обычно дальше вариаций на тему Си никто не идет" – Lisp? ML с диалектами? Haskell?


            Я вообще несколько удивлён, что вы, говоря про язык с размытой границей между данными и кодом, не сослались на Lisp, как на классику таких языков. Более того: в нём основная структура данных (список) фактически является двоичным деревом (состоит из узлов с двумя указателями CAR и CDR). И реализуется он изумительно просто.


            Не менее интересен Хаскель. Тут полноценный компилятор реально сложен, но основы-то (ленивое вычисление) достаточно просты и уже дают возможности для всяких смешных трюков типа того, что if – обычная функция, а не специальная конструкция языка. Ну и есть готовые примеры реализации подобного лямбда-исчисления, только упрощённые до предела.


            1. misha_shar53 Автор
              24.11.2019 10:42
              -1

              И Lisp и Haskell наверно прекрасные языки со своей интересной идеологией. Но идей как их улучшить у меня нет. Писать еще один их вариант, какой смысл? MUMPS мощный язык программирования, с хорошим потенциалом языка широкого использования. Но ему не дают вырваться из ограниченной области языка баз данных. Его реализации как языка широкого применения не существует. Идеологию такого языка пришлось проработать. То до чего я додумался и легло в основу языка MSH.


              1. aamonster
                24.11.2019 12:26
                +3

                Не надо сразу улучшать, для начала достаточно их понять. Вам всё-таки не 14, чтобы придумывать новый язык, не изучив работы предшественников. Как минимум – не будете писать "Обычно дальше вариаций на тему Си никто не идет" ;-), а если повезёт – почерпнёте идеи.


          1. lair
            24.11.2019 10:52
            +1

            Обычно дальше вариаций на тему Си никто не идет.

            Вы, я так понимаю, про функциональные языки ничего не слышали?


  1. zagayevskiy
    23.11.2019 20:19
    +1

    Декларируется минимальное количество строк кода, и минимальное количество ошибок. А потом баааах — GOTO и переменные без объявления. И потом что-то типа «любая переменная может быть списком». Вы точно смотрели на современные языки?


    1. misha_shar53 Автор
      24.11.2019 06:56

      Это проверенные временем и хорошо зарекомендовавшие себя конструкции в MUMPS.


      1. lair
        24.11.2019 10:53
        +1

        Это как раз и называется "а на современные языки мы смотреть не будем". Я-то из поста подумал, вы хотите сделать удачный язык...


        Чтобы язык был удачным, для каждой такой конструкции должно быть обоснование за пределами "это себя зарекомендовало в моем любимом языке" (потому что, как вы уже написали, этот язык почему-то не получил широкого распространения), и аргументированный выбор между такой конструкцией и ее альтернативами.