Язык MUMPS¶
MUMPS (Massachusetts General Hospital Utility Multi-Programming System), также известный как M (язык программирования) и MUMPS (система управления базами данных), — это язык программирования высокого уровня, изначально разработанный для медицинских информационных систем. Он сочетает в себе встроенную многопользовательскую иерархическую базу данных (сетевую модель данных) и интерпретируемый язык с динамической типизацией. MUMPS известен своей высокой производительностью при работе с транзакциями, компактностью кода и возможностью одновременного доступа множества пользователей к общим данным.
¶История
¶Создание и первые годы (1966–1970)
Язык был разработан в 1966 году в Массачусетской больнице общего профиля (MGH, Бостон, США) под руководством доктора Октавио Барнетта (Octo Barnett). Первоначальная цель — создание системы для автоматизации обработки медицинских записей, лабораторных данных и управления больничными процессами. Первая реализация, известная как MUMPS-1, была написана на ассемблере для компьютера PDP-9 компании Digital Equipment Corporation (DEC).
¶Стандартизация и расцвет (1970–1990)
В 1970-х годах MUMPS получил широкое распространение в медицинских учреждениях США. В 1977 году был принят первый стандарт ANSI (American National Standards Institute) для языка MUMPS (ANSI X11.1-1977). В 1980-х годах появились коммерческие реализации, такие как DSM (Digital Standard MUMPS) от DEC и ISM (InterSystems MUMPS) от компании InterSystems. В 1990-х годах была выпущена версия стандарта ANSI X11.1-1995, которая добавила поддержку объектно-ориентированного программирования.
¶Современное состояние (2000 — настоящее время)
В 2000-х годах язык MUMPS был переименован в M (по инициативе комитета по стандартизации MDC — MUMPS Development Committee). Однако историческое название «MUMPS» по-прежнему широко используется. Основные современные реализации:
- Cache (InterSystems) — коммерческая СУБД и среда разработки, поддерживающая MUMPS, SQL и объектно-ориентированное программирование.
- GT.M (Fiserv) — открытая реализация (лицензия AGPLv3), используемая в банковских и медицинских системах.
- IRIS (InterSystems) — современная платформа, наследующая Cache.
¶Ключевые особенности
¶Встроенная база данных
MUMPS неразрывно связан с собственной иерархической базой данных, организованной в виде глобальных массивов (global arrays). Данные хранятся в виде многомерных разреженных массивов, индексами которых могут быть строки произвольной длины. Это обеспечивает:
- Высокую скорость доступа к данным (особенно при последовательном чтении).
- Эффективное хранение разреженных данных (например, медицинских записей с пропусками).
- Встроенную поддержку транзакций и блокировок.
¶Интерпретируемый язык
MUMPS является интерпретируемым языком, что упрощает отладку и модификацию кода в реальном времени. Код компилируется в байт-код при первом выполнении. Основные характеристики:
- Динамическая типизация (переменные не объявляются, тип определяется значением).
- Строки и числа — единственные типы данных (числа автоматически преобразуются в строки при необходимости).
- Встроенные операции работы со строками (поиск, замена, разбиение).
- Отсутствие явных конструкций циклов (используется оператор
FORс неявным шагом).
¶Многопользовательская архитектура
MUMPS изначально проектировался для многопользовательской работы. Каждый процесс (job) выполняется в собственном адресном пространстве, но все процессы имеют доступ к общим глобальным массивам. Это обеспечивает:
- Одновременную работу сотен и тысяч пользователей.
- Встроенные механизмы блокировок (
LOCK) для предотвращения конфликтов. - Автоматическое восстановление после сбоев (журналирование транзакций).
¶Синтаксис и примеры
¶Базовые конструкции
MUMPS использует компактный синтаксис, основанный на однобуквенных командах и операторах. Ключевые команды:
SET— присвоение значения переменной.WRITE— вывод данных.READ— ввод данных.FOR— цикл.IF/ELSE— условные операторы.GOTO— безусловный переход.DO— вызов подпрограммы.
Пример программы «Hello, World!»: ``mumps WRITE "Hello, World!" ``
Пример вычисления суммы чисел от 1 до 10: ``mumps SET SUM=0 FOR I=1:1:10 DO . SET SUM=SUM+I WRITE "Sum = ",SUM ``
¶Работа с глобальными массивами
Глобальные массивы (обозначаются символом ^) хранятся в базе данных и доступны всем процессам. Пример: ``mumps SET ^Patient("Иванов","Иван")="01.01.1980" WRITE ^Patient("Иванов","Иван") ``
¶Применение
¶Медицина
MUMPS является основой многих крупных медицинских информационных систем:
- VistA (Veterans Health Information Systems and Technology Architecture) — система, используемая Министерством по делам ветеранов США (VA) для управления медицинскими записями более 9 миллионов ветеранов.
- EPIC — одна из крупнейших систем электронных медицинских карт в США, частично использующая MUMPS.
- Cerner — системы управления больницами.
¶Финансы и банки
MUMPS применяется в банковских системах, требующих высокой производительности и надежности:
- Fiserv — один из крупнейших мировых поставщиков финансовых технологий, использующий GT.M.
- HSBC — банк, использующий Cache для обработки транзакций.
¶Другие области
- Логистика — системы управления складскими запасами.
- Телекоммуникации — биллинговые системы.
- Государственные учреждения — системы социального обеспечения.
¶Критика и ограничения
¶Недостатки
- Сложность обучения — компактный синтаксис и отсутствие современных конструкций (например, объектно-ориентированное программирование появилось поздно).
- Ограниченная переносимость — хотя существуют стандарты, реализации могут существенно различаться.
- Отсутствие развитых инструментов разработки — современные IDE и отладчики для MUMPS менее распространены по сравнению с Java или C#.
- Устаревшая архитектура — встроенная база данных не поддерживает реляционные модели (SQL поддерживается только через надстройки).
¶Преимущества
- Высокая производительность — особенно в задачах с интенсивными транзакциями.
- Надежность — десятилетия эксплуатации в критически важных системах.
- Эффективность хранения — разреженные массивы экономят память.
- Масштабируемость — поддержка тысяч одновременных пользователей.
¶Интересные факты
- Название «MUMPS» не связано с эпидемическим паротитом (свинкой), а является аббревиатурой.
- MUMPS считается одним из старейших языков программирования, используемых до сих пор (наряду с COBOL, FORTRAN и Lisp).
- В 2010-х годах компания InterSystems выпустила IRIS Data Platform, которая объединяет MUMPS, SQL и объектно-ориентированное программирование, а также поддерживает облачные технологии.
- Язык используется в системе VistA, которая была признана одной из самых эффективных медицинских информационных систем в мире.
¶Источники
- Стандарт ANSI X11.1-1995 (MUMPS).
- Документация InterSystems Cache и IRIS.
- «MUMPS Language Standard» — MDC (MUMPS Development Committee).
- «The MUMPS Programming Language» — Richard F. Walters.
- «VistA: The Veterans Health Information Systems and Technology Architecture» — VA (U.S. Department of Veterans Affairs).
- «GT.M Programmer's Guide» — FIS (Fiserv).
