
M, or MUMPS is a procedural language with a built-in NoSQL database - jxub
https://learnxinyminutes.com/docs/m/
======
whitten
When you have been working with a language for a long time, it is easy to
forget what other languages don't have which the language does have. This is
especially true for MUMPS. Most languages don't have a built-in data handler
that maintains a memory cache of disk data effectively extending what can be
stored to the capacity of your permanent storage. This isn't technically in
the requirements for the language, but is expected by the marketplace. When
contemporary languages during the 1960's (reaching past the 1980s) expected a
programmer to know about disk sectors and blocks of disk, MUMPS programmers
always programmed at the abstract level of sparse arrays indexed by strings of
characters for multiple dimensions. The only difference between persistent
data and temporary data was using a circumflex ^ as a prefix for the
persistent names. The "MP" in MUMPS stands for "Multi Programming" which was
an ancient way of saying that the language natively supports multiple programs
running concurrently (or in parallel). The language met needs that particular
niche markets required. Multiple people have to be able to access bank records
at the same time, just as multiple people in a medical setting have to be able
to access patient records.

There are many other aspects of the language, which I can only touch upon
here, atomic transaction processing that obey ACID requirements, hierarchical
lock spaces of semaphors for interacting parallel processes, highly compressed
data stored on disk, I/O processing, all the standard control flow models,
string pattern matching equivalents of regular expressions (but different as
they were created decades before the rest of the computing field was actively
using them). Exact number operations to at least 15 digits of precision,
(which means you don't lose pennies during math -- financial organizations
love this) An interactive command line and the ability to construct code on
the fly to be executed. There are many many capabilities in the language.

------
rbanffy
The second time the universe slapped me on the face with paulg's Beating the
Averages article was a couple years before it was written, when I was
introduced to Dataflex 2.x on a Unix machine. It was Rails for the VT-100. If
you are interested in Mumps, check that out.

The first time was with Mantis on an IBM 4381, but that's a completely
different story.

