свинка

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

MUMPS («Massachusetts General Hospital Utility Multi-Programming System»), или M , — это императивный язык программирования высокого уровня с интегрированной базой данных обработки транзакций «ключ-значение» . Первоначально он был разработан в Massachusetts General Hospital для управления медицинскими картами пациентов и информационными системами больничных лабораторий.

Технология MUMPS с тех пор расширилась как преобладающая база данных для систем медицинской информации и электронных медицинских карт в Соединенных Штатах. Информационные системы на основе MUMPS, такие как Epic Systems , предоставляют услуги медицинской информации для более чем 78% пациентов по всей территории США [1]

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

История

1960-е-1970-е годы - Генезис

MUMPS был разработан Нилом Паппалардо , Робертом А. Гринесом и Куртом Марблом в лаборатории доктора Окто Барнетта в Массачусетской больнице общего профиля (MGH) в Бостоне в 1966 и 1967 годах. [3] Он вырос из разочарования во время проекта по поддержке больничных информационных систем Национальными институтами здравоохранения (NIH) в MGH, с разработкой на языке ассемблера на PDP-1 с разделением времени основным подрядчиком Bolt Beranek & Newman, Inc. (BBN). MUMPS появился из внутреннего проекта « skunkworks » в MGH Паппалардо, Гринеса и Марбла по созданию альтернативной среды разработки. В результате первоначальной демонстрации возможностей предложение доктора Барнетта NIH в 1967 году о возобновлении гранта на проект больничного компьютера сделало смелый шаг, предложив, чтобы система была построена на MUMPS в будущем, а не полагалась на подход BBN. Проект был профинансирован, и началось серьезное внедрение системы в MUMPS.

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

Некоторые аспекты MUMPS можно проследить от JOSS корпорации RAND до TELCOMP и STRINGCOMP корпорации BBN . ​​Команда MUMPS решила включить переносимость между машинами в качестве цели проектирования.

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

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

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

Версии системы MUMPS были переписаны техническими лидерами Деннисом «Дэном» Бревиком и Полом Стайлосом [6] из DEC в 1970 и 1971 годах. К началу 1970-х годов существовало множество разнообразных реализаций MUMPS на различных аппаратных платформах. Другой примечательной платформой была DEC MUMPS-11 Пола Стайлоса [6] на PDP-11 и MIIS от MEDITECH . Осенью 1972 года многие пользователи MUMPS посетили конференцию в Бостоне, которая стандартизировала тогда еще раздробленный язык, и создали для этого Группу пользователей MUMPS и Комитет по разработке MUMPS (MDC). Эти усилия оказались успешными; стандарт был завершен к 1974 году и был утвержден 15 сентября 1977 года как стандарт ANSI , X11.1-1977. Примерно в то же время DEC выпустила DSM-11 (Digital Standard MUMPS) для PDP-11. Он быстро занял лидирующие позиции на рынке и стал эталонной реализацией того времени. Кроме того, InterSystems продавала ISM-11 для PDP-11 (который был идентичен DSM-11).

1980-е

В начале 1980-х годов несколько поставщиков вывели на рынок платформы на базе MUMPS, которые соответствовали стандарту ANSI. Наиболее значимыми были:

  • Digital Equipment Corporation с DSM (цифровой стандарт MUMPS). Для серии PDP-11 DSM-11 был выпущен в 1977 году. VAX DSM [7] продавался параллельно после выпуска в 1978 году. Оба семейства оборудования, а также версии MUMPS были доступны до 1995 года от DEC. DSM-11 был портирован на Alpha в двух вариантах: DSM для OpenVMS и как DSM для Ultrix .
  • InterSystems с ISM (InterSystems M) на VMS (M/VX), ISM-11, позднее M/11+ на платформе PDP-11 (1978), M/PC на MS-DOS, M/DG на Data General , M/VM на IBM VM/CMS и M/UX на различных Unix-системах.
  • Greystone Technology Corporation основана в 1980 году, с скомпилированной версией GT.M для AIX, HP-UX, UNIX и OpenVMS
  • DataTree Inc. с продуктом на базе ПК Intel под названием DTM . (1982)
  • Micronetics Design Corporation (1980) с линейкой продуктов под названием MSM. MSM-PC, MSM/386, MS-UNIX, MSM-NT, MSM/VM для платформ IBM , VAX/VMS и OpenVMS Alpha.
  • Компания Computer Consultants (позже переименованная в MGlobal), базирующаяся в Хьюстоне , изначально создала CCSM на 6800, затем на 6809 и, в конечном итоге, порт на 68000, который позже стал MacMUMPS , продуктом на базе Mac OS . Они также работали над реализацией MGM MUMPS. MGlobal также перенесла свою реализацию на платформу DOS. MGlobal MUMPS был первым коммерческим MUMPS для IBM PC и единственной реализацией для классической Mac OS.
  • Компания Tandem Computers разработала реализацию для своих отказоустойчивых компьютеров. [8]
  • IBM некоторое время продавала реализацию MUMPS под названием MUMPS/VM , которая работала как виртуальная машина поверх VM/370 . [9]

В этот период также наблюдалась значительная активность 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, а в 1999 году — ISO как ISO 11756:1999, который также был опубликован ANSI. MDC завершила дальнейшую редакцию стандарта в 1998 году, но она не была представлена ​​ANSI для утверждения.
  • В 1999 году был утвержден последний стандарт M (ISO-IEC 11756-1999). ISO подтвердила это в 2020 году. Вместе с ISO/IEC 15851:1999, Open MUMPS Interconnect и ISO/IEC 15852:1999, MUMPS Windowing Application Programmers Interface.

2000-е

  • К 1998 году поставщик промежуточного программного обеспечения InterSystems стал доминирующим игроком на рынке MUMPS, купив несколько других поставщиков. Первоначально они приобрели DataTree Inc. в 1993 году. 30 декабря 1994 года InterSystems приобрела линейку продуктов DSM у DEC. [10] InterSystems объединила эти продукты в единую линейку продуктов, брендируя их на нескольких аппаратных платформах как OpenM . В 1997 году InterSystems выпустила новый продукт под названием Caché . Он был основан на их продукте ISM, но с влиянием других реализаций. Micronetics Design Corporation, в то время № 2 на рынке, была приобретена InterSystems 21 июня 1998 года. InterSystems остается доминирующим «поставщиком M», владея MSM, DSM, ISM, DTM и продавая свою платформу данных IRIS (и, до 2018 года, ее предшественника Caché) разработчикам M, которые пишут приложения для различных операционных систем. Кроме того, компания Intersystems больше не использовала термин M и не следовала стандарту M.
  • Реализация GT.M от Greystone Technology Corporation была продана Sanchez Computer Associates (теперь часть FIS ) в середине 1990-х годов. 7 ноября 2000 года Sanchez сделал GT.M для Linux доступным по лицензии GPL [11] , а 28 октября 2005 года GT.M для OpenVMS и Tru64 UNIX также стали доступны по лицензии AGPL. [12] GT.M продолжает быть доступным на других платформах UNIX по традиционной лицензии.
  • В 2000 году Рэй Ньюман и другие выпустили MUMPS V1, реализацию MUMPS (первоначально на FreeBSD), похожую на DSM-11. С тех пор MUMPS V1 был портирован на Linux , Mac OS X и Windows (с использованием cygwin). [13] Изначально предназначенный только для процессора x86, MUMPS V1 теперь портирован на Raspberry Pi.
  • В апреле 2002 года компания Real Software Company из Рагби, Великобритания , выпустила производную версию MSM под названием M21 .
  • Также существует несколько реализаций MUMPS с открытым исходным кодом, включая некоторые исследовательские проекты. Наиболее примечательным из них является Mumps/II, созданный доктором Кевином О'Кейном (профессор-эмерит, Университет Северной Айовы ) и студенческий проект. Доктор О'Кейн также портировал интерпретатор на Mac OS X. [14]
  • Один из первоначальных создателей языка MUMPS, Нил Паппалардо, основал компанию MEDITECH в 1969 году. Они расширили и построили язык MUMPS, назвав новый язык MIIS (а позже и другой язык под названием MAGIC). В отличие от InterSystems, MEDITECH больше не продает промежуточное программное обеспечение, поэтому MIIS и MAGIC теперь используются только внутри MEDITECH.
  • Новинка на рынке с 2022 года — MiniM от Евгения Каратаева

Имя

Исполнительному директору InterSystems не нравилось название MUMPS, и он считал, что оно представляет собой серьезное маркетинговое препятствие. Таким образом, предпочтение M в некоторой степени стало идентифицироваться как соответствие InterSystems. Стандарт ANSI 1990 года был открыт как для M, так и для MUMPS, и после «всемирного» обсуждения в 1992 году группы пользователей Mumps официально изменили название на M. Спор также отражал соперничество между организациями (Ассоциация технологий M, Комитет по развитию MUMPS, Комитеты по стандартам ANSI и ISO) относительно того, кто определяет «официальное» название языка. [ необходима цитата ]

По состоянию на 2020 год ISO по-прежнему упоминает как M, так и MUMPS в качестве официально принятых названий. [15]

Массачусетская больница общего профиля зарегистрировала «MUMPS» в качестве товарного знака в USPTO 28 ноября 1971 года и продлила его 16 ноября 1992 года, но срок его действия истек 30 августа 2003 года. [16]

Дизайн

Обзор

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

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

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

Все имена переменных, которые не имеют префикса в виде символа вставки ( ^), являются временными и частными. Как и глобальные переменные, они также имеют иерархическую модель хранения, но доступны только «локально» для одной задачи, поэтому они называются «локальными». Как «глобальные», так и «локальные» могут иметь дочерние узлы (называемые индексами в терминологии MUMPS). Индексы не ограничиваются цифрами — любой символ ASCII или группа символов могут быть идентификатором индекса. Хотя это не редкость для современных языков, таких как Perl или JavaScript, это была весьма необычная функция в конце 1970-х годов. Эта возможность не была повсеместно реализована в системах MUMPS до стандарта ANSI 1984 года, поскольку стандарт требовал, чтобы были разрешены только канонически числовые индексы. [18] Таким образом, переменная с именем «Car» может иметь индексы «Door», «Steering Wheel» и «Engine», каждый из которых может содержать значение и иметь собственные индексы. Переменная ^Car("Door")может иметь вложенный переменный индекс "Цвет", например. Таким образом, вы можете сказать

SET ^Car("Дверь","Цвет")="СИНИЙ"

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

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

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

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

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

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

Простая программа «Hello, World!» в MUMPS может выглядеть так:

 напишите "Привет, Мир!",!

и будет запущена с командой do ^hello после ее сохранения на диск. Для прямого выполнения кода требуется своего рода «метка» (любая буквенно-цифровая строка) в первой позиции строки программы, чтобы указать интерпретатору mumps, где начать выполнение. Поскольку MUMPS позволяет объединять команды в одну строку, и поскольку команды можно сокращать до одной буквы, эту процедуру можно сделать более компактной:

w "Привет, мир!",!

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

Функции

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

Возможности языка включают в себя:

Типы данных
Существует один универсальный тип данных , который неявно приводится к строковому, целочисленному или типу данных с плавающей точкой в ​​зависимости от контекста.
Булевы значения ( в MUMPS они называются значениями истинности )
В командах IF и другом синтаксисе, в котором выражения оцениваются как условия, любое строковое значение оценивается как числовое значение, и если это ненулевое значение, то оно интерпретируется как True. a<bвозвращает 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 является совершенно допустимым:
GREPTHIS() НОВЫЙ НАБОР, НОВЫЙ, ТОГДА, ЕСЛИ, УБИТЬ, ВЫЙТИ НАБОР IF="УБИТЬ", SET="11", KILL="11", ВЫЙТИ="ВОЗВРАТ", ТОГДА="УБИТЬ" ЕСЛИ ЕСЛИ=ТО ДЕЛАЙТЕ ТОГДА ВЫЙТИ:$ВЫЙТИ ВЫЙТИ ВЫЙТИ ; (выйти)ТОГДА ЕСЛИ ЕСЛИ,SET&KILL SET SET=SET+KILL ВЫЙТИ
MUMPS можно сделать более запутанным, используя синтаксис сокращенного оператора, как показано в этом кратком примере, полученном из примера выше:
GREPTHIS() НС,Н,Т,И,К,QSI="К",С="11",К="11",Q="Р",Т="К" II=ТДТ В:$QQQТII,S&K SS=S+KQ
Массивы
создаются динамически, хранятся как B-деревья , являются разреженными (т. е. почти не используют места для отсутствующих узлов), могут использовать любое количество индексов, а индексы могут быть строками или числами (включая числа с плавающей точкой). Массивы всегда автоматически сохраняются в отсортированном порядке, поэтому никогда не возникает необходимости сортировать, упаковывать, переупорядочивать или иным образом реорганизовывать базу данных. Встроенные функции, такие как $DATA , $ORDER , $NEXT (устарело) и $QUERY , обеспечивают эффективное изучение и обход фундаментальной структуры массива на диске или в памяти.
для i=10000:1:12345 установить sqtable(i)=i*iзадать адрес("Смит","Дэниел")="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. Эта замена допускает ленивую оценку и позднее связывание, а также фактически является операционным эквивалентом «указателей» в других языках.
Функция части
Это разбивает переменные на сегментированные части, управляемые указанной пользователем строкой-разделителем (иногда называемой «разделителем»). Те, кто знает awk, найдут это знакомым. $PIECE(STRINGVAR,"^",3)означает «третья часть STRINGVAR , разделенная символом «каретка ». Функция piece также может появляться как цель присваивания (команда SET).
$PIECE("world.std.com",".",2)урожайностьстандарт.
После
УСТАНОВИТЬ X="dpbsmith@world.std.com"
SET $P(X,"@",1)="office"приводит к тому, что X становится «office@world.std.com» (обратите внимание, что $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="" Для Set i=$O(stuff(i)) Выход:i="" Запись !,i,10,stuff(i)
Здесь For без аргументов повторяется до тех пор, пока не будет остановлен завершающим Quit . Эта строка выводит таблицу i и где i последовательно равно 6, 10 и 15.stuff(i)
Для итерации базы данных функция Order возвращает следующий ключ для использования.
ГТМ>С н=""GTM>S n=$order(^nodex(n))GTM>zwr nн="здание"GTM>S n=$order(^nodex(n))GTM>zwr nn=" имя:gd"GTM>S n=$order(^nodex(n))GTM>zwr nn="%kml:guid"

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

Критика

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

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

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

Пользователи

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

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

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

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

Реализации

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

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

  • М21
  • YottaDB [29]
  • МиниМ
  • Эталонный стандарт М
  • FreeM

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

Ссылки

  1. ^ Ноябрь, Джозеф (2016). «Спросите своего врача... о компьютерах». IEEE Annals of the History of Computing . 38 (1): 3– 5. doi :10.1109/MAHC.2016.5.
  2. ^ Твид, Роб; Джеймс, Джордж (2 августа 2008 г.). «MUMPS: база данных масштаба Интернета» . Архивировано из оригинала 27 сентября 2021 г. Получено 25 октября 2022 г. – через SlideShare .
  3. ^ Гринс, Роберт; Паппалардо, А. Нил; Марбл, Курт В.; Барнетт, Г. Окто (1969). «Проектирование и реализация системы управления клиническими данными». Comput Biomed Res . 5 (октябрь): 469–85 . doi :10.1016/0010-4809(69)90012-3. PMID  11697375.
  4. ^ Гринс, Роберт А.; Барнетт, Г. Окто; Кляйн, Стюарт В.; Роббинс, Энтони; Прайор, Родерик Э. (1970). «Запись, извлечение и просмотр медицинских данных путем взаимодействия врача с компьютером». N Engl J Med . 282 (6): 307–15 . doi :10.1056/NEJM197002052820605. PMID  5410816.
  5. ^ Pendergrass, Henry P; Greenes, Robert A; Barnett, G Octo; Poitras, James W; Pappalardo, A Neil; Marble, Curt W (1969). «Онлайн-компьютерное средство для систематизированного ввода отчетов по радиологии». Radiology . 92 (4): 709– 13. doi :10.1148/92.4.709. PMID  5767748.
  6. ^ abc Trask, Gardner; Diamond, Jon (6 апреля 1999 г.). "Часто задаваемые вопросы по технологии M и языку MUMPS, часть 1/2". Группа новостей : comp.lang.mumps. Usenet:  FKu0LK.19p@world.std.com . Получено 25 октября 2022 г.
  7. ^ Справочное руководство по языку DSM VAX-11 . Корпорация Digital Equipment. 1982. OCLC  29217964.
  8. ^ "HP NonStop Servers, Software Product Maintenance List, Effective Date: January 2012" (PDF) . Hewlett-Packard Development Company, LP 2012-01-20. стр. 32 . Получено 17 мая 2014 г.
  9. ^ "Две версии MUMPS вышли". Computerworld . Том XXI, № 48. 1987-11-30 . Получено 2022-07-09 .
  10. ^ Грабшейд, Пол; Рагон, Терри (2 января 1995 г.). "DSM Announcement". Группа новостей : comp.lang.mumps. Usenet:  hwSTpyiTUNQJ@world.std.com . Получено 25 октября 2022 г.
  11. ^ "Sanchez Offers GT.M Database as Open Source Freeware to GNU/Linux Users". Sanchez Computer Associates, Inc. (пресс-релиз). 8 ноября 2000 г. Архивировано из оригинала 28 апреля 2004 г. Получено 12 августа 2013 г.
  12. ^ "GT.M High end TP database engine". Sourceforge.net . Получено 2013-08-12 .
  13. ^ "База данных и язык MUMPS". Sourceforge.net . Получено 2013-08-12 .
  14. ^ "Mumps/Mii". Rychannel.com. 2012-11-08 . Получено 2013-08-12 .
  15. ^ "ISO/IEC 11756:1999(ru) Информационные технологии — Языки программирования — M". www.iso.org . 2020 . Получено 2024-04-18 .
  16. ^ "Статус товарного знака и поиск документов". tsdr.uspto.gov . Получено 26 февраля 2018 г. .
  17. ^ "Экстремальное программирование баз данных с использованием MUMPS Globals" (PDF) . Gradvs1.mjgateway.com . Получено 13 августа 2013 г. .
  18. ^ "Аннотированные стандарты M[UMPS]". 71.174.62.16. 2011-11-29 . Получено 2013-08-12 .
  19. ^ "Аннотированные стандарты M[UMPS]". 71.174.62.16 . Получено 26 февраля 2018 г. .
  20. ^ Ричмонд, Джозеф Робин (1984). Показатели удобства обслуживания программного обеспечения для программ MUMPS (PhD). Центр медицинских наук Техасского университета в Далласе . OCLC  13285529.
  21. ^ "SunQuest выходит из тени Misys". Healthcare IT News. 13 марта 2008 г. Получено 12 августа 2013 г.
  22. ^ "Mission-critical Ajax: Making Test Ordering Easier and Faster at Qu". Slideshare.net. 5 апреля 2008 г. Получено 12 августа 2013 г.
  23. ^ "Sunquest приобретает Antrim Corp. - Бесплатная онлайн-библиотека". Thefreelibrary.com. 1996-11-26 . Получено 2013-08-12 .
  24. ^ "Добро пожаловать в M21 — базу данных для 21-го века". M21.uk.com . Получено 2013-08-13 .
  25. ^ "Финансовые системы на основе кэша". InterSystems . Архивировано из оригинала 2013-06-02 . Получено 2013-08-13 .
  26. ^ "IDEA Turn-Key banking and ERP applications". Idea.cz . Получено 2013-08-13 .
  27. ^ "Европейское космическое агентство выбирает базу данных InterSystems Caché для миссии Gaia по картографированию Млечного Пути". Realwire.com. 13 мая 2010 г. Получено 13 августа 2013 г.
  28. ^ "InterSystems Iris". InterSystems . Получено 2021-03-18 .
  29. ^ "Сайт YottaDB". yottadb.com. 24 мая 2024 г. Получено 24 мая 2023 г.

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

  • Уолтерс, Ричард Ф. (15 января 1989 г.). ABCs of MUMPS: Введение для начинающих и продвинутых программистов (2-е изд.). Digital Press. ISBN 978-1555580179. LCCN  88033522. OCLC  18989618. OL  2055247M.
  • Уолтерс, Ричард Ф. (19 июня 1997 г.). Программирование на языке М: всеобъемлющее руководство (2-е изд.). Digital Press. ISBN 978-1-55558-167-1. LCCN  97006513. OCLC  78593848. OL  661091M – через Интернет-архив .
  • Левкович, Джон. Полное издание MUMPS: Введение и справочное руководство по языку программирования MUMPS. ISBN 0-13-162125-4 
  • Кирстен, Вольфганг и др. (2003) Разработка объектно-ориентированных приложений с использованием постреляционной базы данных Caché ISBN 3-540-00960-4 
  • Мартинес де Карвахаль, Эрнесто (1993). El Lenguaje MUMPS (на европейском испанском языке) (1-е изд.). Барселона: ППУ. ISBN 978-8447701254. OCLC  435380102. OL  40214570M.
  • О'Кейн, К.С.; Язык для реализации программного обеспечения для поиска информации, Онлайн-обзор, том 16, № 3, стр. 127–137 (1992).
  • О'Кейн, К.С. и МакКоллиган, Э.Е., Исследование случая использования интранет-карты пациента, больного эпидемическим паротитом, Журнал Общества систем информации и управления здравоохранением, том 11, № 3, стр. 81–95 (1997).
  • О'Кейн, К.С. и МакКоллиган, Э.Э., Виртуальная веб-машина для эпидемического паротита, Труды Американской ассоциации медицинской информатики, 1997 г.
  • О'Кейн, К.С., Язык программирования Mumps, Createspace, ISBN 1-4382-4338-3 , 120 страниц (2010). 
  • Trask, Gardner; Diamond, Jon (6 апреля 1999 г.). "Часто задаваемые вопросы по технологии M и языку MUMPS, часть 1/2". Группа новостей : comp.lang.mumps. Usenet:  FKu0LK.19p@world.std.com . Получено 25 октября 2022 г. .
  • "comp.lang.mumps". Группа новостей : comp.lang.mumps . Получено 25 октября 2022 г. – через Google Groups .
  • Интерпретатор языка программирования Mumps (GPL) Кевина О'Кейна, Университет Северной Айовы
  • MUMPS на SourceForge
  • Ссылки M на Hardhats.org
  • Разработка и эксплуатация лабораторной информационной системы MUMPS: десятилетний опыт в больнице Джонса Хопкинса
  • Технологические решения IDEA Systems на базе YottaDB (ранее FIS GT.M) и Caché
  • Документация, темы и ресурсы MUMPS (смешанный чешский и английский)
Retrieved from "https://en.wikipedia.org/w/index.php?title=MUMPS&oldid=1271984520"