MUMPS (Massachusetts General Hospital Utility Multi-Programming System)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 11:34, 2 июня 2016.
MUMPS
Парадигма Procedural
Спроектировано Neil Pappalardo
Первый   появившийся 1966
Печать дисциплины Typeless
OS Cross-platform
Под влиянием
JOSS
Влияние
PSL, Caché ObjectScript

MUMPS (Massachusetts General Hospital Utility Multi-Programming System), также известный как М. является языком программирования, созданный Нилом Паппалардо и коллега доктор Octo Барнетт, в лаборатории животных Массачусетского общего госпиталя в Бостоне в течение 1966 и 1967. Изначально, MUMPS был разработан, чтобы сделать написание приложений на основе баз данных проще, но это не получило широкое признание, пока он не был введен во вступительный цикл и лабораторную тестировочную отчетность. Он старше С и большинство других языков программирования популярных сегодня, но до сих пор используется во многих учреждениях в различных областях. На протяжении многих лет он был изменен и адаптирован различными медицинскими сообществами в соответствии с их потребностями. Не только больницы и медицинские организации, такие как US Veteran’s Administration используют MUMPS, но она также используется крупными компаниями, такими как Meditech и GE Healthcare. MUMPSтакже широко используется в финансовых приложениях многими банками и кредитными союзами, что делает его поистине универсальным языком.

История

Определение MUMPS как языка программирования условно, так как он зародился во времена кристаллизации языков программирования, и сфера его применения простирается от работы с медицинским оборудованием до операционных СУБД и экспертных систем (например, VA VistA). MUMPS зародился в специфичной медицинской среде кардиологов (Octo Barnett). Изначально разработан с целью облегчить написание приложений баз данных, одновременно с максимальным использованием компьютерных ресурсов. Часто использовался в лечебных учреждениях и для финансовых информационных систем и баз данных (особенно для разработанных в 1970-х и начале 1980-х годов) и продолжает использоваться у ряда клиентов. Сейчас MUMPS является базовым языком в системах DSM, MSM, M3-LITE, GT.M, Caché.

Глобальные массивы в MUMPS системах используются для построения и управления базами данных. Структура глобальных массивов — уникальная особенность языка MUMPS. Эти массивы автоматически записываются на диск, без необходимости резервирования и адресации пространства для записи, относятся к иерархическим и разрежённым структурам по самой своей природе. В массивах может содержаться произвольное количество уровней иерархии, причём данные могут содержаться на любом из уровней массива. Индексом массива может быть любое корректное MUMPS выражение, результатом оценки которого может быть число, или строка символов.

Свободная версия MUMPS GT.M оптимизирована для транзакций, может быть платформой разработки, имеет компилятор соответствующий стандарту ANSI/ISO. Используется в различных отраслях, более всего в финансах и здравоохранении.

Применения

Создание процесса проектирования баз данных и построения процесса легче для программистов и использует минимум ресурсов компьютера. Помогает различным организациям сэкономить время и деньги. Список сегодняшних пользователей включают в себя: Ameritrade, Bank of England, Barclays Bank, Beijing Medical University, British Gas, British Petroleum, Budgens, Carphone Warehouse, Chase Manhattan Bank, Coca Cola and Schweppes, Cornhill Insurance, Department of Health & Social Security UK (DHSS), Digital Equipment Corporation (DEC), Domestic & General, Dow Chemicals, English Tourist Board, Equity & Law, Esso, Games Workshop, General Motors, Grecian Holidays, Hamburg Ports Authority, Helsinki University Hospital, Hoffman La Roche, Hoverspeed, ICI, Indian Health Service, Istel, Jewson, Koor Foods, Israel, KPMG, Legal & General Insurance, Lloyds Bank, Meyer International, Ministry of Defence (UK), National Health Service, National Westminster Bank, Nederlandse Aardolie Maatschappij, New York Stock Exchange, Psychiatric Institutes of America, Reed Information Services, RIPAS Hospital, Brunei, Shell, Smithsonian Institute, Soviet Parliament, Swiss Parliament, Tottenham Hotspurs FC, Trinity College, University of Adelaide, University of Cologne, US Department of Defense, Waterford Crystal, West Ham United FC.

Hello, world! на MUMPS

Программа Hello, world!, написанная на MUMPS, будет выглядеть так:

 hello()
 write "Hello, World!",!
 quit

Она может быть запущена из командной строки MUMPS командой:

 do ^hello()

С того момента как MUMPS стал поддерживать последовательные команды в одной строке, а команды стало возможно записывать однобуквенным сокращением, эту программу можно записать более компактно:

 hello() w "Hello, World!",! q

Ключевые особенности языка

ANSI X11.1-1995 дает полное, формальное описание языка; с аннотированной версией этого стандарта можно ознакомиться в Интернете. Типы данных: Существует один универсальный тип данных, который неявно приводится к строке, целому числу, или числу с плавающей точкой, в зависимости от контекста. Booleans (называемые truthvalues в MUMPS): В командах IF и других синтаксисах, которые имеют выражения, расцениваемые как условные, любое строковое значение вычисляется как числовое значение, и если это значение отличное от нуля, то это интерпретируется как True. a<b дает 1, если a меньше, чем b, 0 в противном случае. Объявления: Нет. Все переменные создаются динамически в первый раз присваивается значение. Lines: важные синтаксические сущности, в отличие от их статуса в языках по образцу C или Pascal. Несколько операторов в строке разрешены и распространены. Границы действия команд IF, ELSE, and FOR - "конец текущей строки." Чувствительность к регистру: Команды и внутренние функции не чувствительны к регистру. В отличие от этого, имена переменных и метки чувствительны к регистру. Нет особого смысла высокой по сравнению со строчной буквой. Знак процента (%) является законным в качестве первого символа переменных и меток. Постусловия: выполнением практически всех команд можно управлять с помощью выражениq colon и truthvalue. SET:N<10 A="FOO" sets A to "FOO" if N is less than 10; DO:N>100 PRINTERR, выполняет PRINTERR если N больше, чем 100. Эта конструкция обеспечивает условное выражение, границы действия которого меньше полной строки. Сокращения: Вы можете сократить почти все команды и встроенные функции до одного, двух или трех символов. Зарезервированные слова: Нет. Так MUMPS интерпретирует исходный код по контексту, нет необходимости в зарезервированных словах. Вы можете использовать имена команд языка в качестве переменных. Код MUMPS:

GREPTHIS()
       NEW SET,NEW,THEN,IF,KILL,QUIT SET IF="KILL",SET="11",KILL="l1",QUIT="RETURN",THEN="KILL"
       IF IF=THEN DO THEN
       QUIT:$QUIT QUIT QUIT ; (quit)
THEN  IF IF,SET&amp;KILL SET SET=SET+KILL QUIT

MUMPS код можно сократить:

GREPTHIS()
       N S,N,T,I,K,Q S I="K",S="11",K="l1",Q="R",T="K"
       I I=T D T
       Q:$Q Q Q
T  I I,S&amp;K S S=S+K Q

Массивы: создаются динамически, сохраняются как B-деревья, разбросаны (т.е. почти не используют места для отсутствующих узлов), можно использовать любое количество индексов, и индексы могут быть строками или цифрой (в том числе с плавающей запятой) . Массивы всегда автоматически сохраняются в определенном порядке, так что нет необходимости в сортировке, упаковке, или ином образе реорганизации базы данных. Встроенные функции, такие как $DATA, $ORDER, $NEXT и $QUERY обеспечивают эффективное обследование и обход фундаментальной структуры массива, на диске или в памяти.

for i=10000:1:12345 set sqtable(i)=i*i
set address("Smith","Daniel")="dpbsmith@world.std.com"

Локальные массивы: имена переменных не начинаются со знака вставки (т.е. "^") хранятся в памяти процесса, являются частными для процесса создания, когда истекает процесс создания завершается. Доступная память зависит от реализации. Для реализаций, использующих разделы, оно ограничивается размером раздела (небольшой раздел может быть 32К). Для других реализаций может быть несколько мегабайт.

Глобальные массивы: ^abc, ^def. Они хранятся на диске, доступны всем процессам, и являются постоянными, когда процесс создания завершается. Очень большие глобальные массивы (например, сотни гигабайт) являются практичным и эффективными в большинстве реализаций. Это главный механизм "базы данных" MUMPS. Он используется вместо вызова на операционной системе для создания, записи и чтения файлов.

Косвенность: во многих контекстах, @VBL может быть использован и эффективно заменяет содержимое VBL в другом заявлении MUMPS. SET XYZ="ABC" SET @XYZ=123 устанавливает переменную ABC на 123. SET SUBROU="REPORT" DO @SUBROU выполняет подпрограмму по имени REPORT. Эта замена позволяет ленивое и позднее связывание, а также является эффективным оперативным эквивалентом "указателей" на других языках.

