MUMPS жив? [закрыто]

11

На моем первом рабочем месте мы использовали цифровой стандарт MUMPS на 11-клоне PDP (TPA 440), затем мы перешли на стандарт MUMPS Micronetics, работающий на машине Hewlett-Packard, HP-UX 9, примерно в начале 90-х годов.

Все еще живы? Кто-нибудь этим пользуется? Если да, напишите несколько слов об этом: используете ли вы его в текстовом режиме, он работает как веб-сервер? и т.д. (я имею в виду Caché тоже.)

Если вы использовали его, что вы думаете об этом? Тебе понравилось?

ern0
источник
1
Я не думаю, что кому-то нравится что-то похожее на это . По крайней мере, Perl выразителен.
imgx64
13
"Живы ли MUMPS?" - Да, но все разработчики убивают себя.
Стивен Эверс
@ imgx64 Бог, который выглядит ужасно!
TheLQ 20.09.10
Вам не нужно использовать краткую форму команд «DHSY =% YK% H,% YQ», вам нужно написать полные имена команд (и использовать более длинные имена меток / переменных): «Do HourCount Set Year =% YearParam Kill% HourParam ,% YearParam Quit ". Кроме того, после нескольких лет использования формы коротких команд, я написал 20-строчную программу с использованием команд длинной формы и переменных с длинными именами. Моим коллегам сказали: «Хорошо, это хорошая шутка, но не делай этого больше», читать было в 10 раз сложнее, чем короткие команды.
ern0

Ответы:

11

Intersystems продает производную MUMPS: http://www.intersystems.com

Некоторые из самых интересных людей в MUMPS, вероятно, здесь: http://www.outoftheslipstream.com/

Я начал вести блог о Cache (производной MUMPS) пару лет назад: http://cachetastic.blogspot.com/ (но затем сменил работу)

Побывав за пределами этого мира пару лет, я думаю, что движение NoSQL, вероятно, лучшее и худшее, что может случиться с MUMPS. В конечном счете, это может оправдать и убить его. Потому что в какой-то момент кто-то собирается заново идентифицировать базу данных и структуру запросов MUMPS практически одинаково, но без связи с традицией MUMPS. Тогда люди будут в восторге от этой новой системы хранения. Но никто никогда не выберет производную MUMPS снова.

Например, месяц или два назад я говорил с коллегой об использовании redis для кэширования поиска чего-либо в нашем приложении Django. У нас было большое количество записей, адресованных тройкой из трех ключей, и нам нужно было быстро получить подмножества, соответствующие одному или двум из этих ключей (но разные комбинации в разное время).

Это то, что MUMPS ест на завтрак. Но нам было трудно проникнуть в ключевую структуру valis пары redis. Даже со словарями. (То же самое относится и к memcached и т. Д.) Впервые в жизни я обнаружил, что сожалею о том, что не смог написать этот модуль на Cache ObjectScript.

Еще несколько мыслей о Cache здесь:

Хорошо: http://cachetastic.blogspot.com/2008/07/ok-after-mentioning-some-bad-things.html

Плохо: http://cachetastic.blogspot.com/2008/07/some-mumps-dissing-and-more-positive.html

Interstar
источник
9

Забавный интерстар должен упомянуть Redis. Я фактически полностью изменил поведение Redis, используя Mumps (как Cache, так и GT.M). Эмуляция его упрощенной и базовой структуры пары ключ / значение и API-интерфейсов была простой задачей, и клиенты Redis, которые я тестировал, даже не знают, что они общаются с базой данных Mumps вместо правильного Redis.

Однако, как говорит Interstar, база данных Mumps способна на гораздо большее с точки зрения как структуры данных (фактически база данных Mumps может легко эмулировать все 4 типа базы данных NoSQL: ключ / значение, табличная таблица, документ и график, а также может моделировать реляционные и объектные базы данных - все сразу, если необходимо), а также правильно отсортированный и автоматический баланс между оперативной памятью и диском. В отличие от баз данных NoSQL, которые существовали всего несколько лет, технологии Mumps являются зрелыми, испытанными, протестированными, хорошо поддерживаемыми и имеют доступные аналитические и административные пакеты, и обладают такой производительностью, за которую могут умереть многие базы данных NoSQL, такие как CouchDB. ,

