МАМПЫ - MUMPS

МАМПЫ
ПарадигмаОчень Императив Процедурный
РазработаноНил Паппалардо
Впервые появился1966; 54 года назад (1966)
Стабильный выпуск
ANSI X11.1-1995 / 8 декабря 1995 г. (1995-12-08)
Печатная дисциплинаБестиповый
Операционные системыКроссплатформенность
Под влиянием
JOSS
Под влиянием
PSL, Caché ObjectScript

МАМПЫ («Мультипрограммная система для больниц общего профиля Массачусетса») или M, является интегрированным язык программирования и база данных "ключ-значение" первоначально был разработан в Массачусетской больнице общего профиля для управления информационными системами больничных лабораторий.

Технология M [UMPS] с тех пор распространилась по Соединенным Штатам как преобладающая технология для информационных систем здравоохранения и электронные медицинские карты. Информационные системы на основе M [UMPS] сегодня обслуживают более 40% больниц в США, работают в большинстве из более чем 3500 федеральных больниц и клиник США и предоставляют медицинские информационные услуги более чем 54% пациентов в США.[1]

Ключевой особенностью языка M является его интегрированная база данных, обеспечивающая прямой высокоскоростной доступ для чтения и записи к постоянному хранилищу на диске с аналогичной скоростью языков для доступа к временным оперативная память.[2]. Это обеспечивает тесную интеграцию неограниченного количества приложений в одной базе данных и обеспечивает чрезвычайно высокую производительность и надежность в качестве онлайн-обработка транзакций система.

Обзор

MUMPS - это язык, предназначенный для создания приложений баз данных. Были включены дополнительные языковые функции, чтобы помочь программистам создавать приложения с минимальными вычислительными ресурсами. Первоначальные реализации были интерпретированный, хотя современные реализации могут быть полностью или частично составлен. Отдельные "программы" запускаются в памяти "перегородки". Ранние разделы памяти MUMPS были ограничены 2048 байтами, поэтому агрессивная аббревиатура значительно облегчила мультипрограммирование на оборудовании с сильно ограниченными ресурсами, потому что более одного задания MUMPS могло уместиться в очень небольшой объем памяти, существующий на оборудовании в то время. Еще одной особенностью языкового дизайна была возможность предоставлять многопользовательские системы. Слово "Mокончательноп«программирование» в аббревиатуре указывает на это. Даже самые ранние машины, на которых выполнялся MUMPS, поддерживали несколько заданий, выполняемых одновременно. С переходом от мини-компьютеров к микрокомпьютерам несколько лет спустя даже «однопользовательский ПК» с одним 8 -битный процессор и 16 или 64 КБ памяти могут поддерживать нескольких пользователей, которые могут подключаться к нему из (неграфический ) видеотерминалы.

Поскольку изначально памяти было мало, при разработке языка MUMPS ценился очень краткий код. Таким образом, каждая команда или имя функции MUMPS может быть сокращено от одной до трех букв, например Выйти (выйти из программы) как Q, $ P = функция $ Piece, R = команда чтения, $ TR = функция $ Translate. Пробелы и маркеры конца строки важны в MUMPS, потому что область видимости строки способствовала тому же лаконичному дизайну языка. Таким образом, одна строка программного кода может выражать с помощью нескольких символов идею, для которой другим языкам программирования может потребоваться в 5-10 раз больше символов. Аббревиатура была общей чертой языков, разработанных в этот период (например, FOCAL-69, ранние BASIC, такие как Tiny BASIC, так далее.). Прискорбным побочным эффектом этого, в сочетании с ранней необходимостью писать минималистичный код, было то, что программисты MUMPS обычно не комментировали код и использовали обширные сокращения. Это означало, что даже опытный программист MUMPS не мог просто пролистать страницу кода, чтобы увидеть его функцию, но должен был проанализировать его построчно.

Взаимодействие с базой данных прозрачно встроено в язык. Язык MUMPS обеспечивает иерархическая база данных состоит из стойкий разреженные массивы, который неявно "открывается" для каждого приложения MUMPS. Все имена переменных с префиксом символа вставки («^») используют постоянное (вместо ОЗУ) хранилище, сохранят свои значения после выхода из приложения и будут видны (и могут быть изменены) другими запущенными приложениями. Переменные, использующие это общее и постоянное хранилище, называются Глобалы в MUMPS, потому что область видимости этих переменных «глобально доступна» для всех заданий в системе. Более недавнее и более распространенное использование имени «глобальные переменные» в других языках - это более ограниченный охват имен, исходя из того факта, что переменные без области видимости доступны «глобально» для любых программ, работающих в одном процессе, но не используются совместно несколькими процессами. Режим хранения MUMPS (то есть глобальные хранилища как постоянные разреженные массивы) придает базе данных MUMPS характеристики документно-ориентированная база данных.[3]

