Est. 1967 Intermediate

MUMPS

A programming language with an integrated database, created for medical information systems. Reportedly still underpins a majority of US electronic health records.

Created by Neil Pappalardo, Robert A. Greenes, and Curt Marble at Massachusetts General Hospital

Paradigm Imperative, Procedural
Typing Typeless (implicit coercion between string, integer, and floating-point)
First Appeared 1967
Latest Version ISO/IEC 11756:1999 (reaffirmed 2020)

MUMPS (Massachusetts General Hospital Utility Multi-Programming System) holds a remarkable position in computing history: a language created in the 1960s for hospital information systems that reportedly still underpins a majority of electronic health records in the United States today.

History & Origins

In the mid-1960s, at Massachusetts General Hospital’s Laboratory of Computer Science, Neil Pappalardo, Robert A. Greenes, and Curt Marble were working on an NIH-funded hospital information systems project. Frustrated with the limitations of the existing assembly-language approach developed by BBN on a PDP-1, they created MUMPS as an alternative development environment beginning in 1966, initially running on a DEC PDP-7.

What set MUMPS apart from other languages of its era was a radical design decision: the language included an integrated hierarchical database as a core part of the language itself. Variables in MUMPS could be either local (in-memory) or global (persistent on disk), with the same syntax for both. This tight coupling of language and database made it exceptionally well-suited for the kind of data-intensive, interactive applications that hospitals needed.

The Name

The acronym MUMPS stands for Massachusetts General Hospital Utility Multi-Programming System. In 1995, “M” was accepted as an alternate name in the ANSI X11.1-1995 standard, though “MUMPS” remains the formal name. Both names are used interchangeably in practice.

Why MUMPS Still Matters

Healthcare’s Hidden Infrastructure

MUMPS-based systems reportedly process health information for a large share of patients across the United States. Epic Systems, the dominant electronic health records vendor, runs on InterSystems IRIS (a MUMPS implementation). The Veterans Affairs’ VistA system, one of the largest healthcare IT systems in the world, is built entirely in MUMPS.

The Integrated Database

MUMPS’s most distinctive feature is its built-in hierarchical database using “globals” – sparse, multidimensional arrays that are automatically persisted to disk. This eliminates the impedance mismatch between application code and database that plagues most other languages:

 ; Store a patient record - no SQL, no ORM, no separate database
 set ^patient(12345,"name")="Smith, John"
 set ^patient(12345,"dob")="1990-03-15"
 set ^patient(12345,"allergies",1)="Penicillin"

Key Language Features

  • Typeless variables - One universal data type, automatically coerced as needed
  • Hierarchical globals - Persistent sparse arrays as a native data structure
  • Pattern matching - Built-in pattern matching with a unique syntax
  • Abbreviations - All commands can be abbreviated to their first letter (w for write, s for set)
  • Case insensitivity - Commands are case-insensitive
  • String processing - Strong string manipulation capabilities inherited from STRINGCOMP

Modern MUMPS Implementations

ImplementationVendorLicenseNotes
InterSystems IRISInterSystemsCommercialSuccessor to Caché, dominant commercial implementation
GT.MFISAGPLOpen source, originally by Greystone Technology
YottaDBYottaDB LLCAGPLFork of GT.M with additional platform support
MiniMFreeRuns on Windows, Linux, FreeBSD, macOS
Reference Standard MKevin O’KaneOpen sourceEducational/research implementation

For this tutorial series, we’ll use YottaDB via Docker, as it’s open source and actively maintained.

Getting Started

MUMPS source files use the .m extension. A MUMPS file is called a “routine,” and the routine name must match the filename (e.g., a routine named hello is stored in hello.m).

MUMPS has some unique syntax rules:

  • Lines starting in column 1 are labels (routine/subroutine names)
  • Executable code must be indented (start with a space or tab)
  • Commands are separated by spaces, and each command is followed by a single space before its argument

The typical workflow with YottaDB:

1
2
# Run a routine
yottadb -run routinename

Continue to the Hello World tutorial to write your first MUMPS program.

Timeline

1967
MUMPS developed by Neil Pappalardo, Robert Greenes, and Curt Marble at Massachusetts General Hospital
1969
MUMPS becomes commercially available; Neil Pappalardo founds MEDITECH
1972
Standardization conference in Boston creates the MUMPS Users Group and Development Committee
1977
ANSI standard X11.1-1977 approved, making MUMPS one of the early ANSI-standardized programming languages
1978
InterSystems founded by Terry Ragon, focusing on MUMPS-based database systems
1990
ANSI X11.1-1990 revision approved
1992
ISO adopts MUMPS as ISO 11756:1992
1995
ANSI X11.1-1995 approved; 'M' accepted as an alternate name for the language
1999
ISO/IEC 11756:1999 approved (current standard)
2000
GT.M source code released as open source by Sanchez Computer Associates (initially under GPL; later moved to AGPL in 2009)
2017
YottaDB forked from GT.M by K.S. Bhaskar and other GT.M developers
2018
InterSystems IRIS Data Platform reaches general availability as successor to Caché

Notable Uses & Legacy

U.S. Department of Veterans Affairs (VistA)

The largest enterprise-wide health information system in the United States, supporting medical records for millions of veterans across hundreds of hospitals and clinics.

Epic Systems

The dominant electronic health records vendor in the US, built on InterSystems Caché/IRIS (MUMPS-based) as its underlying database.

MEDITECH

One of the largest healthcare IT companies, founded by MUMPS co-creator Neil Pappalardo. Products built on MUMPS-derived languages.

U.S. Department of Defense (CHCS)

The Composite Health Care System used by military hospitals runs on MUMPS.

Indian Health Service (RPMS)

Uses a VistA-based MUMPS system (RPMS) for healthcare delivery to Native American communities.

Language Influence

Influenced By

JOSS TELCOMP STRINGCOMP

Influenced

Caché ObjectScript PSL (Profile Scripting Language)

Running Today

Run examples using the official Docker image:

docker pull yottadb/yottadb-base:latest-master

Example usage:

docker run --rm -v $(pwd):/app -e ydb_routines=/app yottadb/yottadb-base:latest-master yottadb -run hello

Topics Covered

Last updated: