Языки программирования. Куда идем товарищи. Еще один малоизвестный но очень мощный язык
Мои наблюдения за развитием языков программирования оставляют странное ощущение тупика. В последнее время появилось достаточно много новых языков. Но прогресса в этой области никакого нет. Такое впечатление что развитие в этой области топчется на месте. По возможностям языки мало отличаются друг от друга. Явное противостояние видно на поле типизации переменных. С одной стороны это языки с жесткой типизацией данных такие как Си, С++, Паскаль, Фортран, Java с другой стороны JavaScript и его клоны. В JavaScript сторонники и противники типизации ведут открытую войну. Новые стандарты на JavaScript усиливают типизацию в этом языке. Сильная типизация теоретиками от программирования считается великим благом. Языки со слабой типизацией появились не случайно и это не недоработка создателей языка, а необходимость. На языках со слабой типизацией писать легче. Но я не за JavaScript декларирование переменных и их типизация как токовая по моему огромное бедствие. По моему декларирование переменных было порождено потребностями первых трансляторов. А затем как обычно теоретиками превращено в фетиш на который теперь все молятся. Ярким примером проблем порожденных типизацией является библиотека Паскаля, Си, С++ где функционально одинаковые программы созданы для разных типов переменных. Декларирование переменных вообще не нужно. Для предметной области не важно целое или действительное значение имеет переменная. Какое значение пользователь ввел с клавиатуры такое и есть. Задача программы манипулировать такими значениями не вникая в то как они хранятся в памяти. Этим должен управлять транслятор. Еще одной проблемой в типичных языках программирования является управление памятью. Здесь языкам ручным управлением памятью таким как Си, С++, Паскаль, Фортран противостоят языки с управлением памятью с помощью сборщиков мусора такие как Java. Есть и промежуточные варианты такие как Object C. Недостатки всех этих способов хорошо известны. Никакие другие способы управления памятью традиционным языкам программирования неизвестны. При проектировании информационной системы для отображения связей данные приходится хранить в сложных структурах. Такие структуры вынесены за языки и находятся как правило в библиотеках. Это списки, карты, хэш-таблицы. Пользоваться всем этим арсеналом неудобно. Для чего все это я пишу? Что бы поныть о несовершенстве устройства мира? Совсем нет. Просто существует язык программирования который не имеет всех этих недостатком. Он вроде бы есть и его вроде бы нет. Он живет сам по себе остальной мир сам по себе. Он известен узкому кругу пишущих программистов. Создатели языков его не видят в упор. Создают языки аля Алгол собирая все его проблемы, а затем героически преодолевая их. И очень этим гордятся. И никому не приходит в голову просто не создавать проблемы чтобы в дальнейшем их не преодолевать. Может быть я веду речь о какой нибудь мало известной самоделке? Вовсе нет. Это давно известный язык родившийся на рубеже 60–70 годов. В отличие от многих других он был сразу же стандартизован. Стандарт на этот язык становится третьим после Фортрана и Кобола. В 1995 году стандарт на этот язык был обновлен. И основные производители сред на этом языке почти придерживаются этого стандарта. Остается назвать этот язык. Я думаю подавляющему большенству это имя ничего не скажет, но его зовут MUMPS. Посмотрим как же он справляется с изложенными выше проблемами. Декларирование и как следствие типизация в этом языке отсутствует как таковая. Переменные существуют всегда в 3-х лицах. У любой переменной всегда есть числовое, логическое и строковое значение. Используется та трактовка переменной которая необходима для данной операции. Переменная возникает сразу в 3-х лицах в момент ее записи. Это либо расположение переменной слева от знака равенства либо при чтении ее с внешних устройств. Для уничтожения переменных существует специальная команда. Переменная имеет не только значение, но и структуру. Любая переменная является логическим деревом. На такую структуру легко отображаются и списки и хэш таблицы. В языке имеется еще одна уникальная особенность. Переменная может находиться в постоянной памяти и поэтому необходимость в файлах сильно ограничена. Эта способность языка располагать иерархические данные в файлах широко используется и часто этот язык трактуют как базу данных. Хотя это свойство языка не является основным. У языка много уникальных свойств отсутствующих в других языках. В язык встроена полная поддержка баз данных. Это данные на постоянном носителе, поддержка транзакций и журналирования. Язык поддерживает распределенные данные. Твои данные могут находиться в любой точке мира, но для тебя будет это просто стандартное иерархическое дерево. В язык встроена многозадачность с созданием независимых потоков выполнения и синхронизации. Язык имеет собственные встроенные средства ввода вывода в том числе асинхронного. Управление памятью сделано очень элегантно. Программист вообще не управляет распределением памяти он работает только с логическими переменными, а где они находятся он даже не имеет возможности узнать. Да и расположение данных в памяти не определено оно может в разные моменты времени быть в разных местах. Данные в памяти и на внешних носителях хранятся в виде B-дерева и в сборке мусора по определению не нуждаются. При всех своих достоинствах это очень компактный язык. В части стандарта это легко переносимый язык. Программы на нем очень компактны легко отлаживаются и невероятно надежны. Благодаря полному автоматическому управлению данными ошибки в RunTime исключение. Лично мне этот язык доставляет чисто эстетическое наслаждение. Когда мне приходится программировать на традиционных языках после MUMPS я чувствую себя так как будто к моим ногам привязали гири и заставили бежать. Хотя и с гирями бегать можно. Но в этом мире все не так просто. Последний стандарт этого языка был разработан в 1995 году да и он не внес принципиальных изменений в предыдущий стандарт. И к настоящему моменту этот язык несколько архаичен. Я решил разработать новый язык построенный на идеологии MUMPS который бы учел современное состояние языков. Но о недостатках MUMPS и о предлагаемом мной языке в следующий раз если до этого дойдет дело.