Так почему же производители Cache и GT.M не продвигаются на рынке NoSQL, а не позволяют кому-то изобретать свои колеса, как вы говорите?

Что касается уставших старых споров о языке и использовании этого древнего и устаревшего примера с сайта Википедии:

а) Доступ к базе данных Mumps может получить ваш любимый сексуальный современный язык, если вы хотите

б) этот стиль программирования сочетался с ковчегом, и в то время он был написан так, чтобы выжать изумительную производительность компьютеров PDP, которые имели меньшую вычислительную мощность, чем чип в ваших часах. Современное кодирование Mumps на самом деле очень похоже по стилю на Python и может быть таким же чистым, читаемым и обслуживаемым.

в) Как и любой язык, есть хорошие примеры, которые можно найти, и ужасные. Не думайте, что кодирование Mumps должно быть таким же непрозрачным и старомодным, как пример на сайте Википедии.

... и Мейсон, мой вывод таков: возможно, вы не так хорошо знакомы с ландшафтом базы данных, как думали! :-) Если у вас была какая-либо медицинская помощь в вашей жизни, ваша информация будет проходить через многочисленные системы Mumps, включая те, которые управляют запросом ваших тестов. Содержание вашей ежедневной газеты может управляться системой Mumps, и даже пицца, которую вы заказывали онлайн, вероятно, тоже была через систему Mumps. Логистика товаров, которые вы, возможно, отправили за границу, вероятно, осуществлялась через систему Mumps, и если вы оказались исследователем, которому нужны были какие-то необычные металлы или керамика, вы, вероятно, заказали бы их через систему Mumps.

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

обкрадывать
источник
1
Я думаю, что язык не плохой. Я не пробовал, но это должно быть довольно быстро на современном оборудовании. Последняя версия MSM поддерживала структурированное программирование: локальные переменные (новая команда), параметры функций, встроенные подпрограммы для многострочных. Мы были очень довольны этими функциями, и мы создали множество утилит: средство просмотра списков, меню и т. Д. Наконец, мы исчерпали стек, поэтому мы попросили Micronetics увеличить размер стека. Они скомпилировали нам стековую версию MSM с 32-разрядной версией вместо 16-разрядной по умолчанию.
2010 года
1
Чтобы немного оттолкнуть Роба, хотя я думаю, что на базу данных MUMPS стоит обратить внимание, мне интересно, можно ли еще назвать базу данных, доступную с другого языка, MUMPS. Любой, кто выберет MUMPS, ожидает запуска устаревшего кода. Так что MUMPS, нравится вам это или нет, равняется db + язык.
Интерстар
2
Как я уже упоминал в другом месте, настоящая катастрофа / разжигатель языка - это динамическая область видимости. Я не думаю, что какой-либо инженер сегодня может оправдать выбор языка без локальных переменных, которые остаются локальными. Итак, во что бы то ни стало используйте MUMPS db в качестве компонента черного ящика, но язык не подлежит искуплению и должен быть остановлен.
Интерстар
1
У свинки есть полная лексическая область видимости переменных - это делалось годами, но многие, похоже, этого не замечали! Код Mumps может быть таким же чистым и вести себя хорошо, как и любой другой язык. На самом деле Mumps имеет много общего с Javascript с точки зрения переменной области видимости. Например, New в Mumps, по сути, такой же, как var в Javascript. Однако по умолчанию переменные имеют глобальную область видимости на обоих языках.
Роб
1
Роб. Я конечно не заметил лексическую область видимости переменных в Cache. Как насчет моего примера в cachetastic.blogspot.com/2008/07/… ? При этом используется ключевое слово «new», но это абсолютно НЕ то правило, которое вам нужно. X в f и x в g НЕ должны быть одной и той же переменной, БЕЗ необходимости явно скрывать любой x, который оказался в стеке. То же самое, преобразованное в javascript, заменив COS «new» на «var» правильно, дает x в f как неопределенное.
Interstar
6