Все имена переменных, не начинающиеся с символа вставки ("^"), являются временными и частными. Как и глобальные переменные, у них также есть иерархическая модель хранения, но они «доступны локально» только для одного задания, поэтому их называют «локальными». И «глобальные», и «локальные» могут иметь дочерние узлы (называемые индексы в терминологии MUMPS). Индексы не ограничиваются цифрами - любые ASCII символ или группа символов могут быть идентификатором нижнего индекса. Хотя это не редкость для современных языков, таких как Perl или JavaScript, в конце 1970-х это было очень необычной функцией. Эта возможность не была повсеместно реализована в системах MUMPS до стандарта ANSI 1984 года, поскольку стандартом требовались только канонически числовые индексы.[4] Таким образом, переменная с именем «Автомобиль» может иметь индексы «Дверь», «Рулевое колесо» и «Двигатель», каждый из которых может содержать значение и иметь собственные индексы. Например, переменная ^ Car («Дверь») может иметь индекс вложенной переменной «Цвет». Таким образом, вы могли бы сказать

НАБОР ^ Автомобиль ("Дверь", "Цвет") = "СИНИЙ"

для изменения вложенного дочернего узла ^ Car. В терминах MUMPS «Цвет» - это второй индекс переменной ^ Car (как имена дочерних узлов, так и сами дочерние узлы также называются нижними индексами). Иерархические переменные похожи на объекты со свойствами во многих объектно-ориентированный языков. Кроме того, дизайн языка MUMPS требует, чтобы все индексы переменных автоматически сохранялись в отсортированном порядке. Числовые индексы (включая числа с плавающей запятой) сохраняются от наименьшего к наибольшему. Все нечисловые индексы хранятся в алфавитном порядке после чисел. В терминологии MUMPS это канонический порядок. Используя только неотрицательные целые индексы, программист MUMPS может эмулировать массивы тип данных из других языков. Хотя MUMPS изначально не предлагает полный набор СУБД такие функции, как обязательные схемы, несколько систем СУБД были построены на его основе, которые предоставляют разработчикам приложений функции плоских файлов, реляционных и сетевых баз данных.

Кроме того, существуют встроенные операторы, обрабатывающие строку с разделителями (например, значения, разделенные запятыми ) как массив. Ранние программисты MUMPS часто сохраняли структуру связанной информации в виде строки с разделителями, анализируя ее после того, как она была прочитана; это сэкономило время доступа к диску и дало значительное преимущество в скорости на некотором оборудовании.

MUMPS не имеет типов данных. Числа можно рассматривать как строки цифр, или строки можно рассматривать как числа с помощью числовых операторов (по принуждению, в терминологии MUMPS). Однако принуждение может иметь некоторые странные побочные эффекты. Например, при принуждении строки синтаксический анализатор превращает как можно большую часть строки (начиная слева) в число, а затем отбрасывает остальные. Таким образом, заявление ЕСЛИ 20 <"30 УТКИ" оценивается как ПРАВДА в MUMPS.

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

В отличие от языков C или Вирт По традиции, некоторые пробелы между операторами MUMPS имеют большое значение. Один пробел отделяет команду от ее аргумента, а пробел или новая строка отделяет каждый аргумент от следующего токена MUMPS. Команды, которые не принимают аргументов (например, ELSE) требуется два следующих пробела. Идея состоит в том, что один пробел отделяет команду от (несуществующего) аргумента, следующий отделяет «аргумент» от следующей команды. Новые строки также важны; ан ЕСЛИ, ELSE или ДЛЯ команда обрабатывает (или пропускает) все остальное до конца строки. Чтобы эти операторы управляли несколькими строками, вы должны использовать ДЕЛАТЬ команда для создания блока кода.

"Привет мир!" пример

Просто Привет, мир программа в MUMPS может быть:

hello () напишите «Hello, World!» ,! уволиться

