МАМПЫ

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

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

С тех пор технология MUMPS стала доминирующей базой данных для информационных систем здравоохранения и электронных медицинских карт в Соединенных Штатах. Информационные системы на основе MUMPS используются более чем в 40% больниц в США, во всех федеральных больницах и клиниках США и предоставляют медицинские информационные услуги более чем 54% пациентов в США.

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

СОДЕРЖАНИЕ
  • 1 Обзор
  • 2 «Привет, мир!» пример
  • 3 История
    • 3.1 Бытие
    • 3,2 1980-х годов
    • 3,3 1990-х годов
    • 3.4 2000-е годы
  • 4 Текущие пользователи приложений MUMPS
    • 4.1 Федеральные информационные системы здравоохранения
    • 4.2 Коммерческие информационные системы здравоохранения
    • 4.3 Справочные лаборатории
    • 4.4 Интернет-банкинг и торговые системы
    • 4.5 Текущие реализации
  • 5 Обзор основных языковых функций
  • 6 Критика
  • 7 дебаты об именах "MUMPS" и "M"
    • 7.1 Статус товарного знака
  • 8 Сравнение с выбором
  • 9 См. Также
  • 10 Ссылки
  • 11 Дальнейшее чтение
  • 12 Внешние ссылки
Обзор

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 характеристики документно-ориентированной базы данных.

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

SET ^Car("Door","Color")="BLUE"

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

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

MUMPS не имеет типов данных. Числа можно рассматривать как строки цифр, или строки можно рассматривать как числа с помощью числовых операторов (с принуждением, в терминологии MUMPS). Однако принуждение может иметь некоторые странные побочные эффекты. Например, при принуждении строки синтаксический анализатор превращает как можно большую часть строки (начиная слева) в число, а затем отбрасывает оставшуюся часть. Таким образом, утверждение IF 20lt;"30 DUCKS"оценивается как TRUEв MUMPS.

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

В отличие от языков в традициях Си или Вирта, некоторые пробелы между операторами MUMPS имеют большое значение. Один пробел отделяет команду от ее аргумента, а пробел или новая строка отделяет каждый аргумент от следующего токена MUMPS. Команды, которые не принимают аргументов (например, ELSE), требуют двух следующих пробелов. Идея состоит в том, что один пробел отделяет команду от (несуществующего) аргумента, следующий отделяет «аргумент» от следующей команды. Новые строки также важны; an IF, ELSEили FORкоманда обрабатывает (или пропускает) все остальное до конца строки. Чтобы эти операторы управляли несколькими строками, вы должны использовать DOкоманду для создания блока кода.

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

Простое "Hello, World!" программа в MUMPS может быть:

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

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

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

Знак " ,!" после текста создает новую строку.

История
Для контекста см. Хронология языков программирования.

Бытие

MUMPS был разработан Нилом Паппалардо, Робертом Гринсом и Куртом Марблом в лаборатории доктора Окто Барнетта в Массачусетской больнице общего профиля (MGH) в Бостоне в течение 1966 и 1967 годов. Позднее он был переписан техническими руководителями Деннисом «Дэном» Бревиком и Полом Стайлосом из 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, поэтому, поскольку многозадачность обеспечивалась языком, а не какой-либо программой, написанной на этом языке, было невозможно иметь риск, существовавший для другие системы.

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

К началу 1970-х было множество разнообразных реализаций MUMPS на различных аппаратных платформах. Еще одним примечательной платформой была Пол Стилоса декабря 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 для операционной системы 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 разработала реализацию для своих отказоустойчивых компьютеров.

