MUMPS
MUMPS (англ. Massachusetts General Hospital Utility Multi-Programming System — Массачусетская основная мульти-программная система для госпиталей; иногда M или М-система) — язык программирования созданный 1966-67 для использования в лечебной индустрии. Из MUMPS в 70-х годах вышла свободная медицинская система VA VistA, де-факто стандарт медицинской информационной системы.
Обозначение MUMPS, как язык программирования условно, так как он
зародился во времена кристаллизации языков программирования, и его
системная компетенция органично распространяется от нюансов работы с
медицинским оборудованием, до операций СУБД и экспертных систем (см.
например системные уровни VA VistA).
Весьма характерно, что MUMPS зародился в специфичной медицинской среде кардиологов (Octo Barnett).
Изначально разработан с целью сделать написание приложений баз данных легким, одновременно с максимальным использованием компьютерных
ресурсов. Часто использовался в лечебных учреждениях и для финансовых
информационных систем и баз данных (особенно для разработанных в 1970х
и начале 1980х годов) и продолжает использоваться у многих клиентов.
Сейчас MUMPS является базовым языком в системах DSM, MSM, M3-LITE, GT.M, CACHE, которые эффективно применяются в промышленности и финансовых учреждениях, на транспорте и в связи.
MUMPS создан после Лисп (Лямбда-исчисление и списки), BASIC (легкий, интерактивный, компактный язык), ПЛ/1 (структуриованный язык больших машин — см. конфликт с mainframe вычислительными центрами VistA разработчиков до языков структурного программирования C, Pascal,
имеет свой синтаксис и терминологию. Он предлагает ряд уникальных
возможностей, не доступных в других языках, развивает интересные
концепции программирования и архитектуру баз данных.
Глобальные массивы в MUMPS системах используются для построения и
управления базами данных. Структура глобальных массивов — уникальная
особенность языка MUMPS. Эти массивы автоматически записываются на
диск, без необходимости резервирования и адресации пространства для
записи, относятся к иерархическим и разрежённым структурам по самой
своей природе. В массивах может содержаться произвольное количество
уровней иерархии /индексов/, причём данные могут содержаться на любом
из уровней массива. Индексом массива может быть любое корректное MUMPS
выражение, результатом оценки которого может быть число, или строка
символов. Все о языке программирования и системе MUMPS. Джон Левкович (гл. 10)
В силе языка MUMPS можно убедится на примере концептуальных диаграм системы VA VistA
(95 файлов .pdf). Это пожалуй единственное в Интернете открытое
хранилище нетривиальных схем большой организации. Такие файлы, из этой
директории, как Расписание (SD.pdf), здание больницы (EN.pdf),
экономика (PRC.pdf), администрирование (MAS.pdf), онкология (ONC.pdf),
лаборатория (LR-LAB_DATA.pdf) содержат сотни элементов данных и тысячи
связей бразующих густую сетку. И это все работает, постоянно
развивается, изменяется (причем существенно в силу изменений
законодательства, организации и пр. (см. также Глоссарий концептов ВистЫ на английском и русском языках)
Свободная версия MUMPS GT.M (основная загрузка [1]
крупной финансовой корпорации FIS (Fidelity National Information
Services). Оптимизирована для транзакций, может быть платформой
разработки, имеет компилятор соответствующий стандарту ANSI/ISO.
Используется в различных отраслях, более всего в финансах и
здравоохранении (читай VA VistA). Описание GT.M
Интерпретирующая технология и мощная глобальная БД позволяют
концентрировать в системе построенной на MUMPS самые тончайшие аспекты
элементов автоматизированной системы управления, и соответственно
строить Базу Знаний. Наиболее сильно это выразилось в медицинской
системе VA VistA, в которой сконцентрирован 25-летний обширнейший опыт управления медицинским учреждением в Ветеранской Службе МО США.
Используется метафора «MUMPS — древовидная БД». Более точная
метафора: MUMPS — иерархия осьминогов. То есть древовидная структура в
узлах которой могут находится ламбда-выражения
более похоже на иерархию живых существ, осьминогов (имеющих древовидную
топологию тела). Символьная природа компьютерной среды — в этом случае
аналогична нелокальности интеллекта-жизни. Интеллектуальный феномен
осьминогов рассмотрен например в С. В. Савельев. Происхождение мозга. //«Веди» М2005.
Основные (уникальные) идеи MUMPS
Выборка из книги Джона Левковича.
MUMPS это больше, чем просто один из языков программирования, он
также охватывает многие области более присущие обычно операционным
системам общего назначения, которые обеспечивают функционирование и
разработку прикладных программ. Кроме просто интерпретатора языка, ему
присущи функции управления базами данных, и кроме того обеспечение
хорошего интерфейса с устройствами ввода/вывода. В дополнение к этому,
большинство из версий MUMPS допускают работу в многопользовательских и
многозадачных режимах с использованием принципов разделения времени
между заданиями..
MUMPS является интерпретирующим языком. MUMPS команды могут
запускаться на исполнение прямо с клавиатуры или записываться в виде
программ на диск. MUMPS интерпретирует типы данных в контексте
совершаемых над ними операций. В непосредственном режиме Вы легко
можете проверить любую из языковых конструкций, с помощью отладчика
провести отладку программ и их процедур, просмотреть и изменить в любой
момент содержание локальных и глобальных переменных.
интерпретация данных как программы (косвенность, фактически лямбда-исчисление)
Два пути использования косвенности : (1) — оператор XECUTE (в Лиспе
сердце системы функция EVAL), в котором поле данных, используемое как
аргумент оператора, исполняется как набор MUMPS инструкций, и (2) —
использование оператора косвенности @, который позволяет заменить
полями данных аргументы операторов (в Лиспе макрос).
глобаль — массив автоматически адресуемый для записи на диск.
основная форма записи данных MUMPS. Глобали являются разрежёнными
массивами и занимаемое ими пространство на диске определяется только
размером данных, записываемых при индексах. Глобали могут быть
распределены одновременно между многими пользователями. Глобальные
переменные доступны всем процессам работающим в одной директории.
индексация — организация взаимного расположения записей внутри массива
называется индексацией и достигается в MUMPS с помощью индексов
глобальных массивов. Индексами в этих массивах могут быть не только
числа, но и любые символьные строки имеющие значение (семантику),
которая затем используется в программах. например это может быть
программный код обработки узла (аналогия с функцией EVAL Лиспa).
многоосевое кодирование часто используется в медицинских
информационных системах, для кодирования диагнозов и лечебных процедур
которые могут иметь множественные ссылки в своем коде. Диагноз может
иметь в себе элемент указывающий на поражение определенного органа тела
или конкретной части органа, (например, левая вентрикулярная стенка
сердца), другое поле указывает на функциональные изменения в этом месте
(воспаление), третье поле указывает на причину, вызвавшую заболевание
(травма). Каждое из полей является элементом иерархической структуры,
комбинация трех полей создает единый код заболевания, несущий в себе
три ссылки. (На эту возможность могу существенно опереться современные
системные подходы к здоровью, например В. В. Рево «Системная семиотика
болезнейц человека и общества»)
В-деревья В большинстве MUMPS реализаций глобальные структуры
основываются на концепции так называемых сбалансированных деревьев
(именуемых также и В-деревьями).
В-деревья представляют собой мощный инструмент для организации
разряженных структур с использованием ключей (индексов). При этом
обеспечивается эффективный механизм записи и чтения данных с
минимальным количеством обращений к диску.
MUMPS является строчно-ориентированным языком, каждая строка
может содержать много операторов (количество ограничено только пределом
длины строки — обычно 255 символов). Отдельные операторы и функции
языка могут быть сгруппированы вместе в одной физической строке
программы.
^ [System,Directory]Name(Subscripts) синтаксис глобальной
ссылки, на программу или данные. Идентификатор System обозначает, что
ссылка относится к области расположенной в той же системе /на том же
узле сети/, что и текущий процесс. Идентификатор области (Directory),
указывает, что обращение производится к области назначенной текущему
процессу при его запуске.
% начало имени библиотечного массива
: пост-условие оператора
$ начало имены системных переменных
[ операция «строка содержит»
] операция «строка следует»
$Z функции фирм-разработчиков MUMPS и не являющиеся стандартными.
Hello world на MUMPS
Программа Hello world написанная на MUMPS будет выглядеть так:
hello() write "Hello, World!",! quit
и может быть запущена из командной строки MUMPS командой «do ^hello() ».
С того момента как MUMPS стал поддерживать последовательные команды в
одной строке, а команды стало возможно записывать однобуквенным
сокращением, эту программу можно записать более компактно:
hello() w "Hello, World!",! q
- пример строчного характера языка.
(требуется дальнейший перевод с английской версии) |