и будет запускаться из командной строки MUMPS с помощью команды делать ^ привет. Поскольку MUMPS позволяет объединять команды в одну строку, и поскольку команды могут быть сокращены до одной буквы, эту процедуру можно сделать более компактной:

hello () w "Привет, мир!" ,! q

',!'после текста генерирует новую строку.

История

Бытие

MUMPS был разработан Нил Паппалардо, Роберт Гринс и Курт Марбл в лаборатории доктора Окто Барнетта в Массачусетская больница общего профиля (MGH) в Бостон в течение 1966 и 1967 годов. Позже он был переписан техническими руководителями Деннис «Дэн» Бревик и Пол Стилос[5] из DEC в 1970 и 1971 гг.

Первоначальная система MUMPS была похожа на Unix несколько лет спустя, построенный на DEC PDP-7. Окто Барнетт и Нил Паппалардо были также связаны с MGH планирование больничной информационной системы, получил обратная совместимость PDP-9, и начал использовать MUMPS в приемном цикле и отчетности лабораторных тестов. MUMPS был тогда интерпретируемый язык, но даже тогда иерархическая база данных файловая система для стандартизации взаимодействия с данными и абстрактных дисковых операций, чтобы они выполнялись только самим языком MUMPS.

Некоторые аспекты MUMPS можно проследить из Rand Corporation с JOSS через BBN с ТЕЛКОМП и STRINGCOMP. Команда MUMPS сознательно выбрала переносимость между машинами в качестве цели проектирования.

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

Прошло несколько лет, прежде чем была разработана Unix. Отсутствие оборудования для управления памятью также означало, что всякая многопроцессорная обработка чревата возможностью того, что указатель памяти может изменить какой-либо другой процесс. Программы MUMPS вообще не имеют стандартного способа обращения к памяти напрямую, в отличие от Язык C, поэтому, поскольку многозадачность обеспечивалась языком, а не какой-либо программой, написанной на этом языке, было невозможно иметь риск, существующий для других систем.

Дэн Бревик с[6] Система DEC MUMPS-15 была адаптирована к DEC PDP-15, где он жил некоторое время. Впервые он был установлен в системе управления данными здравоохранения в Денвере в мае 1971 года.[7] Переносимость оказалась полезной, и MUMPS получил правительственный исследовательский грант, и поэтому MUMPS стал общественным достоянием, что было требованием для получения грантов. MUMPS вскоре был перенесен на ряд других систем, включая популярную DEC PDP-8, то Данные General Nova и на DEC PDP-11 и Artronix Миникомпьютер PC12. Слухи о MUMPS распространились в основном через медицинское сообщество и получили широкое распространение, часто изменяясь на местном уровне для их собственных нужд.

К началу 1970-х годов было множество разнообразных реализаций MUMPS на различных аппаратных платформах. Еще одной примечательной платформой была Пола Стилоса.[8] DEC MUMPS-11 на PDP-11 и MEDITECH с МИИС. Осенью 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, и это было перенесено на Альфа в двух вариантах: DSM для OpenVMS, и в качестве DSM для Ultrix.
  • InterSystems с участием ISM (InterSystems M) на VMS (M / VX), M / 11 + на платформе PDP-11, M / PC на MS-DOS, M / DG на Общие данные, M / VM на IBM VM / CMS и M / UX на различных Unix.