В этот период также была отмечена значительная активность 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. 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, а 28 октября 2005 г. GT.M для OpenVMS и Tru64 UNIX также стали доступны по лицензии AGPL. GT.M по-прежнему доступен на других платформах UNIX по традиционной лицензии.
  • В течение 2000 года Рэй Ньюман и другие выпустили MUMPS V1, реализацию MUMPS (первоначально на FreeBSD), аналогичную DSM-11. С тех пор MUMPS V1 был перенесен на Linux, Mac OS X и Windows (с использованием cygwin). Изначально только для процессора x86, MUMPS V1 теперь перенесен на Raspberry Pi.
  • Новейшая реализация MUMPS, выпущенная в апреле 2002 года, является производным от MSM под названием M21 от Real Software Company из Регби, Великобритания.
  • Существует также несколько реализаций MUMPS с открытым исходным кодом, включая некоторые исследовательские проекты. Наиболее заметным из них является Mumps / II доктора Кевина О'Кейна (заслуженный профессор Университета Северной Айовы ) и студенческий проект. Доктор О'Кейн также портировал интерпретатор на Mac OS X.
  • Один из первых создателей языка 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, включают:

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

Многие справочные лаборатории, такие как DASA, Quest Diagnostics и Dynacare, используют программное обеспечение MUMPS, написанное или основанное на коде Antrim Corporation. Antrim была куплена компанией Misys Healthcare (ныне Sunquest Information Systems ) в 2001 году.

Онлайн-банкинг и торговые системы

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

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

С 2005 года наиболее популярными реализациями MUMPS были Greystone Technology MUMPS (GT.M) от Fidelity National Information Services и Caché от Intersystems Corporation. Европейское космическое агентство 13 мая 2010 г. объявило, что будет использовать базу данных InterSystems Caché для поддержки миссии Gaia. Цель этой миссии - нанести на карту Млечный Путь с беспрецедентной точностью. InterSystems постепенно отказывается от Caché в пользу Iris.

Другие текущие реализации включают:

  • M21
  • YottaDB
  • MiniM
  • Эталонный стандарт M
  • FreeM
Краткое изложение основных языковых функций
Основная статья: синтаксис MUMPS

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

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

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

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

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

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

Постусловия: выполнение почти любой команды можно контролировать, поставив после нее двоеточие и выражение истинности. SET:Nlt;10 A="FOO" устанавливает A в "FOO", если N меньше 10; DO:Ngt;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,SETamp;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,Samp;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. Эта подстановка допускает ленивую оценку и позднее связывание, а также является эффективным эквивалентом «указателей» в других языках.

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

$PIECE("world.std.com",".",2) дает "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 и прочее (i), где i последовательно равняется 6, 10 и 15.

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

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

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

Критика

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

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

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

Споры об именах "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" в качестве товарного знака в ВПТЗ США 28 ноября 1971 года и продлила его 16 ноября 1992 года, но срок его действия истек 30 августа 2003 года.

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

MUMPS предлагает сравнение с операционной системой Pick. Сходства включают:

  • Обе системы построены на эффективной реализации больших разреженных массивов без типов и индексированных строк;
  • Оба исторически смешивали язык и ОС;
  • Оба имеют схожую область применения.
  • В языках программирования обеих сред операции чтения, записи, создания и удаления записей базы данных используют тот же синтаксис, что и ссылки на переменные.
Смотрите также
использованная литература
дальнейшее чтение
  • Уолтерс, Ричард (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. Исключительное распределение по автору (ecarvajal@hedrich.es)
  • О'Кейн, KC; Язык для реализации программного обеспечения для поиска информации, Online Review, Vol 16, No. 3, pp 127–137 (1992).
  • О'Кейн, KC; и Макколлиган, Е.Е., Исследование случая болезни пациента в интрасети, связанной с эпидемическим паротитом, Журнал Общества медицинской информации и систем управления, том 11, № 3, стр. 81–95 (1997).
  • О'Кейн, KC; и Макколлиган, EE, Веб-виртуальная машина от паротита, Труды Американской ассоциации медицинской информатики, 1997 г.
  • О'Кейн, KC, Язык программирования Mumps, Createspace, ISBN   1-4382-4338-3, 120 страниц (2010).
внешние ссылки
Последняя правка сделана 2023-12-31 11:14:48
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте