The MUMPS 76 Primer – anniversary edition
49 points - today at 12:41 PM
Sourcefortuitous-frog
today at 3:16 PM
For the curious, newer versions of MUMPS are still used as the core database framework by a lot of electronic health records companies. Most notably, it’s the backbone of Epic Systems, the largest EHR company in the US.
Do they really use MUMPS? Not something like ObjectScript?
NetMageSCW
today at 6:16 PM
That was very disappointing to read. We might be migrating from an old M system (Meditech Magic) to a new M system (Epic).
At least the front end is much more modern.
It’s always useful to look at prior art and review capabilities we might have missed. Innovation can happen by mixing the “good parts” of different old ideas.
MUMPS’ bad reputation is totally unearned. Most examples online (the wiki page, the awful Case of the MUMPS article) are examples of MUMPS code from the 60s-70s when storage was a premium and enterprise-size programs had to fit in a handful of megabytes, so there was no room for readability.
MUMPS code is more readable than most languages, it’s very simple and procedural. And the ability to interact directly with durable data the same as you do local data is very nice. I don’t know why no modern languages try to do something similar.
I did most of Advent of Code last year code golfing in MUMPS (running on Caché), with the additional challenge on up to and including day 7 doing without literals - that's to say no numbers and no strings. It was good fun - https://github.com/dominique-m-aoc/aoc-2025/blob/main/day03p... for day three part 1 for example. Or day 7 part 2 where the alphanumeric chars spell a story with only two nonsense words, with almost all the chars being on their own: https://github.com/dominique-m-aoc/aoc-2025/blob/main/day07p... It is a neat language but even more so a neat overall system and bag of concepts that I feel annoyed we haven't seen more of...
How do you think your code would do in GT.M or Yottadb? I understand both are open source (vs Cache).
That's cool; amazing you indeed coded in MUMPS and not in ObjectScript ;-) Caché is (was) a great technology; ironically they tried to look like a relational database in the nineties, and then eventually came the NoSql boom. How did you get to MUMPS?
First job out of university and stuck around with it for the next dozen years, probably longer than sensible... in the context of maintaining a bag of software that got put together in the mid-80s, a substantial module of which continued to enjoy some moderate success to this day.
Also, the marketing term was post-relational if I recall correctly, the funny thing about that being that it was really pre-relational at first. Also, I forgot, it was IRIS this AOC stuff runs on - the $ZV actually needs that "R" in IRIS so it knows what label to jump to... and what file mode to use... it's wonderfully cursed ;P
That said, it doesn't hold a candle compared to this: https://stackoverflow.com/questions/4151554/need-mumps-sampl... which is just about the best obscured (or byte-saving rather) MUMPS snippet in existence.
One thing I miss about Caché/Ensemble/IRIS is the three different paradigms for manipulating the same bits of data - the whole object layer, SQL (with pre-compiled embedded SQL an option), and the raw global access.
kstrauser
today at 3:23 PM
Built-in hierarchical DB? Neat!
DB access using same syntax as local variables? Neat!
Datetime epoch in 1841? Ok, sure.
Stringly typed with literally no other types? Uh…
Appendix 7 on this page http://www.faqs.org/faqs/m-technology-faq/part2/ : runs screaming into the night
It had some neat ideas, some alright ideas that were reasonable in the context it was created for, and some absolute nightmare fuel.
I’ve been working on a project to celebrate the anniversary of MUMPS and its first standard.
For those unfamiliar, MUMPS is an imperative language famously born at Massachusetts General Hospital in 1966. Its defining characteristic is that the language and the database are deeply integrated, acting as an early NoSQL database decades before the term existed.
See here for more information about the project: https://github.com/rochus-keller/mumps/
There are pre-compiled versions of my MUMPS 76 interpreter in case you want to play with it.
NetMageSCW
today at 6:20 PM
I protest the characterization of Smalltalk as legacy. Seeing Cedar mentioned was very cool - Cedar/Mesa along with Trellis/Owl were environments
I was very interested in during my late high school / early college days, though I had no access to either. I do have a lot of Trellis documentation lying around somewhere someone at DEC kindly sent me when I wrote them about it.
obligatory reference: https://thedailywtf.com/articles/a_case_of_the_mumps
Well, try to run C++, C# or Java on a PDP-7 or PDP-9.
In 1976, the year of the first standard, massive hospitals with thousands of patients run on MUMPS, on PDP machines with 8K to 24K of core memory and many concurrent users.
sgerenser
today at 2:52 PM
I don't think anyone is really blaming MUMPS for the limitations it had to work with 1970s tech. The story was more about how terrible it is to work with in the 2000s and the surprising fact that it's still in use today in certain niches.
My project and the referenced primer are about the 1976 standard.
But many MUMPS based systems are still in operation and maintenance today; and not many significant systems in IT reach a 50 year lifetime.
A modern JavaScript, PHP or Python system (languages with similar limitations for large-scale software engineering as MUMPS) written five years ago hardly works today because dependencies significantly changed or are no longer available. In 50 years (or even in 10) it will be astronomically expensive to keep a current Node.js system alive. But you still can run an unmodified 1985 MUMPS system on a current InterSystems IRIS server.
The main problem with critical MUMPS systems today is less technical, but mostly staff shortage. The same applies to COBOL, or Ada, or even Java.
What about running that same codebase on open source versions of mumps such as GT.M or Yottadb?
This article is terrible and I hate that people always bring it up whenever MUMPS is mentioned here.
MUMPS is easy to read, understand and maintain when written well.
These examples (and the Wikipedia ones) are from code written when hospitals needed to run their whole EMR with extreme storage constraints, so more terse code was necessary to fit more on the disk. Of course they aren’t readable by modern standards.
Did they really have to use KILL as the word to delete a variable? Especially as it's used in hospitals? KILL patient....?
Angostura
today at 6:45 PM
You obviously never read doctors notes in the 70s. Black humour was de rigeur