MUMPS («Многопрограммная система для больниц общего профиля Массачусетса»), или M , представляет собой высокопроизводительную базу данных типа "ключ-значение" для обработки транзакций со встроенным языком программирования . Первоначально он был разработан в Массачусетской больнице общего профиля для управления информационными системами больничных лабораторий.
Парадигма | Императивная , процедурная |
---|---|
Разработано | Нил Паппалардо |
Впервые появился | 1966 |
Стабильный выпуск | ANSI X11.1-1995 / 8 декабря 1995 г. |
Печатная дисциплина | Бестиповый |
Операционные системы | Кроссплатформенность |
Под влиянием | |
JOSS | |
Под влиянием | |
PSL , Caché ObjectScript |
С тех пор технология MUMPS расширилась и стала преобладающей базой данных для информационных систем здравоохранения и электронных медицинских карт в Соединенных Штатах. Информационные системы на основе MUMPS используются более чем в 40% больниц в США, во всех федеральных больницах и клиниках США и предоставляют медицинские информационные услуги более чем 54% пациентов в США [1]
Уникальной особенностью технологии MUMPS является интегрированный язык базы данных, обеспечивающий прямой высокоскоростной доступ для чтения и записи к постоянному хранилищу на диске. [2] Это обеспечивает тесную интеграцию неограниченного количества приложений в единой базе данных и обеспечивает чрезвычайно высокую производительность и надежность в качестве системы обработки транзакций в режиме онлайн .
Обзор
MUMPS - это язык, предназначенный для создания приложений баз данных. Были включены дополнительные языковые функции, чтобы помочь программистам создавать приложения с минимальными вычислительными ресурсами. Исходные реализации были интерпретированы , хотя современные реализации могут быть полностью или частично скомпилированы . Отдельные «программы» запускаются в «разделах» памяти . Ранние разделы памяти MUMPS были ограничены 2048 байтами, поэтому агрессивная аббревиатура значительно облегчила мультипрограммирование на оборудовании с сильно ограниченными ресурсами, потому что более одного задания MUMPS могло уместиться в очень небольшой объем памяти, существующий на оборудовании в то время. Еще одной особенностью языкового дизайна была возможность предоставлять многопользовательские системы. Слово « M конечного P rogramming» в аббревиатуре указует на это. Даже самые ранние машины с MUMPS поддерживали одновременное выполнение нескольких заданий. С переходом от мини-компьютеров к микрокомпьютерам несколько лет спустя даже «однопользовательский ПК» с одним 8-битным процессором и 16 или 64 КБ памяти мог поддерживать нескольких пользователей, которые могли подключаться к нему из (не графические ) видеотерминалы .
Поскольку изначально памяти было мало, при разработке языка MUMPS ценился очень сжатый код. Таким образом, каждая команда или имя функции MUMPS может быть сокращено от одной до трех букв, например, Quit (выход из программы) как Q, $ P = функция $ Piece, R = команда чтения, $ TR = функция $ Translate. Пробелы и маркеры конца строки важны в MUMPS, потому что область видимости строки способствовала тому же лаконичному дизайну языка. Таким образом, одна строка программного кода может выражать с помощью нескольких символов идею, для которой другим языкам программирования может потребоваться в 5-10 раз больше символов. Аббревиатура была общей чертой языков, разработанных в этот период (например, FOCAL-69 , ранние BASIC, такие как Tiny BASIC и т. Д.). Прискорбным побочным эффектом этого, в сочетании с ранней необходимостью писать минималистичный код, было то, что программисты MUMPS обычно не комментировали код и использовали обширные сокращения. Это означало, что даже опытный программист MUMPS не мог просто пролистать страницу кода, чтобы увидеть его функцию, но должен был проанализировать его построчно.
Взаимодействие с базой данных прозрачно встроено в язык. Язык MUMPS предоставляет иерархическую базу данных, состоящую из постоянных разреженных массивов , которые неявно «открываются» для каждого приложения MUMPS. Все имена переменных с префиксом каретки («^») используют постоянное (вместо ОЗУ) хранилище, сохранят свои значения после выхода из приложения и будут видны (и могут быть изменены) другими запущенными приложениями. Переменные, использующие это общее и постоянное хранилище, называются глобальными переменными в MUMPS, потому что область видимости этих переменных «глобально доступна» для всех заданий в системе. Более недавнее и более распространенное использование имени «глобальные переменные» в других языках - это более ограниченная область видимости имен, исходя из того факта, что переменные с незаданной областью «глобально» доступны для любых программ, работающих в одном процессе, но не используются совместно несколько процессов. Режим MUMPS Storage (то есть глобальные объекты, хранящиеся в виде постоянных разреженных массивов) придает базе данных MUMPS характеристики документно-ориентированной базы данных . [3]
Все имена переменных, не начинающиеся с символа вставки («^»), являются временными и частными. Как и глобальные переменные, у них также есть иерархическая модель хранения, но они «доступны локально» только для одного задания, поэтому их называют «локальными». И «глобальные», и «локальные» могут иметь дочерние узлы (называемые индексами в терминологии MUMPS). Подстрочные индексы не ограничиваются цифрами - любой символ ASCII или группа символов может быть идентификатором подстрочного индекса. Хотя это не редкость для современных языков, таких как Perl или JavaScript, в конце 1970-х это было очень необычной функцией. Эта возможность не была повсеместно реализована в системах MUMPS до стандарта ANSI 1984 года, поскольку стандартом требовались только канонически числовые индексы. [4] Таким образом, переменная с именем «Автомобиль» может иметь индексы «Дверь», «Рулевое колесо» и «Двигатель», каждый из которых может содержать значение и иметь собственные индексы. Переменная ^ Car («Дверь») может иметь, например, индекс вложенной переменной «Цвет». Таким образом, вы могли бы сказать
НАБОР ^ Автомобиль ("Дверь", "Цвет") = "СИНИЙ"
для изменения вложенного дочернего узла ^ Car. В терминах MUMPS «Цвет» - это второй индекс переменной ^ Car (имена дочерних узлов и сами дочерние узлы также называются нижними индексами). Иерархические переменные похожи на объекты со свойствами во многих объектно-ориентированных языках. Кроме того, дизайн языка MUMPS требует, чтобы все индексы переменных автоматически сохранялись в отсортированном порядке. Числовые индексы (включая числа с плавающей запятой) сохраняются от наименьшего к наибольшему. Все нечисловые индексы хранятся в алфавитном порядке после чисел. В терминологии MUMPS это канонический порядок . Используя только неотрицательные целые индексы, программист MUMPS может эмулировать тип данных массивов из других языков. Хотя MUMPS изначально не предлагает полный набор функций СУБД, таких как обязательные схемы, несколько систем СУБД были построены на его основе, которые предоставляют разработчикам приложений функции плоских файлов, реляционных и сетевых баз данных .
Кроме того, существуют встроенные операторы, которые обрабатывают строку с разделителями (например, значения, разделенные запятыми ) как массив. Ранние программисты MUMPS часто сохраняли структуру связанной информации в виде строки с разделителями, анализируя ее после того, как она была прочитана; это сэкономило время доступа к диску и дало значительное преимущество в скорости на некотором оборудовании.
MUMPS не имеет типов данных. Числа можно рассматривать как строки цифр, или строки можно рассматривать как числа с помощью числовых операторов (с принуждением , в терминологии MUMPS). Однако принуждение может иметь некоторые странные побочные эффекты. Например, при принуждении строки синтаксический анализатор превращает как можно большую часть строки (начиная слева) в число, а затем отбрасывает оставшуюся часть. Таким образом, утверждение IF 20<"30 DUCKS"
оценивается как TRUE
в MUMPS.
Другие функции языка призваны помочь приложениям MUMPS взаимодействовать друг с другом в многопользовательской среде. Блокировки базы данных, идентификаторы процессов и атомарность транзакций обновления базы данных - все это требуется для стандартных реализаций MUMPS.
В отличие от языков в традициях Си или Вирта , некоторые пробелы между операторами MUMPS имеют большое значение. Один пробел отделяет команду от ее аргумента, а пробел или новая строка отделяет каждый аргумент от следующего токена MUMPS. Команды, которые не принимают аргументов (например, ELSE
), требуют двух следующих пробелов. Идея состоит в том, что один пробел отделяет команду от (несуществующего) аргумента, следующий отделяет «аргумент» от следующей команды. Новые строки также важны; an IF
, ELSE
или FOR
команда обрабатывает (или пропускает) все остальное до конца строки. Чтобы эти операторы управляли несколькими строками, вы должны использовать DO
команду для создания блока кода.
"Привет мир!" пример
Простое "Hello, World!" программа в MUMPS может быть:
Привет() напишите «Привет, мир!» ,! покидать
и будет запущен из командной строки MUMPS с командой do ^hello
. Поскольку MUMPS позволяет объединять команды в одну строку, и поскольку команды могут быть сокращены до одной буквы, эту процедуру можно было бы сделать более компактной:
hello () w "Привет, мир!" ,! q
Знак " ,!
" после текста создает новую строку.
История
Бытие
MUMPS был разработан Нилом Паппалардо , Робертом Гринесом и Куртом Марблом в лаборатории доктора Окто Барнетта в Массачусетской больнице общего профиля (MGH) в Бостоне в 1966 и 1967 годах. Позднее он был переписан техническими руководителями Деннисом «Дэном» Бревиком и Полом Стайлосом [ 5] из DEC в 1970 и 1971 годах.
Первоначальная система MUMPS, как и Unix несколько лет спустя, была построена на DEC PDP-7 . Окто Барнетт и Нил Паппалардо также участвовали в планировании MGH для больничной информационной системы, получили обратно совместимый PDP-9 и начали использовать MUMPS при приеме в больницу и при составлении отчетов о лабораторных испытаниях. MUMPS был тогда интерпретируемым языком , но даже тогда он включал иерархическую файловую систему базы данных для стандартизации взаимодействия с данными и абстрактных дисковых операций, поэтому они выполнялись только самим языком MUMPS.
Некоторые аспекты свинки можно проследить из RAND Corporation «s JOSS через BBN » s TELCOMP и STRINGCOMP . Команда MUMPS решила включить переносимость между машинами в качестве цели проектирования.
Многозадачность была расширенной функцией языка MUMPS, которая не поддерживалась широко в операционных системах или компьютерном оборудовании того времени . Хотя разделение времени на мэйнфреймах становилось все более распространенным явлением в таких системах, как Multics , на большинстве мини-компьютеров не выполнялись параллельные программы, а многопоточность была вообще недоступна. Даже на мэйнфреймах вариант пакетной обработки, при котором программа выполнялась до конца, был наиболее распространенной реализацией для операционной системы с несколькими программами.
Прошло несколько лет, прежде чем была разработана Unix. Отсутствие оборудования для управления памятью также означало, что любая многопроцессорная обработка чревата возможностью того, что указатель памяти может изменить какой-либо другой процесс. Программы MUMPS вообще не имеют стандартного способа обращения к памяти напрямую, в отличие от языка C , поэтому, поскольку многозадачность обеспечивалась языком, а не какой-либо программой, написанной на этом языке, было невозможно иметь риск, существовавший для другие системы.
Dan Brevik «s [6] Декабрь система MUMPS-15 была адаптирована к DEC PDP-15 , где он жил в течение некоторого времени. Впервые он был установлен в системе управления данными здравоохранения в Денвере в мае 1971 года. [7] Переносимость оказалась полезной, и MUMPS получил правительственный исследовательский грант, и поэтому MUMPS стал общественным достоянием, что было требованием для получения грантов. MUMPS вскоре был перенесен на ряд других систем, включая популярные DEC PDP-8 , Data General Nova, а также на DEC PDP-11 и миникомпьютер Artronix PC12 . Слухи о MUMPS распространились в основном через медицинское сообщество и получили широкое распространение, часто изменяясь на местном уровне для их собственных нужд.
К началу 1970-х было множество разнообразных реализаций MUMPS на различных аппаратных платформах. Еще одним примечательной платформой была Пол Стилоса [8] Декабрь MUMPS-11 на PDP-11, и МЕДИТЕК «s MIIS . Осенью 1972 года многие пользователи MUMPS посетили конференцию в Бостоне, которая стандартизировала тогда расколотый язык и для этого создали Группу пользователей MUMPS и Комитет по развитию MUMPS (MDC). Эти усилия оказались успешными; стандарт был завершен к 1974 г. и утвержден 15 сентября 1977 г. как стандарт ANSI , X11.1-1977. Примерно в то же время DEC выпустила DSM-11 (цифровой стандарт MUMPS) для PDP-11. Это быстро доминировало на рынке и стало эталонной реализацией того времени. Кроме того, InterSystems продавала ISM-11 для PDP-11 (который был идентичен DSM-11).
1980-е
В начале 1980-х годов несколько поставщиков выпустили на рынок платформы на базе MUMPS, соответствующие стандарту ANSI. Наиболее значимыми были:
- Digital Equipment Corporation с DSM (Цифровой стандарт MUMPS). DSM-11 был заменен VAX-11 DSM [9] для операционной системы VAX / VMS и был перенесен на Alpha в двух вариантах: DSM для OpenVMS и как DSM для Ultrix .
- InterSystems с ISM (InterSystems M) на VMS (M / VX), M / 11 + на платформе PDP-11, M / PC на MS-DOS, M / DG на Data General , M / VM на IBM VM / CMS, и M / UX в различных Unix.
Другие компании разработали важные реализации MUMPS:
- Грейстон Technology Corporation с скомпилированной версией под названием GT.M .
- DataTree Inc. с продуктом на базе ПК Intel под названием DTM .
- Micronetics Design Corporation с линейкой продуктов под названием MSM для платформ UNIX и Intel PC (позже перенесенная на операционную систему IBM VM , платформы 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 разработала реализацию для своих отказоустойчивых компьютеров. [10]
В этот период также была отмечена значительная активность MDC. Вторая редакция стандарта ANSI для MUMPS (X11.1-1984) была утверждена 15 ноября 1984 г.
1990-е годы
- 11 ноября 1990 г. была утверждена третья редакция стандарта ANSI (X11.1-1990).
- В 1992 году тот же стандарт был принят как стандарт ISO 11756-1992. Примерно в то же время было одобрено использование M в качестве альтернативного названия языка.
- 8 декабря 1995 года четвёртая пересмотр стандарта ( X11.1-1995 ) был утвержден ANSI, и ISO в 1999 году в качестве стандарта ISO 11756: 1999 , который также был опубликованный ANSI . MDC завершил новую редакцию стандарта в 1998 году, но она не была представлена в ANSI для утверждения.
- Был выпущен Open M от InterSystems для Windows / NT, а также Open M для Alpha / OSF и Alpha / VMS (их первые 64-разрядные реализации для 64-разрядного процессора Alpha).
- В 1997 году поддержка Unicode была добавлена в Caché 3.0 от InterSystems.
2000-е
- К 2000 году поставщик промежуточного программного обеспечения InterSystems стал доминирующим игроком на рынке MUMPS, купив несколько других поставщиков. Первоначально они приобрели DataTree Inc. в начале 1990-х годов. А 30 декабря 1995 года InterSystems приобрела линейку продуктов DSM у DEC. [11] InterSystems объединила эти продукты в единую линейку продуктов, обозначив их на нескольких аппаратных платформах как OpenM . В 1997 году InterSystems выпустила новый продукт под названием Caché . Это было основано на их продукте ISM, но с влиянием других реализаций. 21 июня 1998 г. активы Micronetics Design Corporation были также приобретены InterSystems. InterSystems остается доминирующим поставщиком MUMPS, продавая Caché разработчикам MUMPS, которые пишут приложения для различных операционных систем.
- Реализация GT.M компании Greystone Technology Corporation была продана компании Sanchez Computer Associates (ныне часть FIS ) в середине 1990-х годов. 7 ноября 2000 г. Санчес сделал GT.M для Linux доступным по лицензии GPL [12], а 28 октября 2005 г. GT.M для OpenVMS и Tru64 UNIX также стали доступны по лицензии AGPL. [13] GT.M по-прежнему доступен на других платформах UNIX по традиционной лицензии.
- В течение 2000 года Рэй Ньюман и другие выпустили MUMPS V1, реализацию MUMPS (первоначально на FreeBSD), аналогичную DSM-11. С тех пор MUMPS V1 был перенесен на Linux , Mac OS X и Windows (с использованием cygwin). [14] Изначально только для процессора x86, MUMPS V1 теперь был перенесен на Raspberry Pi.
- Новейшая реализация MUMPS, выпущенная в апреле 2002 года, является производным от MSM под названием M21 от Real Software Company из Регби, Великобритания .
- Существует также несколько реализаций MUMPS с открытым исходным кодом, включая некоторые исследовательские проекты. Наиболее заметными из них являются Mumps / II доктора Кевина О'Кейна (заслуженный профессор Университета Северной Айовы ) и студенческий проект. Доктор О'Кейн также портировал интерпретатор на Mac OS X. [15]
- Один из первых создателей языка MUMPS, Нил Паппалардо, основал компанию под названием MEDITECH . Они расширили и построили на языке MUMPS, назвав новый язык MIIS (а позже и другой язык, названный MAGIC). В отличие от InterSystems, MEDITECH больше не продает промежуточное ПО, поэтому MIIS и MAGIC теперь используются в MEDITECH только внутри компании.
- 6 января 2005 г., а затем еще раз 25 июня 2010 г. ISO подтвердила свои стандарты, связанные с MUMPS: ISO / IEC 11756: 1999, языковой стандарт , ISO / IEC 15851: 1999, Open MUMPS Interconnect и ISO / IEC 15852: 1999. , Интерфейс программиста оконных приложений MUMPS .
Текущие пользователи приложений MUMPS
Федеральные информационные системы здравоохранения
Министерство по делам ветеранов США (ранее - Управление по делам ветеранов) было одним из первых, кто начал использовать язык MUMPS. Их разработка (и последующий вклад в бесплатную кодовую базу приложения MUMPS) оказали влияние на многих медицинских пользователей по всему миру. В 1995 году система приема / отслеживания / выписки пациентов Департамента по делам ветеранов, децентрализованная больничная компьютерная программа (DHCP), была удостоена Смитсоновской премии Computerworld за лучшее использование информационных технологий в медицине. В июле 2006 года Департамент по делам ветеранов (VA) / Управление здравоохранения ветеранов (VHA) был удостоен награды за инновации в американском правительстве, представленной Институтом пепла Школы государственного управления им. Джона Ф. Кеннеди при Гарвардском университете за расширение DHCP в архитектуре информационных систем и технологий здравоохранения для ветеранов ( VistA ). Почти вся больничная система VA в Соединенных Штатах, Индийская служба здравоохранения и основные части больничной системы CHCS Министерства обороны используют базы данных MUMPS для отслеживания клинических данных.
Коммерческие информационные системы здравоохранения
Другие медицинские ИТ-компании, использующие MUMPS, включают:
- Эпос
- МЕДИТЕХ
- GE Healthcare (ранее IDX Systems and Centricity )
- AmeriPath (часть Quest Diagnostics)
- Центр ухода
- Allscripts
- Coventry Health Care
- EMIS Health
- Информационные системы Sunquest (ранее Misys Healthcare [16] ).
- Нетсмарт
Справочные лаборатории
Многие справочные лаборатории, такие как DASA, Quest Diagnostics , [17] и Dynacare, используют программное обеспечение MUMPS, написанное или основанное на коде Antrim Corporation. Антрим был приобретен компанией Misys Healthcare (ныне Sunquest Information Systems ) в 2001 году [18].
Интернет-банкинг и торговые системы
MUMPS также широко используется в финансовых приложениях. MUMPS быстро завоевал популярность в финансовом секторе и используется во многих банках и кредитных союзах. Он используется TD Ameritrade, а также Банком Англии и Barclays Bank . [19] [20] [21]
Текущие реализации
С 2005 года наиболее популярными реализациями MUMPS были Greystone Technology MUMPS (GT.M) от Fidelity National Information Services и Caché от Intersystems Corporation. Европейское космическое агентство 13 мая 2010 г. объявило, что будет использовать базу данных InterSystems Caché для поддержки миссии Gaia . Цель этой миссии - нанести на карту Млечный Путь с беспрецедентной точностью. [22] InterSystems постепенно отказывается от Caché в пользу Iris. [23]
Другие текущие реализации включают:
- M21
- YottaDB
- MiniM
- Эталонный стандарт M
- FreeM
Краткое изложение основных языковых функций
ANSI X11.1-1995 дает полное формальное описание языка; аннотированная версия этого стандарта доступна в Интернете. [24]
Типы данных : Существует один универсальный тип данных , который неявно принуждать к строке, целое число, или типов данных с плавающей точкой в качестве контекста.
Булевы (называемые истинностные значения в эпидемическом паротите): В IF команда и другой синтаксис , который имеет выражение оцениваемое как условия, любое значение строки вычисляются как числовое значение , и, если это ненулевое значение, то это интерпретируется как значение True. aдает 1, если a меньше b, в противном случае - 0.
Заявления : Нет. Все переменные динамически создаются при первом присвоении значения.
Строки : важные синтаксические объекты, в отличие от их статуса в языках программирования на C или Pascal. Несколько операторов в строке разрешены и являются обычным явлением. Область действия любой команды IF, ELSE и FOR - «остаток текущей строки».
Чувствительность к регистру : в командах и встроенных функциях регистр не учитывается. Напротив, имена и метки переменных чувствительны к регистру. Нет особого значения для прописных и строчных букв и нескольких широко используемых соглашений. Знак процента (%) разрешен в качестве первого символа переменных и меток.
Постусловия : выполнение практически любой команды можно контролировать, поставив после нее двоеточие и выражение истинности. SET:N<10 A="FOO"
устанавливает A в "FOO", если N меньше 10; DO:N>100 PRINTERR,
выполняет PRINTERR, если N больше 100. Эта конструкция предоставляет условное выражение, область действия которого меньше полной строки.
Сокращение : почти все команды и собственные функции можно сокращать до одного, двух или трех символов.
Зарезервированные слова : Нет. Поскольку MUMPS интерпретирует исходный код по контексту, нет необходимости в зарезервированных словах. Вы можете использовать имена языковых команд в качестве переменных, поэтому следующий код MUMPS является совершенно допустимым:
ГРЕПТИС () NEW SET, NEW, THEN, IF, KILL, QUIT SET IF = "KILL", SET = "11", KILL = "l1", QUIT = "RETURN", THEN = "KILL" ЕСЛИ ЕСЛИ = ТО ДАЙТЕ ТОГДА ВЫЙТИ: $ ВЫЙТИ ВЫЙТИ ВЫЙТИ; (покидать)THEN IF IF, SET & KILL SET SET = SET + KILL ВЫЙТИ
MUMPS можно сделать более запутанным с помощью синтаксиса сокращенного оператора, как показано в этом кратком примере, полученном из приведенного выше примера:
ГРЕПТИС () NS, N, T, I, K, QSI = "K", S = "11", K = "l1", Q = "R", T = "K" II = TDT Q: $ QQQTII, S & K SS = S + KQ
Массивы : создаются динамически, хранятся в виде B-деревьев , являются разреженными (т. Е. Почти не используют места для отсутствующих узлов), могут использовать любое количество индексов, а индексы могут быть строковыми или числовыми (включая числа с плавающей запятой). Массивы всегда автоматически сохраняются в отсортированном порядке, поэтому никогда не возникает необходимости сортировать, упаковывать, переупорядочивать или иным образом реорганизовывать базу данных. Встроенные функции, такие как $ DATA, $ ORDER, $ NEXT (не рекомендуется) и $ QUERY, обеспечивают эффективное изучение и обход основной структуры массива на диске или в памяти.
для i = 10000: 1: 12345 установите sqtable (i) = i * iустановить адрес ("Smith", "Daniel") = "[email protected]"
Локальные массивы : имена переменных, не начинающиеся с символа символа "^", сохраняются в памяти по процессу, являются частными для процесса создания и истекают после завершения процесса создания. Доступное хранилище зависит от реализации. Для тех реализаций, в которых используются разделы, он ограничен размером раздела (небольшой раздел может быть 32 КБ). Для других реализаций это может быть несколько мегабайт.
Глобальные массивы : ^abc, ^def
. Они хранятся на диске, доступны для всех процессов и остаются постоянными, когда процесс создания завершается. Очень большие глобальные объекты (например, сотни гигабайт) практичны и эффективны в большинстве реализаций. Это основной механизм "базы данных" MUMPS. Он используется вместо вызова операционной системы для создания, записи и чтения файлов.
Косвенность : @VBL
может использоваться во многих контекстах и эффективно заменяет содержимое VBL другим оператором MUMPS. SET XYZ="ABC" SET @XYZ=123
устанавливает для переменной ABC значение 123. SET SUBROU="REPORT" DO @SUBROU
выполняет подпрограмму REPORT. Эта замена допускает ленивую оценку и позднее связывание, а также является эффективным эквивалентом «указателей» в других языках.
Функция Piece : разбивает переменные на сегментированные части, руководствуясь заданной пользователем разделительной строкой (иногда называемой «разделителем»). Те, кто знает awk , найдут это знакомым. $PIECE(STRINGVAR,"^",3)
означает «третью часть строки STRINGVAR, разделенную кареткой». Функция Piece также может выступать в качестве цели назначения (команда SET).
$PIECE("world.std.com",".",2)
дает "std".
После
УСТАНОВИТЬ X = "[email protected]"
SET $P(X,"@",1)="office"
превращает X в [email protected] (обратите внимание, что $ P эквивалентно $ PIECE и может быть записано как таковое).
Функция заказа : эта функция обрабатывает свой ввод как структуру и находит следующий существующий индекс, который имеет ту же структуру, за исключением последнего индекса. Он возвращает отсортированное значение, упорядоченное после введенного в качестве входных данных. (При этом ссылка на массив рассматривается как данные с адресацией по содержимому, а не как адрес значения.)
Установите 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 и прочее (i), где i последовательно равняется 6, 10 и 15.
Для итерации базы данных функция Order возвращает следующий ключ для использования.
GTM> S n = ""GTM> S n = $ заказ (^ nodex (n))GTM> zwr nn = "здание"GTM> S n = $ заказ (^ nodex (n))GTM> zwr nn = "имя: gd"GTM> S n = $ заказ (^ nodex (n))GTM> zwr nn = "% kml: guid"
Многопользовательский / многозадачный / многопроцессорный : MUMPS поддерживает одновременную работу нескольких пользователей и процессов, даже если базовая операционная система этого не делает (например, MS-DOS). Кроме того, существует возможность указать среду для переменной, например, указав имя компьютера в переменной (как в SET ^|"DENVER"|A(1000)="Foo"
), что может позволить вам получить доступ к данным на удаленных машинах.
Критика
Некоторые аспекты синтаксиса MUMPS сильно отличаются от синтаксиса более современных языков, что может вызвать путаницу, хотя эти аспекты различаются между разными версиями языка. В некоторых версиях не допускается использование пробелов в выражениях, так как они завершают оператор: 2 + 3
это ошибка, и его необходимо записать 2+3
. Все операторы имеют одинаковый приоритет и левоассоциативны ( 2+3*10
до 50). Операторами «меньше или равно» и «больше или равно» являются '>
и '<
(то есть, оператор логического отрицания '
плюс оператор строгого сравнения), хотя в некоторых версиях допускается использование более стандартного <=
и >=
соответственно. Точки ( .
) используются для отступа строк в блоке DO, а не для пробелов. Команде ELSE не нужен соответствующий IF, так как она проверяет значение встроенной системной переменной $test
.
Правила области видимости MUMPS более либеральны, чем другие современные языки. Объявленные локальные переменные ограничиваются стеком. Подпрограмма обычно может видеть все объявленные локальные do
переменные подпрограмм под ней в стеке вызовов, и подпрограммы не могут помешать вызываемым ими подпрограммам изменять свои объявленные локальные переменные , если вызывающий объект вручную не создает новый уровень стека ( ) и не применяет псевдонимы каждой из переменных, которые они хотят. to protect ( . new x,y
) перед вызовом дочерних подпрограмм. Напротив, необъявленные переменные (переменные, созданные с их использованием, а не объявлением) входят в область видимости всех подпрограмм, выполняемых в одном процессе, и остаются в области видимости до выхода из программы.
Поскольку ссылки на базу данных MUMPS отличаются от ссылок на внутренние переменные только префиксом каретки, очень легко непреднамеренно изменить базу данных или даже удалить «таблицу» базы данных. [25]
Споры об именах "MUMPS" и "M"
Все следующие позиции могут поддерживаться и поддерживаются знающими людьми в разное время:
- Название языка стало M в 1993 году, когда Ассоциация M Technology Association приняла его.
- Название стало M 8 декабря 1995 г. с одобрения ANSI X11.1-1995.
- И M, и MUMPS - официально признанные имена.
- M - это всего лишь «альтернативное имя» или «псевдоним» для языка, а MUMPS по-прежнему является официальным названием.
Некоторые разногласия возникли в ответ на решительную защиту M со стороны одного коммерческого заинтересованного лица, InterSystems, исполнительный директор которой не любил название MUMPS и считал его серьезным маркетинговым препятствием. Таким образом, предпочтение M в некоторой степени было идентифицировано как согласование с InterSystems. Спор также отражал соперничество между организациями (Ассоциация M Technology, Комитет по развитию MUMPS, Комитеты по стандартам ANSI и ISO) относительно того, кто определяет «официальное» название языка. Некоторые авторы пытались решить эту проблему, ссылаясь на язык как M [UMPS] , квадратные скобки - это обычное обозначение необязательных элементов синтаксиса. Ведущий специалист и автор реализации MUMPS с открытым исходным кодом, профессор Кевин О'Кейн, использует только «MUMPS».
Самый последний стандарт (ISO / IEC 11756: 1999, подтвержденный 25 июня 2010 г.) по-прежнему упоминает M и MUMPS как официально принятые имена.
Статус торговой марки
Массачусетская больница общего профиля зарегистрировала "MUMPS" в качестве товарного знака в USPTO 28 ноября 1971 г. и продлила его 16 ноября 1992 г., но срок его действия истек 30 августа 2003 г. [26]
Сравнение с выбором
MUMPS предлагает сравнение с операционной системой Pick . [27] Сходства включают:
- Обе системы построены на эффективной реализации больших разреженных массивов без типов и индексированных строк;
- Оба исторически смешивали язык и ОС;
- Оба имеют схожую область применения.
- В языках программирования обеих сред операции чтения, записи, создания и удаления записей базы данных используют тот же синтаксис, что и ссылки на переменные.
Смотрите также
- Profile Scripting Language (PSL), расширение MUMPS
- Caché ObjectScript , объектно-ориентированное расширение для MUMPS от известного поставщика MUMPS
- GT.M , реализация M
- InterSystems Caché
Рекомендации
- ^ «Системы MUMPS обслуживают 54% пациентов в США» .
- ^ george.james (22 августа 2008 г.). «MUMPS: база данных масштаба Интернета» . Проверено 26 февраля 2018 .
- ^ «Экстремальное программирование баз данных с помощью MUMPS Globals» (PDF) . Gradvs1.mjgateway.com . Проверено 13 августа 2013 .
- ^ «Аннотированные стандарты M [UMPS]» . 71.174.62.16. 2011-11-29 . Проверено 12 августа 2013 .
- ^ «Вопросы и ответы по технологиям M и языку MUMPS, часть 1/2» . www.faqs.org . Проверено 6 декабря 2019 .
- ^ «Вопросы и ответы по технологиям M и языку MUMPS, часть 1/2» . www.faqs.org . Проверено 6 декабря 2019 .
- ^ «Вопросы и ответы по технологиям M и языку MUMPS, часть 1/2» . www.faqs.org . Проверено 6 декабря 2019 .
- ^ «Вопросы и ответы по технологиям M и языку MUMPS, часть 1/2» . www.faqs.org . Проверено 6 декабря 2019 .
- ^ Справочное руководство по языку VAX-11 DSM . Корпорация цифрового оборудования. 1982. OCLC 29217964 .
- ^ «Серверы HP NonStop, список обслуживания программного обеспечения, дата вступления в силу: январь 2012 г.» (PDF) . Компания Hewlett-Packard Development, LP 2012-01-20. п. 32 . Проверено 17 мая 2014 .
Описание ... Дата, когда продукт был классифицирован как ACTIVE MATURE LIMITED ... MUMPS окт-80 дек-94 дек-94
- ^ "comp.lang.mumps, в группах Google" . Проверено 12 августа 2013 .
- ^ «Санчес исследует новые возможности для бизнеса для своей технологии баз данных» . Sanchez Computer Associates, Inc. 7 ноября, 2000. Архивировано из первоисточника 28 апреля 2004 года . Проверено 12 августа 2013 .CS1 maint: неподходящий URL ( ссылка )
- ^ "GT.M Высокопроизводительный механизм базы данных TP" . Sourceforge.net . Проверено 12 августа 2013 .
- ^ "База данных и язык MUMPS" . Sourceforge.net . Проверено 12 августа 2013 .
- ^ "Свинка / Mii" . Rychannel.com. 2012-11-08 . Проверено 12 августа 2013 .
- ^ «SunQuest выходит из тени Мисис» . Новости информационных технологий в сфере здравоохранения . Проверено 12 августа 2013 .
- ^ «Критически важный Ajax: упрощение и ускорение заказа тестов в Qu» . Slideshare.net . Проверено 12 августа 2013 .
- ^ «Sunquest приобретает Antrim Corp. - бесплатную онлайн-библиотеку» . Thefreelibrary.com. 1996-11-26 . Проверено 12 августа 2013 .
- ^ «Добро пожаловать в M21 - базу данных 21 века» . M21.uk.com . Проверено 13 августа 2013 .
- ^ «Финансовые системы на основе Caché» . Intersystems.com . Проверено 13 августа 2013 .
- ^ «IDEA Банковское дело под ключ и приложения ERP» . Idea.cz . Проверено 13 августа 2013 .
- ^ «Европейское космическое агентство выбирает базу данных InterSystems Caché для миссии Gaia по нанесению на карту Млечного Пути» . Realwire.com . Проверено 13 августа 2013 .
- ^ «ИнтерСистемс Ирис» . intersystems.com . Проверено 18 марта 2021 .
- ^ «Аннотированные стандарты M [UMPS]» . 71.174.62.16 . Проверено 26 февраля 2018 .
- ^ Ричмонд, Робин (1984). Метрики ремонтопригодности для программ MUMPS (PhD). Научный центр здоровья Техасского университета в Далласе.
- ^ «Статус торговой марки и поиск документов» . tsdr.uspto.gov . Проверено 26 февраля 2018 .
- ^ В «перестрелке» 1980-х Пик «все еще продолжался через 30» минут, тогда как MUMPS закончил сортировку 100000 «менее чем за минуту». «БОЛЬШИЕ НОВОСТИ» .
дальнейшее чтение
- Уолтерс, Ричард (1989). "Азбука MUMPS. 1989: Баттерворт-Хайнеманн, ISBN 1-55558-017-3 .
- Уолтерс, Ричард (1997). Программирование M: подробное руководство. Цифровая пресса. ISBN 1-55558-167-6 .
- Левкович, Джон. The Complete MUMPS: Введение и справочное руководство по языку программирования MUMPS.ISBN 0-13-162125-4
- Кирстен, Вольфганг и др. (2003) Объектно-ориентированная разработка приложений с использованием постреляционной базы данных CachéISBN 3-540-00960-4
- Мартинес де Карвахаль Хедрих, Эрнесто (1993). "Эль Ленгуае МАМПЫ". Complete obra en castellano sobre el lenguaje Mumps. ISBN 84-477-0125-5 . Исключительное распределение по автору ([email protected])
- О'Кейн, KC; Язык для реализации программного обеспечения для поиска информации, Online Review, Vol 16, No. 3, pp 127–137 (1992).
- О'Кейн, KC; и Макколлиган, Е.Е., Исследование случая болезни пациента в интрасети, связанной с эпидемическим паротитом, Журнал Общества медицинской информации и систем управления, том 11, № 3, стр. 81–95 (1997).
- О'Кейн, KC; и Макколлиган, EE, Веб-виртуальная машина от паротита, Труды Американской ассоциации медицинской информатики, 1997 г.
- О'Кейн, KC, Язык программирования свинки, Createspace, ISBN 1-4382-4338-3 , 120 страниц (2010).
Внешние ссылки
- Часто задаваемые вопросы о технологиях M и языке MUMPS
- M Technology and MUMPS Language FAQ (1999) Общий источник; также конкретный источник для цитаты Пойтрас о происхождении эпохи 1840 года.
- Переводчик языка программирования Mumps (GPL) , Кевин О'Кейн, Университет Северной Айовы
- MDC - Комитет по развитию MUMPS
- Аннотированные стандарты M {UMPS}
- MUMPS by Example - вышедшая из печати книга Эда де Моэля. Здесь подробно описан синтаксис языка с примерами использования.
- MUMPS Systems - индекс Source Forge
- M Ссылки на Hardhats.org
- M21 - реализация ANSI M (UMPS)
- EsiObjects Объектно -ориентированное расширение MUMPS
- M / DB Альтернатива SimpleDB с открытым исходным кодом на основе MUMPS, совместимая с API
- База данных MiniM обслуживает реализацию MUMPS
- Разработка и эксплуатация лабораторной информационной системы MUMPS: опыт десятилетия в больнице Джона Хопкинса
- Технологические решения IDEA Systems на базе YottaDB (ранее FIS GT.M) и Caché
- Документация, темы и ресурсы MUMPS (на чешском и английском языках)