MUMPS очень жив. Это была одна из самых надежных систем, попавшая в хорошие руки. Штат программистов обычно невелик, а время работы впечатляет. Непосвященным может показаться, что MUMPS является бестолковым, но можно написать очень понятный и высокофункциональный код с очень небольшим количеством нажатий клавиш, а структуры данных, поддерживаемые MUMPS, делают его чрезвычайно мощным и легко переносимым на различные архитектуры. Все больницы VA используют MUMPS, и в большинстве случаев среднее время ремонта очень быстрое. Система VistA, написанная на MUMPS, легко загружается из Source Forge и имеет полимодальную природу (доступ к базе данных можно получить разными способами, с прокруткой и прокруткой, с помощью тонкого клиента, браузера или RPC или другого программного интерфейса) VistA и MUMPS. для многих, кто вникает в это. MUMPS - это простой язык с очень небольшим количеством команд и одним типом данных. Его легко выучить, потому что он является интерпретируемым языком и не затрагивает стек и таблицу символов, чтобы точно увидеть, что происходило, когда приложение останавливалось для отладки. VistA использовалась для управления больницами Министерства обороны (Composite Health Care System, CHCS), а также Индийской службой здравоохранения (IMS RPMS), а однажды использовалась Службой общественного здравоохранения США. Это сэкономило стране много миллионов долларов на эксплуатационных расходах. MUMPS работает практически на чем угодно. Он легко моделирует любую другую модель базы данных и обеспечивает удивительно быстрый доступ к базам данных. Модель MUMPS может на самом деле получить более высокую производительность с большим количеством пользователей в системе (в некоторых случаях из-за аспектов кэширования MUMPS, где блоки указателя, необходимые для поиска блока данных, уже находятся в памяти и их не нужно снова извлекать, кстати, издержки на указатель для MUMPS составляют всего около 2%, поэтому большая часть вашей базы данных это фактические данные пользователя). MUMPS изначально был написан для запуска на 2K-машине. Наступление новых технологий только расширило все возможности среды MUMPS в области, где целые больницы теперь работают на недорогих товарных серверах. Вначале MUMPS оторвался от аппаратного обеспечения и очень хорошо выиграл от этого решения. Мы не беспокоимся о размере или точности слова, а также о количестве или размере. База данных имеет позднюю привязку и увеличивается по мере необходимости. Ни одна запись в любой базе данных не может быть больше, чем нужно. База данных может быть расширена или сокращена в соответствии с частью записи или в целом записи. MUMPS все еще рядом? Вместо того, чтобы подключить 8 пользователей к PDP-11/34, вы можете получить пару сотен пользователей на настольном ПК под своим столом. Он используется в банковской сфере, на Европейской фондовой бирже, в индустрии туризма (отели и агентства бронирования), в некоторых домах по продаже автозапчастей и в большинстве успешных больниц (коммерческих, частных или общественных) в той или иной форме работает MUMPS. В настоящее время VA имеет более 30 лет истории исходов для более чем 9 миллионов пациентов. Само по себе это то, чего не достигла ни одна другая система здравоохранения, за исключением больницы Beth Israel / Deaconess в Бостоне, имеющей более чем 35-летний опыт работы в своей собственной системе MUMPS. Еще бы? Вместо того, чтобы подключить 8 пользователей к PDP-11/34, вы можете получить пару сотен пользователей на настольном ПК под своим столом. Он используется в банковской сфере, на Европейской фондовой бирже, в индустрии туризма (отели и агентства бронирования), в некоторых домах по продаже автозапчастей и в большинстве успешных больниц (коммерческих, частных или общественных) в той или иной форме работает MUMPS. В настоящее время VA имеет более 30 лет истории исходов для более чем 9 миллионов пациентов. Само по себе это то, чего не достигла ни одна другая система здравоохранения, за исключением больницы Beth Israel / Deaconess в Бостоне, имеющей более чем 35-летний опыт работы в своей собственной системе MUMPS. Еще бы? Вместо того, чтобы подключить 8 пользователей к PDP-11/34, вы можете получить пару сотен пользователей на настольном ПК под своим столом. Он используется в банковской сфере, на Европейской фондовой бирже, в индустрии туризма (отели и агентства бронирования), в некоторых домах по продаже автозапчастей и в большинстве успешных больниц (коммерческих, частных или общественных) в той или иной форме работает MUMPS. В настоящее время VA имеет более 30 лет истории исходов для более чем 9 миллионов пациентов. Само по себе это то, чего не достигла ни одна другая система здравоохранения, за исключением больницы Beth Israel / Deaconess в Бостоне, имеющей более чем 35-летний опыт работы в своей собственной системе MUMPS. индустрия туризма (отели и агентства бронирования), некоторые автозапчасти и наиболее успешные больницы (коммерческие, частные или общественные) используют MUMPS в той или иной форме. В настоящее время VA имеет более 30 лет истории исходов для более чем 9 миллионов пациентов. Само по себе это то, чего не достигла ни одна другая система здравоохранения, за исключением больницы Beth Israel / Deaconess в Бостоне, имеющей более чем 35-летний опыт работы в своей собственной системе MUMPS. индустрия туризма (отели и агентства бронирования), некоторые автозапчасти и наиболее успешные больницы (коммерческие, частные или общественные) используют MUMPS в той или иной форме. В настоящее время VA имеет более 30 лет истории исходов для более чем 9 миллионов пациентов. Само по себе это то, чего не достигла ни одна другая система здравоохранения, за исключением больницы Beth Israel / Deaconess в Бостоне, имеющей более чем 35-летний опыт работы в своей собственной системе MUMPS.

