Live data from Hacker News

The MUMPS 76 Primer – anniversary edition

github.com

51–60 of 63 posts

Re: The MUMPS 76 Primer – anniversary edition

#51

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.

Quite agree. Some very novel ideas for the time. I’m not a PL historian but can’t think of an earlier language with such a complex runtime to support it. But, woof - no thanks to the stringly typing. The article under discussion treats this as a positive, saying it eliminates conversion and having to worry about it. I don’t believe that’s possible, and would bet my life savings that MUMPS interpreting a string as a n…

> the explanation on a lack of operator precedence) which try to frame a bad thing as a good thing.

Is it a bad thing? Or is it different?

I literally spray brackets about because Im not sure of the precedence.

Explicit over implicit is generally regarded as a good thing. Why is there a blind spot when this comes to operator precedence?

Re: The MUMPS 76 Primer – anniversary edition

#52

In case anyone is wondering why anyone should give a shit about this language, the relevance of MUMPS is that the largest market share holder of EHR systems is Epic, and their core database still runs on MUMPS. You life, quite literally if you find yourself in a hospital, depends on MUMPS. The second largest competitor, Cerner/Oracle Millenium, runs on MSFT SQL, and it's on life support. Last I heard, Oracle was look…

>on life support

Intentional?

Re: The MUMPS 76 Primer – anniversary edition

#53
post #20

Did they really have to use KILL as the word to delete a variable? Especially as it's used in hospitals? KILL patient....?

You obviously never read doctors notes in the 70s. Black humour was de rigeur

Yes, but this was programmers, not doctors.

I mean I find it humourous, I just have visions of discussions about 'killing' patients.

Re: The MUMPS 76 Primer – anniversary edition

#54

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.

It has also a presence in the financial world (under brand name "InterSystems Caché"), though mainly as no-sql database until Java and other foreign wrappers stop being enough, and suddenly you're writing stored procedures (or at least their equivalent) in MUMPS

Re: The MUMPS 76 Primer – anniversary edition

#55

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.

Strange it feels worse than both raw asm and apl.

which assembler? modern assemblers with macros are quite easy

Re: The MUMPS 76 Primer – anniversary edition

#57
post #19

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.

On the flipside, sometimes people forget why we ended up where we're at and re-invent the pre-SQL database, only for everyone to realize that was a bad idea and switch en masse to PostgreSQL.

Re: The MUMPS 76 Primer – anniversary edition

#58
Those unfamiliar with M/MUMPS are not aware of some of the built in features that have not been adopted by other platforms.

M allows one to code in a very terse language (an artifact of only 2K RAM/ transient temporary memory) with so many abbreviations and short forms for intrinsic/builtin functions, variables, commands, and other things. A large number of string manipulation, mathematical, and logical functions with a form of string recognition matching (from SNOBOL) and type coercion/interpretation round out the basic expression evaluation system. Allowing variable names as valid values for any variable gives a way to create dynamic expressions and symbolic manipulation.

A fixed point numeric value with over 18 digits of accuracy means math on values over the national debt can be stored in a single variable. Lossy floating point systems of other computer languages are not acceptable to customers. Limits on strings of characters depend on implementations and have been only increasing over the years beyond megabytes. All of these are managed without applications dealing with pointer arithmetic, allocation, deallocation, and such schemes such as Rust, C++, require.

The decision to separate out I/O into a subsystem was very common at the time, with various kinds of devices providing a high level model of channels & streams that are all managed below the language implementation level. Tight limits and timing for input I/O and output I/O means no buffer overflow exploits. Character set management also keeps control over contents of strings.

Generally, M has follows the model of high level capabilities under a very simple language interface. Each command has a highly focused syntax.

Which is why permanent storage uses a dynamic sparse variable indexed by strings whose stored values are strings and is indicated using the caret ^ as the prefix to the variable name. This approach removed the need for user level applications to track disk latency, disk buffers, asynchronous processes, etc. which were common at that time.

Interprocess communication and control using a hierarchical Locking mechanism is very flexible. This means coordinating by locking a high level entry in the hierarchy and allow other worker processes to lock lower in the hierarchy.

The 1977 standard used a system that prevents deadlock from occurring. Later M Standards broadened the tools available with incremental & decremental locking and now deadlock can happen.

Transaction Processing allows one to separate data updates in a transparent way so competing control flows can more intelligently change the system. Basically, this allows a try-retry-commit-stop backtracking command flow similar to Prolog and declarative code.

Control flow also uses the parallel invocation command (JOB) and normal subroutine calls (DO), with parameter passing and function return values. Looping is unified by the FOR command. Exception processing and control flow avoid undefined behavior.

Dynamic variable lifetimes using KILL and the NEW commands and associative memory access to values of variables. Typed controlled run time evaluation of commands adds discipline beyond "eval" in other languages.

The language allows implementations to specify unique abilities to increase unique commercial subsystems while still being backward compatible. There are ways to invoke external code which can enhance capabilities as well as tieing to SQL and other languages.

While not part of the standard, high performance and reliable database management with ability to automatically recover from power loss using internal logging and rebuild tools, and compressed B*-trees is necessary for any M system to be viable in the market.

Re: The MUMPS 76 Primer – anniversary edition

#59
post #48

In case anyone is wondering why anyone should give a shit about this language, the relevance of MUMPS is that the largest market share holder of EHR systems is Epic, and their core database still runs on MUMPS. You life, quite literally if you find yourself in a hospital, depends on MUMPS. The second largest competitor, Cerner/Oracle Millenium, runs on MSFT SQL, and it's on life support. Last I heard, Oracle was look…

Millennium has a streak of failed implementations lately, VA in the US, two here in Sweden. It is not just Millennium I believe health care providers are pretty bad at tech.

I don't know about the Sweden saga, but the VA saga is a deep rabbit hole. I helped build a dream team of companies at one point to fix part of this for another system at one point, and the integrator fell down under their own weight.

I thought I was going into informatics to write code. It's politics as far as the eye can see.

Re: The MUMPS 76 Primer – anniversary edition

#60
post #51

Earlier quoted context omitted.

Quite agree. Some very novel ideas for the time. I’m not a PL historian but can’t think of an earlier language with such a complex runtime to support it. But, woof - no thanks to the stringly typing. The article under discussion treats this as a positive, saying it eliminates conversion and having to worry about it. I don’t believe that’s possible, and would bet my life savings that MUMPS interpreting a string as a n…

> the explanation on a lack of operator precedence) which try to frame a bad thing as a good thing. Is it a bad thing? Or is it different? I literally spray brackets about because Im not sure of the precedence. Explicit over implicit is generally regarded as a good thing. Why is there a blind spot when this comes to operator precedence?

APL / K / J (and friends) evaluate things "left-of-right" (could be thought of as "right-to-left"), that is 1+23-4 is parsed 1+(2(3-4)) - there is no operator precedence. It is weird at first, but refreshingly simple and effective once you manage to overcome indoctrination you received since elementary school.
Post reply on HN