Другие компании разработали важные реализации MUMPS:

  • Greystone Technology Corporation с скомпилированной версией под названием GT.M.
  • DataTree Inc. с продуктом на базе ПК Intel под названием DTM.
  • Micronetics Design Corporation с линейкой продуктов под названием МСМ для платформ UNIX и Intel PC (позже перенесен на IBM VM Операционная система, Платформы VAX-VMS и платформы Alpha-VMS).
  • Компьютерные консультанты (позже переименованные в MGlobal), Хьюстон изначально созданная компания CCSM на 6800, затем на 6809, и в конечном итоге порт на 68000, который позже стал MacMUMPS, а Mac OS на основе продукта. Они также работали над MGM Реализация MUMPS. MGlobal также перенесла свою реализацию на платформу DOS. MGlobal MUMPS был первым коммерческим MUMPS для IBM PC и единственной реализацией классической Mac OS.
  • Тандемные компьютеры разработали реализацию для своих отказоустойчивых компьютеров.[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 г., представляет собой МСМ производная называется M21 от Real Software Company of Rugby, Великобритания.
  • Существует также несколько реализаций 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, Открытое межсоединение MUMPS и ISO / IEC 15852: 1999, Интерфейс программистов оконных приложений MUMPS.

Текущие пользователи приложений MUMPS

Федеральные информационные системы здравоохранения

Департамент по делам ветеранов США (ранее - Управление по делам ветеранов) был одним из первых, кто начал использовать язык MUMPS. Их разработка (и последующий вклад в кодовую базу бесплатного приложения MUMPS) оказали влияние на многих медицинских пользователей по всему миру. В 1995 году система приема / отслеживания / выписки пациентов Управления по делам ветеранов Компьютерная программа децентрализованной больницы (DHCP) был получателем Computerworld Смитсоновская премия за лучшее использование информационных технологий в медицине. В июле 2006 г. Управление по делам ветеранов (VA) / Управление здоровья ветеранов (VHA) был удостоен награды за инновации в американском правительстве, врученной Институтом Эша Школа правительства Джона Ф. Кеннеди в Гарвардский университет за расширение DHCP в Информационные системы здравоохранения и технологическую архитектуру ветеранов (VistA ). Почти вся больничная система VA в США, Индийская служба здравоохранения, и основные части Министерство обороны CHCS больничная система использует базы данных MUMPS для отслеживания клинических данных.

Коммерческие информационные системы здравоохранения

Другие медицинские ИТ-компании, использующие MUMPS, включают:

Справочные лаборатории

Многие справочные лаборатории, такие как DASA, Квест Диагностика,[17] и Dynacare, используйте программное обеспечение MUMPS, написанное или основанное на коде Antrim Corporation. Антрим был куплен компанией Misys Healthcare (сейчас Информационные системы Sunquest ) в 2001.[18]

Интернет-банкинг и торговые системы

MUMPS также широко используется в финансовых приложениях. MUMPS быстро завоевал популярность в финансовом секторе и используется во многих банках и кредитных союзах. Он используется TD Ameritrade а также Банк Англии и Barclays Bank.[19][20][21]

Текущие реализации

С 2005 года основными реализациями MUMPS были Greystone Technology MUMPS (GT.M) или InterSystems (Caché). Европейское космическое агентство 13 мая 2010 г. объявило, что будет использовать InterSystems Caché база данных для поддержки Миссия Gaia. Эта миссия направлена ​​на отображение Млечный Путь с беспрецедентной точностью.[22]

Краткое изложение основных языковых функций

ANSI X11.1-1995 дает полное формальное описание языка; аннотированная версия этого стандарта доступна в Интернете.[23]

Типы данных: Есть один универсальный тип данных, что неявно по принуждению к строковым, целочисленным или типам данных с плавающей запятой в зависимости от контекста.

Булевы (называется истинные ценности в MUMPS): в командах IF и другом синтаксисе, в которых выражения оцениваются как условия, любое строковое значение оценивается как числовое значение, и если это ненулевое значение, оно интерпретируется как True. а <б дает 1, если a меньше b, в противном случае - 0.

Декларации: Никто. Все переменные динамически создаются при первом присвоении значения.

Линии: являются важными синтаксическими объектами, в отличие от их статуса в языках программирования C или Pascal. Несколько операторов в строке разрешены и являются обычным явлением. Область действия любой команды IF, ELSE и FOR - «остаток текущей строки».

Чувствительность к регистру: Команды и встроенные функции нечувствительны к регистру. Напротив, имена и метки переменных чувствительны к регистру. Нет особого значения для прописных и строчных букв и несколько широко используемых соглашений. Знак процента (%) разрешен как первый символ переменных и меток.

Постусловия: выполнение почти любой команды можно контролировать, поставив после нее двоеточие и выражение истинности. НАБОР: N <10 A = "FOO" устанавливает A в "FOO", если N меньше 10; DO: N> 100 ПРИНТЕР, выполняет 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; (выйти) ТО ЕСЛИ ЕСЛИ, УСТАНОВИТЬ И УБИТЬ УСТАНОВИТЬ = УСТАНОВИТЬ + УБИТЬ ВЫЙТИ

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

GREPTHIS () NS, N, T, I, K, QSI = "K", S = "11", K = "l1", Q = "R", T = "K" II = TDTQ: $ QQ QT II , S & K SS = S + KQ

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

для i = 10000: 1: 12345 установите sqtable (i) = i * iset address ("Smith", "Daniel") = "[email protected]"

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

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

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

Штучная функция: Это разбивает переменные на сегментированные части, руководствуясь заданной пользователем разделительной строкой (иногда называемой «разделителем»). Те, кто знает awk найдет это знакомым. $ PIECE (STRINGVAR; "^"; 3) означает «третью часть строки STRINGVAR, разделенную кареткой». Функция Piece также может отображаться как цель назначения (команда SET).

$ PIECE ("world.std.com", ".", 2) дает "std".

После

УСТАНОВИТЬ X = "[email protected]"

SET $ P (X, "@", 1) = "офис" приводит к тому, что X становится "[email protected]" (обратите внимание, что $ P эквивалентно $ PIECE и может быть записано как таковое).

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

Установите stuff (6) = "xyz", stuff (10) = 26, stuff (15) = ""

$ Заказать (вещи ("")) дает 6, $ Заказать (штука (6)) дает 10, $ Заказать (штука (8)) дает 10, $ Заказать (штука (10)) дает 15, $ Заказать (штука (15)) дает "".

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

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

Для итерации базы данных функция Order возвращает следующий ключ для использования.

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

Многопользовательский / многозадачный / многопроцессорный: MUMPS поддерживает одновременную работу нескольких пользователей и процессов, даже если базовая операционная система этого не делает (например, MS-DOS). Кроме того, существует возможность указать среду для переменной, например, указав имя компьютера в переменной (как в НАБОР ^ | "ДЕНВЕР" | A (1000) = "Фу"), что может позволить вам получить доступ к данным на удаленных машинах.

Критика

Некоторые аспекты синтаксиса MUMPS сильно отличаются от синтаксиса более современных языков, что может вызвать путаницу. Пробелы в выражениях не допускаются, так как они завершают оператор: 2 + 3 это ошибка, и ее необходимо записать 2+3. Все операторы имеют одинаковый приоритет и левоассоциативный (2+3*10 оценивается в 50). Операторы для «меньше или равно» и «больше или равно» являются '> и '< (то есть логический оператор отрицания ' плюс оператор строгого сравнения). Периоды (.) используются для отступа строк в блоке DO, а не пробелов. Команде ELSE не требуется соответствующий IF, поскольку она работает путем проверки значения во встроенной системной переменной. $ test.

МАМПЫ обзор правила более терпимы, чем другие современные языки. Объявленные локальные переменные ограничиваются стеком. Подпрограмма обычно может видеть все объявленные локальные переменные подпрограмм ниже в стеке вызовов, и подпрограммы не могут помешать процедурам, которые они вызывают, изменять свои объявленные локальные переменные, если вызывающий объект вручную не создает новый уровень стека (делать) и псевдонимы каждой из переменных, которые они хотят защитить (. новые x, y) перед вызовом дочерних подпрограмм. Напротив, необъявленные переменные (переменные, созданные с их использованием, а не объявлением) входят в область видимости для всех подпрограмм, выполняемых в одном процессе, и остаются в области видимости до завершения программы.

Поскольку ссылки на базу данных MUMPS отличаются от ссылок на внутренние переменные только префиксом каретки, очень легко случайно изменить базу данных или даже удалить «таблицу» базы данных.[24]

Споры об именах "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 г.[25]

Сравнение с выбором

MUMPS предлагает сравнение с Выберите операционную систему.[26] Сходства включают:

  • Обе системы построены на эффективной реализации больших разреженных массивов без типов и индексированных строк;
  • Оба исторически смешивали язык и ОС;
  • Оба имеют схожую область применения.
  • В языках программирования обеих сред операции чтения, записи, создания и удаления записей базы данных используют тот же синтаксис, что и ссылки на переменные.

Смотрите также

  • PSL расширение MUMPS
  • Caché ObjectScript объектно-ориентированное расширение MUMPS от известного производителя MUMPS
  • GT.M реализация M
  • InterSystems Caché

использованная литература

  1. ^ «Системы MUMPS обслуживают 54% пациентов в США».
  2. ^ george.james (22 августа 2008 г.). "Сворачивает базу данных масштаба Интернета". Получено 26 февраля 2018.
  3. ^ «Экстремальное программирование баз данных с помощью MUMPS Globals» (PDF). Gradvs1.mjgateway.com. Получено 2013-08-13.
  4. ^ «Аннотированные стандарты M [UMPS]». 71.174.62.16. 2011-11-29. Получено 2013-08-12.
  5. ^ "Часто задаваемые вопросы о технологиях M и языке MUMPS, часть 1/2". www.faqs.org. Получено 2019-12-06.
  6. ^ "Часто задаваемые вопросы о технологиях M и языке MUMPS, часть 1/2". www.faqs.org. Получено 2019-12-06.
  7. ^ "Часто задаваемые вопросы о технологиях M и языке MUMPS, часть 1/2". www.faqs.org. Получено 2019-12-06.
  8. ^ "Часто задаваемые вопросы о технологиях M и языке MUMPS, часть 1/2". www.faqs.org. Получено 2019-12-06.
  9. ^ Справочное руководство по языку VAX-11 DSM. Корпорация цифрового оборудования. 1982 г. OCLC  29217964.
  10. ^ «Серверы HP NonStop, список обслуживания программного обеспечения, дата вступления в силу: январь 2012 г.» (PDF). Компания Hewlett-Packard Development, L.P. 20 января 2012 г. п. 32. Получено 2014-05-17. Описание ... Дата, когда продукт был классифицирован как ACTIVE MATURE LIMITED ... MUMPS окт-80 дек-94 дек-94
  11. ^ "Google Discussiegroepen". Получено 2013-08-12.
  12. ^ «Sanchez исследует новые возможности для бизнеса с помощью технологии баз данных». Sanchez Computer Associates, Inc. 7 ноября 2000 г. Архивировано с оригинал 28 апреля 2004 г.. Получено 2013-08-12.
  13. ^ "GT.M High-end ядро ​​базы данных TP - Просмотр файлов на". Sourceforge.net. Получено 2013-08-12.
  14. ^ «База данных и язык MUMPS - Просмотр файлов в». Sourceforge.net. Получено 2013-08-12.
  15. ^ "Свинка / Mii". Rychannel.com. 2012-11-08. Получено 2013-08-12.
  16. ^ «SunQuest выходит из тени Мисис». Новости здравоохранения. Получено 2013-08-12.
  17. ^ «Критически важный Ajax: как сделать заказ тестов проще и быстрее в Qu». Slideshare.net. Получено 2013-08-12.
  18. ^ «Sunquest приобретает Antrim Corp. - бесплатную онлайн-библиотеку». Thefreelibrary.com. 1996-11-26. Получено 2013-08-12.
  19. ^ «Добро пожаловать в M21 - базу данных 21 века». M21.uk.com. Получено 2013-08-13.
  20. ^ «Финансовые системы на основе Caché». Intersystems.com. Получено 2013-08-13.
  21. ^ «IDEA Банковское дело под ключ и приложения ERP». Idea.cz. Получено 2013-08-13.
  22. ^ «Европейское космическое агентство выбирает базу данных InterSystems Caché для миссии Gaia по нанесению на карту Млечного Пути». Realwire.com. Получено 2013-08-13.
  23. ^ «Аннотированные стандарты M [UMPS]». 71.174.62.16. Получено 26 февраля 2018.
  24. ^ Ричмонд, Робин (1984). Показатели ремонтопригодности для программ MUMPS (Кандидат наук). Научный центр здоровья Техасского университета в Далласе.
  25. ^ «Статус товарного знака и поиск документов». tsdr.uspto.gov. Получено 26 февраля 2018.
  26. ^ В «перестрелке» 1980-х Пик «все еще продолжался через 30» минут, тогда как MUMPS закончил сортировку 100 000 «менее чем за минуту»."БОЛЬШИЕ НОВОСТИ".

дальнейшее чтение

  • Уолтерс, Ричард (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])
  • О'Кейн, К.С.; Язык для реализации программного обеспечения для поиска информации, Онлайн-обзор, Том 16, № 3, стр 127–137 (1992).
  • О'Кейн, К.С.; и Макколлиган, Э. Э., Пример истории болезни пациента во внутренней сети паротита, Журнал Общества информационных и управленческих систем здравоохранения, Том 11, № 3, стр. 81–95 (1997).
  • О'Кейн, К.С.; и Макколлиган, E.E., Виртуальная машина свинки на веб-основе, Труды Американской ассоциации медицинской информатики 1997 г.
  • О'Кейн, К.С., Язык программирования Mumps, Createspace, ISBN  1-4382-4338-3, 120 с. (2010).

внешние ссылки