Крис Ричардсон
источник
6

Есть пара серьезных вопросов по эпидемическому паротиту на SO:

/programming/tagged/mumps

Колин Пикард
источник
Почему отрицательный голос? Вопрос был еще живы? Кто-нибудь этим пользуется? - несомненно, это уместное свидетельство того, что кто-то серьезно пишет новый код и / или изучает MUMPS?
Колин Пикард
4

Да, MUMPS очень жив. Значительная часть больниц VA в США использует MUMPS.

Кавет Керек
источник
3
И хорошая часть пациентов живы? :-)
Maniero
8
@bigown: Конечно. Если нет, они все равно не будут пациентами.
Мейсон Уилер
4

VISTA (ветеранов здравоохранения Информационные системы и технологии Архитектура) является AFAIK еще в активном развитии: http://en.wikipedia.org/wiki/VistA_EMR

трясина
источник
3

Я также новичок в g.tm, но я могу ответить на это:

Да, Свинка жива. Над этим все еще работают люди. Вот некоторые примеры :

http://georgejames.com/, который написал api-сервер Openstreetmap в gt.m, который я изучаю сейчас.

В настоящее время существуют также современные корпоративные веб-инструменты для g.tm http://gradvs1.mgateway.com/main/

и последнее доказательство того, что он жив, это то, что он был портирован на новейшие GNU / linux и облачные платформы.

Майк

h4ck3rm1k3
источник
2

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

Стив Врановский
источник
1

Вы должны прочитать это:

http://thedailywtf.com/Articles/A_Case_of_the_MUMPS.aspx

о MUMPS.

С другой стороны, я работаю в округе Колумбия и встречаюсь с людьми довольно регулярно, которые не только знают, что такое MUMPS, но и работают в нем часто.

Билл Липер
источник
Это .... это ужаснуло меня. Я чувствую, что мне нужно купаться, сейчас. :(
Мэтт ДиТролио
1
В эпоху SQL трудно объяснить, что эти проблемы, перечисленные в этой статье, являются особенностями. Одно письмо для скорости. Один тип намного лучше, чем автоматический набор. Etc.
ern0
1

Ну, я никогда не слышал о том, чтобы кто-нибудь использовал его, ни в каком контексте, ни по любой причине, кроме как на The Daily WTF. Какие выводы из этого можно сделать, зависит от читателя. ;)