Кусочная функция: Разбивает переменные в сегментированные части руководствуясь указанной пользователем строкой сепаратора (иногда называется "ограничитель").Теv, кто знает awk это знакомо. $PIECE(STRINGVAR,"^",3) значит "third caret-separated piece of STRINGVAR." Кусочная функция может также появиться как назначение (команда SET) цели.

$PIECE("world.std.com",".",2) yields "std".

После

SET X="dpbsmith@world.std.com"

SET $P(X,"@",1)="office" вызывает X, чтобы стать "office@world.std.com"(обратите внимание, что $P эквивалентно $PIECE).

Порядковые функции: Эта функция обрабатывает входные данные в виде структуры, и находит следующий индекс, который существует, который имеет ту же структуру, кроме последнего индекса. Она возвращает отсортированное значение, упорядоченное после одного заданного в качестве входных данных. (Это относится к ссылке на массив в качестве содержимого адресацией данных, а не в адрес значения).

Set stuff(6)="xyz",stuff(10)=26,stuff(15)=""

$Order(stuff("")) дает 6, $Order(stuff(6)) дает 10, $Order(stuff(8)) дает 10, $Order(stuff(10)) дает 15, $Order(stuff(15)) дает "".

Set i="" For  Set i=$O(stuff(i)) Quit:i=""  Write !,i,10,stuff(i)

Здесь аргумент, меньший For повторяется, пока не будет остановлен терминирующим Quit. Эта линия печатает таблицу i и stuff(i), где i последовательно 6, 10, 15. Для перебора базы данных, порядковая функция возвращает следующий ключ для использования.

GTM>S n=""
GTM>S n=$order(^nodex(n))
GTM>zwr n
n=" building"
GTM>S n=$order(^nodex(n))
GTM>zwr n
n=" name:gd"
GTM>S n=$order(^nodex(n))
GTM>zwr n
n="%kml:guid"

Многопользовательность/Многозадачность/Мультипроцессорность: MUMPS поддерживает несколько одновременных пользователей и процессов, даже если основная операционная система не поддерживает (например, MS-DOS). Кроме того, существует возможность указать среду для переменной, например, путем указания имени машины в переменной (как в SET ^|"DENVER"|A(1000)="Foo"), который позволит вам получить доступ к данным на удаленных машинах.

Критика

Даже в публикациях сторонников MUMPS утверждается, что эта технология является непопулярной и нераспространённой, и новые приложения баз данных чаще всего создаются с использованием SQL и популярных языков программирования.

Критики MUMPS прямо называют эту технологию устаревшей и указывают на такие недостатки MUMPS как:

  • отсутствие типизации (все данные хранятся как строки);
  • низкий уровень абстракции;
  • нечитабельность синтаксиса, особенно при использовании сокращений.

Язык MUMPS критики называют провоцирующим ошибки, поскольку:

  • отсутствует обязательное объявление (декларирование) переменных;
  • не поддерживаются привычные приоритеты арифметических операций (например, выражение 2+3×10 даёт в MUMPS значение 50);
  • лишний пробел или разрыв строки может совершенно изменить смысл синтаксической конструкции;
  • ключевые слова языка не зарезервированы и могут широко использоваться в качестве идентификаторов.

Литература

  • Walters, Richard (1989). "ABCs of MUMPS. 1989: Butterworth-Heinemann, ISBN 1-55558-017-3.
  • Walters, Richard (1997). M Programming: A Comprehensive Guide. Digital Press. ISBN 1-55558-167-6.
  • Lewkowicz, John. The Complete MUMPS : An Introduction and Reference Manual for the MUMPS Programming Language. ISBN 0-13-162125-4
  • Kirsten, Wolfgang, et al. (2003) Object-Oriented Application Development Using the Caché Postrelational Database ISBN 3-540-00960-4
  • Martínez de Carvajal Hedrich, Ernesto (1993). "El Lenguaje MUMPS". Completa obra en castellano sobre el lenguaje Mumps. ISBN 84-477-0125-5. Distribuido exclusivamente por su author (ecarvajal@hedrich.es)
  • O'Kane, K.C.; A language for implementing information retrieval software, Online Review, Vol 16, No 3, pp 127–137 (1992).
  • O'Kane, K.C.; and McColligan, E. E., A case study of a Mumps intranet patient record, Journal of the Healthcare Information and Management Systems Society, Vol 11, No 3, pp 81–95 (1997).
  • O'Kane, K.C.; and McColligan, E.E., A Web Based Mumps Virtual Machine, Proceedings of the American Medical Informatics Association 1997
  • O'Kane, K.C., The Mumps Programming Language, Createspace, ISBN 1-4382-4338-3, 120 pages (2010).

Ссылки