News for hackers. Stuff that matters.
Re:The Mumps Programming Language by defined on Tuesday March 14, 2017 @02:27AM (#13865465)
I worked in InterSystems M/VX (MUMPS for VAX/VMS) on a 2 year project in 1985/86. We developed a wireless ambulance dispatch system entirely in M/VX except for PDP-11 front-end processors that did the actual communications with the UMCTs (Universal Mobile Control Terminals) in the ambulances.

It ran on a VAX 11/751 that was maxed out with 8 MB (yes, that's megabytes) of RAM and a state of the art Fujitsu Eagle 400 MB (yes, that's megabytes) 14" hard drive. The user interface was text-based forms on VT-100 terminals.

M/VX was selected because there was nothing available at the time that could look up data nearly as fast as the M/VX B-Tree database, and we had to look up a lot of map coordinates.

I wouldn't grace the data storage with a description of NoSQL - it was plain and simply a multi-rooted hierarchical database, or less fancily, a set of multidimensional disk-based associative arrays. As others have pointed out, it differed syntactically from a memory-based array only by being prefixed with a caret/circumflex (^). It certainly was damn fast (for the day).

Initially, it was so cool to be able to store something just by writing

    set ^address("US","FL","Miami","Main St",12345)=1
But the pain soon set in.

There were no such things as indexes. We had to create (and maintain) inverted arrays for that purpose.

If we got the hierarchy wrong, it was murder to reorganize it. Queries were only really possible if they fit into an existing hierarchy.

There was really no such thing as an ad-hoc query.

Hmm, maybe it was kind of like NoSQL...

But the killer feature (as in, it killed us over and over) was falling foul of the hideous global variable, $test, as others have pointed out.

I don't remember clearly, but if you wrote something like

    set a=1
    set b=0
    if a=1 open 1:"input.txt",old
    else  set b=10
the value of b after this would be 0 if "input.txt" could be opened, and 10 if not. This is because open set $test to false if it fails, so the else executes, even though a=1... the horror, the horror....

Oh, oh, oh... and the result of 2+35 would be 25, not 17, because there was no operator precedence. You had* to use parentheses.

So it was kind of amazing in some ways (because ambulance dispatch system in 8MB of RAM) but a horror show in so many others. I'm glad it was only 2 years, and I did get to write some cool VAX PASCAL to allow M/VX to interface with the FEPs.

Re:The Mumps Programming Language by jsgrahamus53 on Wednesday March 15, 2017 @10:56AM (#13876519)
The VA took MUMPS and created a DBMS out of it, which would allow one to define the schema and then use utilities to automatically update indices.

It is much nicer when the system remembers to do that for you.

There were gotchas in the language that required you to understand it and play ball its way. Not unlike other languages I've seen. The payback was trememdous flexibility and performance on minimal (for today) systems.