Как стать автором
Обновить

Реализация интерпретатора MSH

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

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

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

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

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

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

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

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

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

Публикации

Истории

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн