Свинка
Парадигма | Императивный , процедурный |
---|---|
Разработано | Нил Паппалардо , Курт Марбл, Роберт А. Гринс |
Впервые появился | 1966 год |
Стабильная версия | АНСИ Х11.1-1995
/ 8 декабря 1995 г. |
Дисциплина набора текста | Бестиповый |
ТЫ | Кросс-платформенный |
Под влиянием | |
ДЖОСС | |
Под влиянием | |
PSL , Скрытый ObjectScript , GT.M |
MUMPS («Мультипрограммная система больницы общего профиля штата Массачусетс»), или M , — это императивный язык программирования высокого уровня с интегрированной базой данных «ключ-значение» для обработки транзакций . Первоначально он был разработан в Массачусетской больнице общего профиля для управления медицинскими записями пациентов и информационными системами больничных лабораторий.
С тех пор технология MUMPS стала основной базой данных для информационных систем здравоохранения и электронных медицинских карт в Соединенных Штатах. Информационные системы на базе MUMPS используются более чем в 40% больниц в США, во всех федеральных больницах и клиниках США и предоставляют медицинские информационные услуги более чем 54% пациентов в США. [ нужна ссылка ]
Уникальной особенностью технологии MUMPS является интегрированный язык базы данных , обеспечивающий прямой высокоскоростной доступ для чтения и записи к постоянному дисковому хранилищу. [ 1 ]
История
[ редактировать ]1960-е-1970-е годы - Генезис
[ редактировать ]Свинка MUMPS была разработана Нилом Паппалардо , Робертом А. Гринсом и Куртом Марблом в лаборатории доктора Окто Барнетта Массачусетской больницы общего профиля (MGH) в Бостоне в 1966 и 1967 годах. [ 2 ] Это возникло из-за разочарования во время проекта больничных информационных систем при поддержке Национального института здравоохранения (NIH) в MGH с разработкой на ассемблере PDP-1 с разделением времени основным подрядчиком Bolt Beranek & Newman, Inc. ( ББН). MUMPS возникла в результате внутреннего проекта « skunkworks » в MGH Паппалардо, Гринса и Марбла по созданию альтернативной среды разработки. В результате первоначальной демонстрации возможностей предложение доктора Барнетта, поданное в 1967 году НИЗ о продлении гранта на проект больничного компьютера, стало смелым шагом, предложив в дальнейшем встраивать систему в MUMPS, а не полагаться на подход BBN. Проект был профинансирован, и началось серьезное внедрение системы в MUMPS.
Исходная система MUMPS, как и Unix несколько лет спустя, была построена на базе DEC PDP-7 . Окто Барнетт и Нил Паппалардо получили обратно совместимую PDP-9 и начали использовать MUMPS в цикле приема и составлении отчетов о лабораторных испытаниях. MUMPS тогда был интерпретируемым языком , но даже тогда он включал в себя иерархическую файловую систему базы данных для стандартизации взаимодействия с данными и абстрактных дисковых операций, поэтому они выполнялись только самим языком MUMPS. MUMPS также использовался на заре своего существования в экспериментальной системе ввода клинических записей о ходе работы. [ 3 ] и система ввода радиологических отчетов. [ 4 ]
Некоторые аспекты MUMPS можно проследить RAND корпорации JOSS до BBN TELCOMP STRINGCOMP и от . Команда MUMPS решила включить мобильность между машинами в качестве цели проектирования.
Расширенной особенностью языка MUMPS, не получившей широкой поддержки ни в операционных системах , ни в компьютерном оборудовании той эпохи, была многозадачность . Хотя разделение времени на мэйнфреймах получало все большее распространение в таких системах, как Multics , на большинстве мини-компьютеров не запускались параллельные программы, а многопоточность вообще не была доступна. Даже на мэйнфреймах вариант пакетной обработки, при котором программа выполнялась до завершения, был наиболее распространенной реализацией мультипрограммирования в операционной системе.
Прошло несколько лет, прежде чем была разработана Unix. Отсутствие аппаратного обеспечения управления памятью также означало, что любая многопроцессорная обработка была чревата возможностью того, что указатель памяти мог изменить какой-либо другой процесс. Программы MUMPS вообще не имеют стандартного способа прямого обращения к памяти, в отличие от языка C , поэтому, поскольку многозадачность обеспечивалась языком, а не какой-либо программой, написанной на этом языке, было невозможно иметь риск, существовавший для другие системы.
Система DEC MUMPS-15 Дэна Бревика была адаптирована к DEC PDP-15 , где она просуществовала некоторое время. Впервые он был установлен в системе управления медицинскими данными в Денвере в мае 1971 года. [ 5 ] Переносимость оказалась полезной, и MUMPS получил правительственный грант на исследования, и поэтому MUMPS был передан в общественное достояние, что было требованием для получения грантов. Вскоре MUMPS был портирован на ряд других систем, включая популярный DEC PDP-8 , Data General Nova , а также на DEC PDP-11 и миникомпьютер Artronix PC12 . Слухи о MUMPS распространились в основном среди медицинского сообщества и широко использовались, часто модифицируясь на местном уровне для собственных нужд.
Версии системы MUMPS были переписаны техническими лидерами Деннисом «Дэном» Бревиком и Полом Стилосом. [ 5 ] DEC в 1970 и 1971 годах . К началу 1970-х годов существовало множество разнообразных реализаций MUMPS на ряде аппаратных платформ. Еще одной заслуживающей внимания платформой стала платформа Пола Стилоса. [ 5 ] DEC MUMPS-11 на PDP-11 и MEDITECH компании MIIS . Осенью 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 с DSM (Digital Standard MUMPS). Для серии PDP-11 в 1977 году был выпущен DSM-11. VAX DSM [ 6 ] продавался параллельно после выпуска в 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 основана в 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 разработала реализацию своих отказоустойчивых компьютеров. [ 7 ]
- IBM на короткое время продала реализацию MUMPS под названием MUMPS/VM , которая работала как виртуальная машина поверх VM/370 . [ 8 ]
В этот период также наблюдалась значительная активность 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 году был утвержден последний стандарт М (ISO-IEC 11756-1999). ISO подтвердила это в 2020 году. Вместе с ISO/IEC 15851:1999, Open MUMPS Interconnect и ISO/IEC 15852:1999, MUMPS Window Application Programmer Interface .
2000-е
[ редактировать ]- К 1998 году поставщик промежуточного программного обеспечения InterSystems стал доминирующим игроком на рынке MUMPS после покупки нескольких других поставщиков. Первоначально они приобрели DataTree Inc. в 1993 году. 30 декабря 1994 года InterSystems приобрела линейку продуктов DSM у DEC. [ 9 ] InterSystems объединила эти продукты в одну линейку продуктов, назвав их на нескольких аппаратных платформах OpenM . В 1997 году InterSystems выпустила новый продукт под названием Caché . Это было основано на их продукте ISM, но с влиянием других реализаций. Micronetics Design Corporation, занимавшая в то время второе место на рынке, была приобретена InterSystems 21 июня 1998 года. InterSystems остается доминирующим «вендором M», владеющим MSM, DSM, ISM, DTM и продающим Caché разработчикам M, которые пишут приложения для разнообразие операционных систем. Кроме того, Intersystems больше не использовала термин M и не следовала стандарту M.
- Реализация GT.M компании Greystone Technology Corporation была продана компании Sanchez Computer Associates (ныне часть FIS ) в середине 1990-х годов. 7 ноября 2000 г. Санчес сделал GT.M для Linux доступным под GPL . лицензией [ 10 ] а 28 октября 2005 г. GT.M для OpenVMS и Tru64 UNIX также стали доступны по лицензии AGPL. [ 11 ] GT.M по-прежнему доступен на других платформах UNIX по традиционной лицензии.
- В 2000 году Рэй Ньюман и другие выпустили MUMPS V1, реализацию MUMPS (первоначально для FreeBSD), аналогичную DSM-11. С тех пор MUMPS V1 был портирован на Linux , Mac OS X и Windows (с использованием cygwin). [ 12 ] Первоначально MUMPS V1 был предназначен только для процессоров x86, теперь портирован на Raspberry Pi.
- Выпущенная в апреле 2002 года производная версия MSM под названием M21 предлагается компанией Real Software Company из Регби, Великобритания .
- Существует также несколько реализаций MUMPS с открытым исходным кодом, включая некоторые исследовательские проекты. Наиболее примечательным из них является «Свинка/II» доктора Кевина О'Кейна (почетный профессор Университета Северной Айовы ) и студенческий проект. Доктор О'Кейн также портировал интерпретатор на Mac OS X. [ 13 ]
- Один из первоначальных создателей языка MUMPS, Нил Паппалардо, основал компанию MEDITECH в 1969 году. Они расширили и усовершенствовали язык MUMPS, назвав новый язык MIIS (а позже еще один язык под названием MAGIC). В отличие от InterSystems, MEDITECH больше не продает промежуточное программное обеспечение, поэтому MIIS и MAGIC теперь используются только внутри компании MEDITECH.
- Новинка на рынке с 2022 года – МиниМ от Евгения Каратаева.
Этот раздел нуждается в дополнительных цитатах для проверки . ( Октябрь 2018 г. ) |
Имя
[ редактировать ]Исполнительному директору InterSystems не нравилось название MUMPS, и он считал, что оно представляет собой серьезное маркетинговое препятствие. Таким образом, предпочтение М в некоторой степени стало восприниматься как согласие с InterSystems. Стандарт ANSI 1990 года был открыт как для M, так и для MUMPS, и после «всемирного» обсуждения в 1992 году группы пользователей Mumps официально изменили название на M. Спор также отражал соперничество между организациями (Ассоциация M Technology, Комитет по развитию MUMPS). , комитеты по стандартам ANSI и ISO) относительно того, кто определяет «официальное» название языка. [ нужна ссылка ]
По состоянию на 2020 год ISO по-прежнему упоминает M и MUMPS как официально принятые названия. [ 14 ]
Массачусетская больница общего профиля зарегистрировала «MUMPS» в качестве товарного знака в USPTO 28 ноября 1971 г. и продлила его 16 ноября 1992 г., но срок его действия истек 30 августа 2003 г. [ 15 ]
Дизайн
[ редактировать ]Этот раздел написан как руководство или руководство . ( февраль 2022 г. ) |
Обзор
[ редактировать ]MUMPS — это язык, предназначенный для создания приложений баз данных. Были включены функции дополнительного языка, чтобы помочь программистам создавать приложения с использованием минимальных вычислительных ресурсов. Исходные реализации были интерпретированы , хотя современные реализации могут быть полностью или частично скомпилированы . Отдельные «программы» выполняются в «разделах» памяти . Ранние разделы памяти MUMPS были ограничены 2048 байтами, поэтому агрессивное сокращение значительно способствовало мультипрограммированию на оборудовании с сильно ограниченными ресурсами, поскольку более чем одно задание MUMPS могло поместиться в очень небольшую память, существовавшую в оборудовании в то время. Возможность создания многопользовательских систем была еще одной особенностью языка. На это указывает слово « » Мультипрограммирование в аббревиатуре. Даже самые ранние машины, на которых работал MUMPS, поддерживали одновременное выполнение нескольких заданий. С переходом от мини-компьютеров к микрокомпьютерам, произошедшим несколько лет спустя, даже «однопользовательский ПК» с одним 8-разрядным процессором и 16 или 64 КБ памяти мог поддерживать несколько пользователей, которые могли подключаться к нему из (не графические ) видеотерминалы .
Поскольку изначально память была ограничена, при разработке языка MUMPS ценился очень краткий код. Таким образом, каждое имя команды или функции MUMPS может быть сокращено от одной до трех букв, например Выйти (выйти из программы) как Вопрос , $П = $Piece , Функция Р = Чтение команды, $ТР = $Перевести Функция . Пробелы и маркеры конца строки важны в MUMPS, поскольку область действия строки способствует такому же краткому языковому дизайну. Таким образом, одна строка программного кода может выразить с помощью нескольких символов идею, для которой в других языках программирования может потребоваться в 5–10 раз больше символов. Аббревиатура была общей чертой языков, разработанных в этот период (например, FOCAL-69 , ранних BASIC, таких как Tiny BASIC и т. д.). Неприятным побочным эффектом этого, в сочетании с ранней необходимостью писать минималистичный код, было то, что программисты MUMPS обычно не комментировали код и использовали обширные сокращения. Это означало, что даже опытный программист MUMPS не мог просто просмотреть страницу кода, чтобы увидеть его функцию, а должен был анализировать его построчно.
Взаимодействие с базой данных прозрачно встроено в язык. Язык MUMPS предоставляет иерархическую базу данных , состоящую из постоянных разреженных массивов , которая неявно «открывается» для каждого приложения MUMPS. Все имена переменных начинаются с символа каретки ( ^
) используют постоянное хранилище (вместо ОЗУ), сохраняют свои значения после выхода из приложения и будут видны другим запущенным приложениям (и могут быть изменены ими). Переменные, использующие это общее и постоянное хранилище, в MUMPS называются глобальными , поскольку область действия этих переменных «глобально доступна» для всех заданий в системе. Более позднее и более распространенное использование имени «глобальные переменные» в других языках представляет собой более ограниченный объем имен, обусловленный тем фактом, что переменные без области видимости «глобально» доступны для любых программ, работающих в одном и том же процессе, но не являются общими для всех программ. несколько процессов. Режим хранения MUMPS (т. е. глобальные переменные, хранящиеся в виде постоянных разреженных массивов) придает базе данных MUMPS характеристики документо -ориентированной базы данных . [ 16 ]
Все имена переменных, у которых нет префикса символа вставки ( ^
) являются временными и частными. Как и глобальные переменные, они также имеют иерархическую модель хранения, но «локально доступны» только для одного задания, поэтому их называют «локальными». И «глобальные», и «локальные» могут иметь дочерние узлы (называемые индексами в терминологии MUMPS). Индексы не ограничиваются цифрами: ASCII идентификатором индекса может быть любой символ или группа символов. Хотя это не редкость для современных языков, таких как Perl или JavaScript, для конца 1970-х годов это было весьма необычной особенностью. Эта возможность не была универсально реализована в системах MUMPS до стандарта ANSI 1984 года, поскольку стандарт требовал, чтобы были разрешены только канонические числовые индексы. [ 17 ] Таким образом, переменная с именем «Автомобиль» может иметь индексы «Дверь», «Рулевое колесо» и «Двигатель», каждый из которых может содержать значение и иметь собственные индексы. Переменная ^Car("Door")
например, может иметь вложенный индекс переменной «Цвет». Таким образом, вы могли бы сказать
SET ^Car("Door","Color")="BLUE"
изменить вложенный дочерний узел ^Car
. В терминах MUMPS «Цвет» — это второй индекс переменной. ^Car
(и имена дочерних узлов, и сами дочерние узлы также называются индексами). Иерархические переменные аналогичны объектам со свойствами во многих объектно-ориентированных языках. Кроме того, конструкция языка MUMPS требует, чтобы все индексы переменных автоматически сохранялись в отсортированном порядке. Числовые индексы (включая числа с плавающей запятой) сохраняются от наименьшего к наибольшему. Все нечисловые индексы хранятся в алфавитном порядке после номеров. В терминологии MUMPS это канонический порядок . Используя только неотрицательные целочисленные индексы, программист MUMPS может эмулировать тип данных массивов из других языков. Хотя MUMPS изначально не предлагает полный набор функций СУБД , таких как обязательные схемы, на его основе было построено несколько систем СУБД, которые предоставляют разработчикам приложений функции плоских файлов, реляционных и сетевых баз данных .
Кроме того, существуют встроенные операторы, которые обрабатывают строку с разделителями (например, значения, разделенные запятыми ) как массив. Ранние программисты MUMPS часто хранили структуру связанной информации в виде строки с разделителями, анализируя ее после считывания; это экономило время доступа к диску и давало значительные преимущества в скорости на некотором оборудовании.
MUMPS не имеет типов данных. Числа можно рассматривать как строки цифр, а строки можно рассматривать как числа с помощью числовых операторов ( принудительные в терминологии MUMPS). Однако принуждение может иметь некоторые странные побочные эффекты. Например, когда строка приводится, анализатор преобразует как можно большую часть строки (начиная слева) в число, а затем отбрасывает остальную часть. Таким образом, заявление IF 20<"30 DUCKS"
оценивается как TRUE
в СВИТКЕ.
Другие функции языка призваны помочь приложениям MUMPS взаимодействовать друг с другом в многопользовательской среде. Блокировки базы данных, идентификаторы процессов и атомарность транзакций обновления базы данных — все это требуется для стандартных реализаций MUMPS.
В отличие от языков традиций C или Wirth , некоторые пробелы между операторами MUMPS имеют значение. Один пробел отделяет команду от ее аргумента, а пробел или новая строка отделяет каждый аргумент от следующего токена MUMPS. Команды, которые не принимают аргументов (например, ELSE
) требуют двух следующих пробелов. Идея заключается в том, что один пробел отделяет команду от (несуществующего) аргумента, следующий — «аргумент» от следующей команды. Новые строки также важны; а IF
, ELSE
или FOR
команда обрабатывает (или пропускает) все остальное до конца строки. Чтобы эти операторы управляли несколькими строками, вы должны использовать DO
команда для создания блока кода.
Привет, мир! пример
[ редактировать ]Простое «Привет, Мир!» программа в MUMPS может быть:
write "Hello, World!",!
и будет запускаться с помощью команды do ^hello
после его сохранения на диск. Для непосредственного выполнения кода необходима своего рода «метка» (любая буквенно-цифровая строка) в первой позиции строки программы, чтобы сообщить интерпретатору паротита, с чего начать выполнение. Поскольку MUMPS позволяет объединять команды в одной строке и поскольку команды можно сокращать до одной буквы, эту процедуру можно сделать более компактной:
w "Hello, World!",!
' ,!
' после того, как текст генерирует новую строку. Этот код вернется в командную строку.
Функции
[ редактировать ]ANSI X11.1-1995 дает полное формальное описание языка; аннотированная версия этого стандарта доступна в Интернете. [ 18 ]
Языковые особенности включают в себя:
- Типы данных
- Существует один универсальный тип данных , который неявно приводится к строковым, целочисленным типам данных или типам данных с плавающей запятой в зависимости от контекста.
- логические значения (называемые истинностными значениями в MUMPS)
- В командах IF и другом синтаксисе, в котором выражения оцениваются как условия, любое строковое значение оценивается как числовое значение, и, если это ненулевое значение, оно интерпретируется как True.
a<b
дает 1, если a меньше b, и 0 в противном случае.
- Декларации
- Никто. Все переменные создаются динамически при первом присвоении значения.
- Линии
- являются важными синтаксическими объектами, в отличие от их статуса в языках, построенных по образцу C или Pascal. Несколько операторов в строке разрешены и являются обычным явлением. Область применения любого ЕСЛИ , ИНАЧЕ и Команда FOR — это «остаток текущей строки».
- Чувствительность к регистру
- Команды и встроенные функции нечувствительны к регистру. Напротив, имена и метки переменных чувствительны к регистру. Между прописными и строчными буквами нет особого значения, и существует несколько общепринятых соглашений. Знак процента (%) допустим в качестве первого символа переменных и меток.
- Посткондиционалы
- выполнением практически любой команды можно управлять, поставив после нее двоеточие и выражение истинностного значения.
SET:N<10 A="FOO"
устанавливает A в «FOO», если N меньше 10;DO:N>100 PRINTERR,
выполняет PRINTERR, если N больше 100. Эта конструкция предоставляет условие, область действия которого меньше полной строки.
- Аббревиатура
- Почти все команды и встроенные функции можно сократить до одного, двух или трех символов.
- Зарезервированные слова
- Никто. Поскольку MUMPS интерпретирует исходный код по контексту, нет необходимости в зарезервированных словах. Вы можете использовать имена языковых команд в качестве переменных, поэтому следующий код MUMPS является совершенно допустимым:
GREPTHIS() NEW SET,NEW,THEN,IF,KILL,QUIT SET IF="KILL",SET="11",KILL="11",QUIT="RETURN",THEN="KILL" IF IF=THEN DO THEN QUIT:$QUIT QUIT QUIT ; (quit) THEN IF IF,SET&KILL SET SET=SET+KILL QUIT
- MUMPS можно сделать более запутанным, используя сокращенный синтаксис оператора, как показано в этом кратком примере, полученном из примера выше:
GREPTHIS() N S,N,T,I,K,Q S I="K",S="11",K="11",Q="R",T="K" I I=T D T Q:$Q Q Q T I I,S&K S S=S+K Q
- Массивы
- создаются динамически, хранятся в виде B-деревьев , являются разреженными (т.е. почти не используют места для отсутствующих узлов), могут использовать любое количество индексов, а индексы могут быть строковыми или числовыми (включая числа с плавающей запятой). Массивы всегда автоматически сохраняются в отсортированном порядке, поэтому нет необходимости сортировать, упаковывать, переупорядочивать или иным образом реорганизовывать базу данных. Встроенные функции, такие как $ДАННЫЕ , $ ЗАКАЗ , $NEXT (устарело) и Функции $QUERY обеспечивают эффективный анализ и обход основной структуры массива на диске или в памяти.
for i=10000:1:12345 set sqtable(i)=i*i set address("Smith","Daniel")="[email protected]"
- Локальные массивы
- Имена переменных, не начинающиеся с символа курсора (т. е. «^»), сохраняются в памяти процессом, являются личными для создающего процесса и истекают после завершения создающего процесса. Доступное хранилище зависит от реализации. Для тех реализаций, которые используют разделы, он ограничен размером раздела (небольшой раздел может иметь размер 32 КБ). Для других реализаций это может быть несколько мегабайт.
- Глобальные массивы
^abc, ^def
. Они хранятся на диске, доступны всем процессам и сохраняются после завершения процесса создания. Очень большие глобальные переменные (например, сотни гигабайт) практичны и эффективны в большинстве реализаций. Это основной механизм «базы данных» MUMPS. Он используется вместо вызова операционной системы для создания, записи и чтения файлов.
- Косвенность
- во многих контекстах,
@VBL
может использоваться и эффективно заменяет содержимое VBL другим оператором MUMPS.SET XYZ="ABC" SET @XYZ=123
устанавливает переменную ABC в значение 123.SET SUBROU="REPORT" DO @SUBROU
выполняет подпрограмму REPORT. Эта замена позволяет выполнять отложенные вычисления и позднее связывание, а также фактически является операционным эквивалентом «указателей» в других языках.
- Функция кусочка
- Это разбивает переменные на сегментированные части, руководствуясь указанной пользователем строкой-разделителем (иногда называемой «разделителем»). Тем, кто знает awk, это покажется знакомым.
$PIECE(STRINGVAR,"^",3)
означает «третий фрагмент, разделенный кареткой». STRINGVAR .» Функция Piece также может выступать в качестве цели назначения (команда SET).
$PIECE("world.std.com",".",2)
урожайность стандартный .
- После
SET X="[email protected]"
SET $P(X,"@",1)="office"
приводит к тому, что X становится « [email protected] » (обратите внимание, что $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)
- Здесь без аргументов Для повторений до тех пор, пока не будет остановлен завершающим Покидать . Эта строка печатает таблицу я и
stuff(i)
где я последовательно 6, 10 и 15.
- Для итерации базы данных функция Order возвращает следующий ключ, который будет использоваться.
GTM>S n="" GTM>S n=$order(^nodex(n)) GTM>zwr n n=" building" GTM>S n=$order(^nodex(n)) GTM>zwr n n=" name:gd" GTM>S n=$order(^nodex(n)) GTM>zwr n n="%kml:guid"
MUMPS поддерживает несколько одновременных пользователей и процессов, даже если базовая операционная система этого не делает (например, MS-DOS ). Кроме того, существует возможность указать среду для переменной, например, указав имя компьютера в переменной (как в SET ^|"DENVER"|A(1000)="Foo"
), что позволит вам получить доступ к данным на удаленных машинах.
Критика
[ редактировать ] этой статьи Разделы «критика» или «противоречие» могут поставить под угрозу ее нейтральность . ( февраль 2022 г. ) |
Некоторые аспекты синтаксиса MUMPS сильно отличаются от синтаксиса более современных языков, что может вызвать путаницу, хотя эти аспекты различаются в разных версиях языка. В некоторых версиях пробелы внутри выражений не допускаются, поскольку они завершают оператор: 2 + 3
это ошибка и ее нужно написать 2+3
. Все операторы имеют одинаковый приоритет и левоассоциативны ( 2+3*10
оценивается в 50). Операторы «меньше или равно» и «больше или равно»: '>
и '<
(то есть логический оператор отрицания '
плюс оператор строгого сравнения в обратном направлении), хотя некоторые версии допускают использование более стандартного оператора <=
и >=
соответственно. Периоды ( .
) используются для отступа строк в блоке DO, а не пробелов. Команде ELSE не требуется соответствующий IF, поскольку она работает путем проверки значения встроенной системной переменной. $test
.
MUMPS Правила области видимости более либеральны, чем в других современных языках. Объявленные локальные переменные определяются с помощью стека. Подпрограмма обычно может видеть все объявленные локальные значения подпрограмм, находящихся ниже нее в стеке вызовов, и подпрограммы не могут запретить вызываемым ими подпрограммам изменять свои объявленные локальные значения, если только вызывающая сторона вручную не создаст новый уровень стека ( do
) и присваивает псевдоним каждой переменной, которую они хотят защитить ( . new x,y
) перед вызовом любых дочерних процедур. Напротив, необъявленные переменные (переменные, созданные с их использованием, а не с объявлением) находятся в области видимости всех подпрограмм, выполняющихся в одном и том же процессе, и остаются в области видимости до выхода из программы.
Поскольку ссылки на базу данных MUMPS отличаются от ссылок на внутренние переменные только префиксом курсора, непреднамеренно отредактировать базу данных или даже удалить «таблицу» базы данных опасно легко. [ 19 ]
Пользователи
[ редактировать ]Министерство по делам ветеранов США (ранее Управление по делам ветеранов) было одним из первых крупных пользователей языка MUMPS. Их работа по разработке (и последующий вклад в кодовую базу бесплатных приложений MUMPS) оказала влияние на многих медицинских пользователей по всему миру. В 1995 году система приема/отслеживания/выписки пациентов Управления по делам ветеранов, компьютерная программа децентрализованной больницы (DHCP), была удостоена премии Смитсоновского института Computerworld за лучшее использование информационных технологий в медицине. В июле 2006 года Департамент по делам ветеранов (VA) / Управление здравоохранения ветеранов (VHA) был удостоен награды «Инновации в американском правительстве», врученной Институтом Эша Школы государственного управления Джона Ф. Кеннеди при Гарвардском университете за продление срока действия программы. DHCP в архитектуру информационных систем и технологий здравоохранения ветеранов ( VistA ). Почти вся система больниц для ветеранов в США, Служба здравоохранения Индии и основные подразделения Министерства обороны. Больничная система CHCS использует базы данных MUMPS для отслеживания клинических данных.
Другие ИТ-компании в сфере здравоохранения, использующие MUMPS, включают:
- Эпический
- МЕДИТЕК
- GE Healthcare (ранее IDX Systems и Centricity )
- AmeriPath (часть Quest Diagnostics)
- Центр ухода
- Всескрипты
- Здравоохранение Ковентри
- ЭМИС Здоровье
- Sunquest Information Systems (ранее Misys Healthcare [ 20 ] ).
- Нетсмарт
Многие референс-лаборатории, такие как DASA, Quest Diagnostics , [ 21 ] и Dynacare, используйте программное обеспечение MUMPS, написанное или основанное на коде Antrim Corporation. Antrim была приобретена компанией Misys Healthcare (ныне Sunquest Information Systems ) в 2001 году. [ 22 ]
MUMPS также широко используется в финансовых приложениях. MUMPS рано завоевал популярность в финансовом секторе и используется во многих банках и кредитных союзах. Его используют Банк Англии и Barclays Bank . [ 23 ] [ 24 ] [ 25 ]
Реализации
[ редактировать ]С 2005 года наиболее популярными реализациями MUMPS являются MUMPS Greystone Technology (GT.M) от Fidelity National Information Services и Caché от Intersystems Corporation. Европейское космическое агентство объявило 13 мая 2010 года, что оно будет использовать базу данных InterSystems Caché для поддержки миссии Gaia . Целью этой миссии является составление карты Млечного Пути с беспрецедентной точностью. [ 26 ] InterSystems находится в процессе отказа от Caché в пользу Iris. [ 27 ]
Другие текущие реализации включают в себя:
- М21
- YottaDB [ 28 ]
- Минимум
- Эталонный стандарт М
- ФриМ
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Твид, Роб; Джеймс, Джордж (2 августа 2008 г.). «MUMPS: база данных масштаба Интернета» . Архивировано из оригинала 27 сентября 2021 года . Проверено 25 октября 2022 г. - через SlideShare .
- ^ Гринс, Роберт; Паппалардо, А. Нил; Марбл, Курт В.; Барнетт, Дж. Окто (1969). «Проектирование и внедрение системы управления клиническими данными». Компьютерные биомедицинские исследования . 5 (октябрь): 469–85. дои : 10.1016/0010-4809(69)90012-3 . ПМИД 11697375 .
- ^ Гринс, Роберт А; Барнетт, Дж. Окто; Кляйн, Стюарт В.; Роббинс, Энтони; Прайор, Родерик Э. (1970). «Запись, поиск и просмотр медицинских данных путем взаимодействия врача и компьютера». N Engl J Med . 282 (6): 307–15. дои : 10.1056/NEJM197002052820605 . ПМИД 5410816 .
- ^ Пендерграсс, Генри П.; Гринс, Роберт А; Барнетт, Дж. Окто; Пойтрас, Джеймс В.; Паппалардо, А. Нил; Мрамор, Курт В. (1969). «Онлайн-компьютерная система для систематизированного ввода радиологических заключений». Радиология . 92 (4): 709–13. дои : 10.1148/92.4.709 . ПМИД 5767748 .
- ^ Перейти обратно: а б с Траск, Гарднер; Даймонд, Джон (6 апреля 1999 г.). «Часто задаваемые вопросы о M-технологиях и языке MUMPS, часть 1/2» . Группа новостей : comp.lang.mumps . Usenet: [электронная почта защищена] . Проверено 25 октября 2022 г.
- ^ Справочное руководство по языку VAX-11 DSM . Корпорация цифрового оборудования. 1982. OCLC 29217964 .
- ^ «Серверы HP NonStop, список обслуживания программного обеспечения, дата вступления в силу: январь 2012 г.» (PDF) . Компания Hewlett-Packard Development, LP 20 января 2012 г. п. 32 . Проверено 17 мая 2014 г.
- ^ «Вышли две версии MUMPS» . Компьютерный мир . Том. XXI, нет. 48. 30 ноября 1987 г. Проверено 9 июля 2022 г.
- ^ Грабшайд, Пол; Рэгон, Терри (2 января 1995 г.). «Объявление ДСМ» . Группа новостей : comp.lang.mumps . Usenet: [электронная почта защищена] . Проверено 25 октября 2022 г.
- ^ «Санчес предлагает базу данных GT.M в качестве бесплатного программного обеспечения с открытым исходным кодом для пользователей GNU/Linux» . Sanchez Computer Associates, Inc. (Пресс-релиз). 8 ноября 2000 г. Архивировано из оригинала 28 апреля 2004 г. Проверено 12 августа 2013 г.
{{cite press release}}
: CS1 maint: неподходящий URL ( ссылка ) - ^ «Высококачественный механизм базы данных GT.M TP» . Sourceforge.net . Проверено 12 августа 2013 г.
- ^ «База данных и язык MUMPS» . Sourceforge.net . Проверено 12 августа 2013 г.
- ^ «Свинка/Мии» . Сайт Rychannel.com. 08.11.2012 . Проверено 12 августа 2013 г.
- ^ «ISO/IEC 11756:1999(en) Информационные технологии. Языки программирования. М» . www.iso.org . 2020 . Проверено 18 апреля 2024 г.
- ^ «Статус товарного знака и поиск документов» . tsdr.uspto.gov . Проверено 26 февраля 2018 г.
- ^ «Экстремальное программирование баз данных с помощью MUMPS Globals» (PDF) . Gradvs1.mjgateway.com . Проверено 13 августа 2013 г.
- ^ «Аннотированные стандарты M[UMPS]» . 71.174.62.16. 29 ноября 2011 г. Проверено 12 августа 2013 г.
- ^ «Аннотированные стандарты M[UMPS]» . 71.174.62.16 . Проверено 26 февраля 2018 г.
- ^ Ричмонд, Джозеф Робин (1984). Показатели ремонтопригодности программного обеспечения для программ MUMPS (PhD). Центр медицинских наук Техасского университета в Далласе . OCLC 13285529 .
- ^ «SunQuest выходит из тени Мисис» . Новости ИТ в сфере здравоохранения. 13 марта 2008 года . Проверено 12 августа 2013 г.
- ^ «Критически важный Ajax: упрощение и ускорение заказа тестов в Qu» . Slideshare.net. 5 апреля 2008 года . Проверено 12 августа 2013 г.
- ^ «Sunquest приобретает Antrim Corp. — Бесплатная онлайн-библиотека» . Thefreelibrary.com. 26 ноября 1996 г. Проверено 12 августа 2013 г.
- ^ «Добро пожаловать в М21 — базу данных XXI века» . M21.uk.com . Проверено 13 августа 2013 г.
- ^ «Финансовые системы на основе Caché» . ИнтерСистемс . Архивировано из оригинала 2 июня 2013 г. Проверено 13 августа 2013 г.
- ^ «Банковские и ERP-приложения IDEA под ключ» . Idea.cz. Проверено 13 августа 2013 г.
- ^ «Европейское космическое агентство выбирает базу данных InterSystems Caché для миссии Gaia по составлению карты Млечного Пути» . Realwire.com. 13 мая 2010 года . Проверено 13 августа 2013 г.
- ^ «ИнтерСистемс Ирис» . ИнтерСистемс . Проверено 18 марта 2021 г.
- ^ «Сайт YottaDB» . yottadb.com. 24 мая 2024 г. Проверено 24 мая 2023 г.
Дальнейшее чтение
[ редактировать ]- Уолтерс, Ричард Ф. (15 января 1989 г.). Азбука MUMPS: введение для начинающих и программистов среднего уровня (2-е изд.). Цифровая пресса. ISBN 978-1555580179 . LCCN 88033522 . OCLC 18989618 . ОЛ 2055247М .
- Уолтерс, Ричард Ф. (19 июня 1997 г.). M-программирование: подробное руководство (2-е изд.). Цифровая пресса. 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). Язык MUMPS (на европейском испанском языке) (1-е изд.). Барселона: ППУ. ISBN 978-8447701254 . OCLC 435380102 . ОЛ 40214570М .
- О'Кейн, КЦ; Язык для реализации программного обеспечения для поиска информации, Online Review, том 16, № 3, стр. 127–137 (1992).
- О'Кейн, КЦ; и МакКоллиган, Э.Э., Исследование истории болезни, связанной с эпидемическим паротитом, в интранет-сети, Журнал Общества систем информации и управления здравоохранением, том 11, № 3, стр. 81–95 (1997).
- О'Кейн, КЦ; и МакКоллиган, Э.Э., Виртуальная машина для лечения паротита через Интернет, Труды Американской ассоциации медицинской информатики, 1997 г.
- О'Кейн, К.С., Язык программирования «Свинка», Createspace, ISBN 1-4382-4338-3 , 120 страниц (2010 г.).
Внешние ссылки
[ редактировать ]- Траск, Гарднер; Даймонд, Джон (6 апреля 1999 г.). «Часто задаваемые вопросы о M-технологиях и языке MUMPS, часть 1/2» . Группа новостей : comp.lang.mumps . Usenet: [электронная почта защищена] . Проверено 25 октября 2022 г.
- "comp.lang.mumps" . Группа новостей : comp.lang.mumps . Проверено 25 октября 2022 г. - через группы Google .
- Интерпретатор языка программирования Mumps (GPL) , Кевин О'Кейн, Университет Северной Айовы
- Свинка на SourceForge
- M Ссылки на Hardhats.org
- Разработка и эксплуатация лабораторной информационной системы MUMPS: десятилетний опыт в больнице Джонса Хопкинса
- Технологические решения IDEA Systems на базе YottaDB (ранее FIS GT.M) и Caché.
- Документация, темы и ресурсы MUMPS (смешанный чешский и английский языки)
- Язык программирования MUMPS
- Обработка данных
- Языки программирования, ориентированные на данные
- Корпорация цифрового оборудования
- Динамически типизированные языки программирования
- Информатика здравоохранения
- стандарты МЭК
- стандарты ИСО
- Массачусетская больница общего профиля
- ПДП-11
- Постоянные языки программирования
- Языки программирования со стандартом ISO
- Языки сценариев
- Языки программирования, созданные в 1966 году.