Мейсон Уилер
источник
1

Пример Interstar правильно написан для использования функций:

f ;   
  new x  
  set x=$$g()  
  write x  
  quit  

g()  
  new x  
  set x = 5  
  quit x  

do f  

fэто процедура, которая вызывается с помощью do. Если, как и в этом случае, он не имеет формальных параметров, вам не нужно (). Процедура просто завершается и ничего не возвращает.

g()с другой стороны, это функция. Новое xимеет решающее значение для правильного охвата x. Функция вызывается, предшествуя ее имени, $$и она ВЫХОДИТ с возвращаемым значением. У функции должен быть объявлен список формальных параметров, даже если он пустой, как здесь. На самом деле вы могли бы написать этот экземпляр g()как просто:

g()  
 quit 5

Теперь все будет отлично себя вести. По какой-то причине многие разработчики Mumps, похоже, не заметили или не поняли существование функций или не понимают разницу между ними и процедурами. Я думаю, что это одна из причин, по которой люди, впервые знакомые с Mumps, в ужасе (не удивительно) вскидывают руки - там очень много ужасного кода.

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

обкрадывать
источник
Теперь одна из причин, по которой вы видите код Mumps, который не использует новые команды и который полагается на переменные, являющиеся глобальными (поэтому он ломается, если вы создаете новые переменные), заключается в том, что он был написан в то время, когда раньше функции и лексический обзор был добавлен к языку. К сожалению, существует много унаследованного кода, и да, в конечном итоге он становится кошмаром, но это наследие для вас. С другой стороны, вполне возможно написать чистый, современный, хорошо ведущий себя код Mumps, при условии, что вы пишете новые вещи с нуля без каких-либо устаревших вещей, о которых можно беспокоиться.
Роб
Глядя на исходный пример, значение x, когда new'd в процедуре f автоматически становится доступным для g - это просто способ Mumps. Точно так же люди, привыкшие к языкам C-синтаксиса, удивляются, когда обнаруживают, что область видимости в Javascript применяется только к функциям, а не, например, внутри циклов или блоков внутри функции. Так оно и есть - раз вы знаете это, вы соответственно с этим справляетесь. Такие идиосинкразии не мешают людям принимать и принимать Javascript.
Роб
Роб: «Глядя на исходный пример, значение x, когда new'd в процедуре f автоматически становится доступным для g - это именно то, чем является Mumps». Верно! И это означает, что MUMPS имеет динамический охват, а не лексический охват. В лексически ограниченном языке вам не нужно иметь «новый x» в функции g, потому что лексическая структура программы (т. Е. Тот факт, что g определяется вне определения f) достаточна, чтобы гарантировать, что xs, на которые ссылаются в g и f, это две совершенно разные переменные.
Interstar
Роб. В более широком смысле, то, что хорошо дисциплинированная команда программистов MUMPS, пишущих с нуля и тщательно использующих «новые», чтобы гарантировать, что все переменные являются локальными, может избежать трудностей динамического определения объема. Конечно, я согласен. Но зачем нам железная дисциплина и сотни дополнительных строк кода, чтобы копировать то, что каждый другой современный язык дает вам бесплатно? Кроме того, если вы столкнулись с унаследованным кодом, который не был написан с этой дисциплиной, почти невозможно вставить его позже, потому что вы не можете сказать, использует ли система один из этих нелокальных элементов для передачи информации ,
Interstar
Существуют другие (более старые) методы для разделения переменных подпрограммы: все имена переменных системных утилит начинаются со знака «%», поэтому они находятся в «пространстве имен системы». Кроме того, именование переменных в New - это скорость: если вы используете команду explicite для помещения повторно используемых переменных в стек, интерпретатор сам ничего не должен делать при вводе подпрограммы. Также вы можете использовать New без параметров, что скрывает все текущие переменные.
ern0