Введение

Язык программирования, язык программирования MUMPS ("Massachusetts General Hospital Utility Multi Programming System"), или M, – это императивный язык программирования высокого уровня с интегрированной базой данных типа «ключ-значение» для обработки транзакций. Он был первоначально разработан в Массачусетской больнице для управления медицинскими записями пациентов и информационными системами больничных лабораторий. Технология MUMPS впоследствии стала преобладающей базой данных для систем медицинской информации и электронных медицинских карт в Соединенных Штатах. Информационные системы на базе MUMPS используются более чем в 40% больниц США, во всех федеральных больницах и клиниках США и обеспечивают медицинское обслуживание более чем 54% пациентов в США.

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

1960-е-1970-е годы - Бытие

MUMPS был разработан Нилом Паппалардо, Робертом А. Гринсом и Куртом Марблом в лаборатории доктора Окто Барнетта в Массачусетской больнице общего профиля (MGH) в Бостоне в 1966 и 1967 годах. Продавался параллельно после выпуска в 1978 году. Как аппаратные семейства, так и версии MUMPS были доступны до 1995 года от DEC. DSM 11 был портирован на Alpha в двух вариантах: DSM для OpenVMS и DSM для Ultrix. InterSystems с ISM (InterSystems M) на VMS (M/VX), ISM 11, позднее M/11+ на платформе PDP 11 (1978), M/PC на MS DOS, M/DG на Data General, M/VM на IBM VM/CMS и M/UX на различных Unix. Greystone Technology Corporation, основанная в 1980 году, предлагала компилируемую версию под названием GT.M для AIX, HP UX, UNIX и OpenVMS. DataTree Inc. с продуктом на базе Intel PC под названием DTM (1982). Micronetics Design Corporation (1980) с линейкой продуктов под названием MSM: MSM PC, MSM/386, MS UNIX, MSM NT, MSM/VM для IBM, платформы VAX/VMS и платформы OpenVMS Alpha. Computer Consultants (позже переименованная в MGlobal), компания из Хьюстона, первоначально разработала CCSM для 6800, затем для 6809, и в конечном итоге портировала её на 68000, что впоследствии привело к созданию MacMUMPS – продукта для Mac OS. Они также работали над реализацией MGM MUMPS. MGlobal также портировала свою реализацию на платформу DOS. MGlobal MUMPS был первым коммерческим MUMPS для IBM PC и единственной реализацией для классической Mac OS. Tandem Computers разработала реализацию для своих отказоустойчивых компьютеров. IBM некоторое время продавала реализацию MUMPS под названием MUMPS/VM, которая работала как виртуальная машина поверх VM/370. В этот период также наблюдалась значительная активность MDC. Второй пересмотр стандарта ANSI для MUMPS (X11.1 1984) был утвержден 15 ноября 1984 года.

1990-е годы

11 ноября 1990 года была утверждена третья редакция стандарта ANSI (X11.1 1990). В 1992 году этот же стандарт был принят как стандарт ISO 11756–1992. Использование "M" в качестве альтернативного названия языка было одобрено примерно в то же время. 8 декабря 1995 года ANSI утвердила четвертую редакцию стандарта (X11.1 1995), а в 1999 году он был принят ISO как ISO 11756:1999 и опубликован ANSI. В 1998 году MDC завершила дальнейшую переработку стандарта, но она не была представлена в ANSI для утверждения. В 1999 году был утвержден последний стандарт M (ISO/IEC 11756:1999). ISO подтвердила его актуальность в 2020 году. Вместе с ISO/IEC 15851:1999 (Open MUMPS Interconnect) и ISO/IEC 15852:1999 – интерфейсом программирования приложений MUMPS для окон.

Имя

Главному исполнительному директору InterSystems не нравилось название MUMPS, и он считал, что оно является серьезным препятствием для маркетинга. Таким образом, некоторая склонность к M стала ассоциироваться с поддержкой InterSystems. Стандарт ANSI 1990 года допускал использование как M, так и MUMPS, и после общемирового обсуждения в 1992 году группы пользователей Mumps официально сменили название на M. Этот спор также отражал соперничество между организациями (Ассоциация технологий M, Комитет по разработке MUMPS, комитеты по стандартам ANSI и ISO) в отношении того, кто определяет "официальное" название языка. По состоянию на 2020 год ISO по-прежнему упоминает как M, так и MUMPS в качестве официально признанных названий. Массачусетская общая больница зарегистрировала "MUMPS" как товарный знак в USPTO 28 ноября 1971 года и продлила регистрацию 16 ноября 1992 года, но позволила ей истечь 30 августа 2003 года.

Критика

Некоторые аспекты синтаксиса MUMPS сильно отличаются от синтаксиса более современных языков, что может вызывать путаницу, хотя эти аспекты различаются в разных версиях языка. В некоторых версиях пробелы в выражениях недопустимы, так как они завершают оператор: 2 + 3 – ошибка, и это нужно записывать как 2+3. Все операторы имеют одинаковый приоритет и являются левоассоциативными (2+3*10 вычисляется как 50). Операторами для "меньше или равно" и "больше или равно" являются '>' и '<' (то есть оператор логического отрицания ' плюс строгий оператор сравнения в противоположном направлении), хотя некоторые версии допускают использование более стандартных <= и >= соответственно. Точки (.) используются для отступов строк в блоке DO, а не пробелы. Команда ELSE не требует соответствующего IF, поскольку она работает, проверяя значение во встроенной системной переменной $test. Правила области видимости в MUMPS более гибкие, чем в других современных языках. Объявленные локальные переменные используют стек для определения области видимости. Рутина обычно может видеть все объявленные локальные переменные рутин, находящихся ниже неё в стеке вызовов, и рутины не могут помешать вызываемым ими рутинам изменять их объявленные локальные переменные, если только вызывающая рутина вручную не создаст новый уровень стека (do) и не создаст псевдонимы для каждой переменной, которую необходимо защитить (. new x,y) перед вызовом любых дочерних рутин. И наоборот, необъявленные переменные (переменные, создаваемые при использовании, а не при объявлении) имеют область видимости для всех рутин, работающих в одном процессе, и остаются в области видимости до завершения программы. Поскольку ссылки на базы данных MUMPS отличаются от ссылок на внутренние переменные только префиксом caret, очень легко непреднамеренно изменить базу данных или даже удалить "таблицу" базы данных.