All Topics  
MUMPS

 

   Email Print
   Bookmark   Link






 

MUMPS



 
 
MUMPS (Massachusetts General Hospital
Massachusetts General Hospital

Massachusetts General Hospital is a teaching hospital of Harvard Medical School and a biomedical research facility in Boston, Massachusetts.It is owned and operated by Partners HealthCare ....
 Utility Multi-Programming System), or alternatively M, is a programming language
Programming language

A programming language is a machine-readable artificial language designed to express computations that can be performed by a machine, particularly a computer....
 created in the late 1960s, originally for use in the healthcare industry
Health care

File:Ear surgery on a patient.jpgFile:Monoclonal antibodies3.jpgHealth care, or healthcare, refers to the treatment and management of illness, and the preservation of health through services offered by the Medicine, pharmaceutical, Dentistry, clinical laboratory sciences , nursing, and allied health professions....
. It was designed for the production of multi-user database
Database

A database is a structured collection of records or data that is stored in a computer system. The structure is achieved by organizing the data according to a database model....
-driven applications. Because it predates C
C (programming language)

C is a general-purpose computer programming language originally developed in 1972 by Dennis Ritchie at the Bell Telephone Laboratories to implement the Unix operating system....
 and most other popular languages in current usage, it has very different syntax and terminology. It was adopted in many healthcare and financial information systems/databases (especially ones developed in the 1970s and early 1980s) and continues to be used by many of the same clients today.






Discussion
Ask a question about 'MUMPS'
Start a new discussion about 'MUMPS'
Answer questions from other users
Full Discussion Forum



Encyclopedia


MUMPS (Massachusetts General Hospital
Massachusetts General Hospital

Massachusetts General Hospital is a teaching hospital of Harvard Medical School and a biomedical research facility in Boston, Massachusetts.It is owned and operated by Partners HealthCare ....
 Utility Multi-Programming System), or alternatively M, is a programming language
Programming language

A programming language is a machine-readable artificial language designed to express computations that can be performed by a machine, particularly a computer....
 created in the late 1960s, originally for use in the healthcare industry
Health care

File:Ear surgery on a patient.jpgFile:Monoclonal antibodies3.jpgHealth care, or healthcare, refers to the treatment and management of illness, and the preservation of health through services offered by the Medicine, pharmaceutical, Dentistry, clinical laboratory sciences , nursing, and allied health professions....
. It was designed for the production of multi-user database
Database

A database is a structured collection of records or data that is stored in a computer system. The structure is achieved by organizing the data according to a database model....
-driven applications. Because it predates C
C (programming language)

C is a general-purpose computer programming language originally developed in 1972 by Dennis Ritchie at the Bell Telephone Laboratories to implement the Unix operating system....
 and most other popular languages in current usage, it has very different syntax and terminology. It was adopted in many healthcare and financial information systems/databases (especially ones developed in the 1970s and early 1980s) and continues to be used by many of the same clients today. It is currently used by the world's largest electronic health record systems as well as by multiple banking networks and online trading/investment services.

History

MUMPS was developed by Neil Pappalardo
Neil Pappalardo

Antonino Neil Pappalardo is the founder of Medical Information Technology, Inc. , a Massachusetts software company. As Chairman and CEO, he has overseen MEDITECH becoming a leading supplier of information systems for hospitals in the U.S, Europe, and Africa....
 and colleagues in Dr Octo Barnett's animal lab at Massachusetts General Hospital
Massachusetts General Hospital

Massachusetts General Hospital is a teaching hospital of Harvard Medical School and a biomedical research facility in Boston, Massachusetts.It is owned and operated by Partners HealthCare ....
 (MGH) in Boston
Boston, Massachusetts

Boston is the State capital and largest city of the Commonwealth of Massachusetts, and is one of the oldest cities in the United States. The largest city in New England, Boston is considered the economic and cultural center of the region, and is sometimes regarded as the unofficial "Capital of New England." Boston city proper had a 2007 est...
 during 1966 and 1967. The original MUMPS system was, like Unix a few years later, built on a spare DEC
Digital Equipment Corporation

Digital Equipment Corporation was a pioneering United States company in the computer industry. It is often referred to within the computing industry as DEC ....
 PDP-7
PDP-7

The Digital Equipment Corporation PDP-7 is a minicomputer produced by Digital Equipment Corporation. Introduced in 1965, the first to use their Flip Chip technology, with a cost of only $72,000 USD, it was cheap but powerful....
.

Octo Barnett and Neil Pappalardo
Neil Pappalardo

Antonino Neil Pappalardo is the founder of Medical Information Technology, Inc. , a Massachusetts software company. As Chairman and CEO, he has overseen MEDITECH becoming a leading supplier of information systems for hospitals in the U.S, Europe, and Africa....
 were also involved with MGH's planning for a Hospital Information System, obtained a reverse-compatible PDP-9
Programmed Data Processor

Programmed Data Processor was the name of a series of minicomputers made by Digital Equipment Corporation. The name 'PDP' intentionally avoided the use of the term 'computer' because at the time of the first PDPs, computers had a reputation of being large, complicated, and expensive machines, and the venture capitalists behind Digital would...
, and began using MUMPS in the admissions cycle and laboratory test reporting. MUMPS was then an interpreted language
Interpreted language

In computer programming an interpreted language is a programming language whose implementation often takes the form of an interpreter . Theoretically, any language may be compiler or interpreted, so this designation is applied purely because of common implementation practice and not some underlying property of a language....
 and incorporated a hierarchical database file system to standardize interaction with the data. Some aspects of MUMPS can be traced from Rand Corporation's JOSS
JOSS

JOSS was one of the very first interactive, time sharing programming languages.JOSS I, developed by J. Clifford Shaw at RAND was first implemented, in beta form, on the JOHNNIAC computer in May 1963....
 through BBN
BBN

BBN might refer to:* Business Branding Network, an international network of marketing and communications agencies* BBN Technologies, formerly Bolt, Beranek and Newman, a technology company in Cambridge, Massachusetts, best known for its work on packet switching technology and its construction of the Interface Message Processor - the first r...
's TELCOMP
TELCOMP

TELCOMP was a programming language developed at Bolt, Beranek and Newman in about 1965 and in use until at least 1974.It was an interactive, conversational language based on JOSS, developed by BBN after Cliff Shaw from RAND visited the labs in 1964 as part of the NIH survey....
 and STRINGCOMP
STRINGCOMP

STRINGCOMP was a programming language developed at Bolt, Beranek and Newman .It was one of the three variants of JOSS that were developed by BBN....
. The MUMPS team deliberately chose to include portability between machines as a design goal. Another feature, not widely supported for machines of the era, in operating system
Operating system

An operating system is an interface between hardware and applications; it is responsible for the management and coordination of activities and the sharing of the limited resources of the computer....
s or in hardware
Hardware

Hardware is a general term that refers to the physical cultural artifacts of a technology. It may also mean the physical components of a computer system, in the form of computer hardware....
, was multitasking
Computer multitasking

In computing, multitasking is a method by which multiple tasks, also known as Computer process, share common processing resources such as a Central processing unit....
, which was also built into the language itself.

The portability was soon useful, as MUMPS was shortly adapted to a DEC PDP-15
Programmed Data Processor

Programmed Data Processor was the name of a series of minicomputers made by Digital Equipment Corporation. The name 'PDP' intentionally avoided the use of the term 'computer' because at the time of the first PDPs, computers had a reputation of being large, complicated, and expensive machines, and the venture capitalists behind Digital would...
, where it lived for some time. MUMPS was developed with the support of a government research grant, and so MUMPS was released to the public domain (no longer a requirement for grants), and was soon ported to a number of other systems including the popular DEC PDP-8
PDP-8

The PDP-8 was the first successful commercial minicomputer, produced by Digital Equipment Corporation in the 1960s. DEC introduced it on 22 March 1965, and sold more than 50,000 systems, the most of any computer up to that date....
, the Data General Nova
Data General Nova

The Data General Nova was a popular 16-bit minicomputer built by the United States company Data General starting in 1969. The Nova was packaged into a single rack mount case and had enough power to do most simple computing tasks....
 and the DEC PDP-11
PDP-11

The PDP-11 was a series of 16-bit minicomputers sold by Digital Equipment Corporation from 1970 into the 1990s. Though not explicitly conceived as successor to DEC's PDP-8 computer in the Programmed Data Processor series of computers , the PDP-11 replaced the PDP-8 in many Real-time computing....
. Word about MUMPS spread mostly through the medical community, and by the early 1970s was in widespread use, often being locally modified for their own needs.

By the early 1970s, there were many and varied implementations of MUMPS on a range of hardware platforms. The most widespread was DEC
Digital Equipment Corporation

Digital Equipment Corporation was a pioneering United States company in the computer industry. It is often referred to within the computing industry as DEC ....
's MUMPS-11 on the PDP-11, and Meditech
Meditech

Medical Information Technology, Inc., commonly known as MEDITECH, is a Massachusetts-based software and service company serving the medical community with information systems, which are installed in health care organizations throughout the world....
's MIIS. In 1972, many MUMPS users attended a conference which standardized the then fractured language, and created the MUMPS Users Group and MUMPS Development Committee (MDC) to do so. These efforts proved successful; a standard was complete by 1974, and was approved, on September 15, 1977, as ANSI
American National Standards Institute

The American National Standards Institute or ANSI is a private non-profit organization that oversees the development of voluntary consensus standards for products, services, processes, systems, and personnel in the United States....
 standard, X11.1-1977. At about the same time DEC launched DSM-11 (Digital Standard MUMPS) for the PDP-11. This quickly dominated the market, and became the reference implementation of the time.

During the early 1980s several vendors brought MUMPS-based platforms that met the ANSI standard to market. The most significant were Digital Equipment Corporation
Digital Equipment Corporation

Digital Equipment Corporation was a pioneering United States company in the computer industry. It is often referred to within the computing industry as DEC ....
 with DSM (Digital Standard MUMPS), and InterSystems
InterSystems

InterSystems Corporation is a vendor of software for high-performance database management system, rapid Software engineering, Enterprise application integration, and healthcare information systems....
 with their ISM (InterSystems M) on VMS and UNIX, and M/11+ on the PDP-11 platform. Other companies who developed important MUMPS implementations were:
  • Greystone Technology Corporation with a compiled version called GT.M
    GT.M

    GT.M is a high-performance schemaless database engine, optimized for transaction processing. GT.M is also an application development platform and a compiler for the ANSI/ISO standard MUMPS language, which was formerly known as MUMPS....
    ,
  • DataTree Inc. with an Intel PC based product called DTM,
  • Micronetics Design Corporation with a product line called MSM for UNIX and Intel PC platforms (later ported to IBM's VM operating system), and
  • M-Global with MGM, a Mac OS based product.


M-Global MUMPS was the first commercial MUMPS for the PC and the only Mac implementation. DSM-11 was superseded by VAX/DSM for the VAX/VMS platform, and that was ported to the Alpha
DEC Alpha

Alpha, originally known as Alpha AXP, was a 64-bit reduced instruction set computer instruction set architecture developed by Digital Equipment Corporation , designed to replace the 32-bit VAX complex instruction set computer ISA and its implementations....
 in two variants: DSM for OpenVMS, and as DSM for Ultrix.

This period also saw considerable MDC activity. The second revision of the ANSI standard for MUMPS (X11.1-1984) was approved on November 15, 1984. On November 11, 1990 the third revision of the ANSI standard (X11.1-1990) was approved. In 1992 the same standard was also adopted as ISO
International Organization for Standardization

The International Organization for Standardization , widely known as ISO , is an international standard-setting body composed of representatives from various national standards organizations....
 standard 11756-1992. Use of M as an alternative name for the language was approved around the same time. On December 8, 1995 the fourth revision of the standard (X11.1-1995) was approved by ANSI, and by ISO in 1999 as ISO 11756-1999. The MDC finalized a further revision to the standard in 1998 but this has not been presented to ANSI for approval. On 6 January 2005, ISO re-affirmed its MUMPS-related standards: , and .

By 2000, the middleware
Middleware

Middleware is computer software that connects software components or applications. The software consists of a set of enabling services that allow multiple processes running on one or more machines to interact across a network....
 vendor InterSystems
InterSystems

InterSystems Corporation is a vendor of software for high-performance database management system, rapid Software engineering, Enterprise application integration, and healthcare information systems....
 had become the dominant player in the MUMPS market with the purchase of several other vendors. Initially they acquired DataTree Inc. in the early 1990s. And, on December 30, 1995, Intersystems acquired the DSM product line from DEC
Digital Equipment Corporation

Digital Equipment Corporation was a pioneering United States company in the computer industry. It is often referred to within the computing industry as DEC ....
. InterSystems consolidated these products into a single product line, branding them, on several hardware platforms, as OpenM. In 1997, InterSystems
InterSystems

InterSystems Corporation is a vendor of software for high-performance database management system, rapid Software engineering, Enterprise application integration, and healthcare information systems....
 essentially completed this consolidation by launching a unified successor named Caché
Caché (software)

InterSystems Cach? is an object database management system from InterSystems. It provides Object and SQL access to the database, as well as allowing direct manipulation of Cach?s underlying data structures....
. This was based on their ISM product, but with influences from the other implementations. Micronetics Design Corporation assets were also acquired by InterSystems on June 21, 1998. Intersystems remains today (2007) the dominant MUMPS vendor, selling Caché to MUMPS developers who write applications for a variety of operating systems.

Greystone Technology Corporation's GT.M
GT.M

GT.M is a high-performance schemaless database engine, optimized for transaction processing. GT.M is also an application development platform and a compiler for the ANSI/ISO standard MUMPS language, which was formerly known as MUMPS....
 implementation was sold to Sanchez Computer Associates Inc. (now part of Fidelity National Financial Inc.) in the mid 1990s. On November 7, 2000 Sanchez made GT.M for Linux available under the GPL
GNU General Public License

The GNU General Public License is a widely used free software license, originally written by Richard Stallman for the GNU project. The GPL is the most popular and well-known example of the type of strong copyleft license that requires derived works to be available under the same copyleft....
 license and on October 28, 2005 GT.M for OpenVMS
OpenVMS

OpenVMS , previously known as VAX-11/VMS, VAX/VMS or VMS, is the name of a high-end computer server operating system that runs on the VAX and DEC Alpha families of computers, developed by Digital Equipment Corporation of Maynard, Massachusetts, Massachusetts , and most recently on Hewlett-Packard systems built around the In...
 and Tru64 UNIX
Tru64 UNIX

Tru64 UNIX is a 64-bit UNIX operating system for the DEC Alpha instruction set architecture , currently owned by Hewlett-Packard . Previously, Tru64 UNIX was a product of Compaq, and before that, Digital Equipment Corporation , where it was known as Digital UNIX ....
 were also made available under the GPL license. GT.M continues to be available on other UNIX platforms under a traditional license.

The newest implementation of MUMPS, released in April 2002, is an MSM derivative called M21 from the Real Software Company of Rugby, UK.

There are also several open source implementations of MUMPS, including some research projects. The most notable of these is Professor Kevin O'Kane's (and students') project, now at the University of Northern Iowa
University of Northern Iowa

The University of Northern Iowa, in Cedar Falls, Iowa, is a state-supported university that offers more than 120 majors across the colleges of Administration , Education, Humanities and Fine Arts, Natural Sciences, and Social and Behavioral sciences, and graduate college....
.

One of the original creators of the MUMPS language, Neil Pappalardo
Neil Pappalardo

Antonino Neil Pappalardo is the founder of Medical Information Technology, Inc. , a Massachusetts software company. As Chairman and CEO, he has overseen MEDITECH becoming a leading supplier of information systems for hospitals in the U.S, Europe, and Africa....
, early founded a company called Meditech. They extended and built on the MUMPS language, naming the new language MIIS (and later, MAGIC). Unlike Intersystems, Meditech no longer sells middleware, so MIIS and MAGIC are only used internally at Meditech.

Current users of MUMPS applications

The US Veteran's Administration was one of the earliest major adopters of the MUMPS language. Their development work (and subsequent contributions to the free MUMPS application codebase) was an influence on many medical users worldwide. In 1995, the Veterans Administration's patient Admission/Tracking/Discharge system, Decentralized Hospital Computer Program (DHCP) was the recipient of the Computerworld Smithsonian Award
Smithsonian Award

The Computerworld Smithsonian Award is given out annually to individuals who have used technology to produce beneficial changes for society....
 for best use of Information Technology in Medicine. A decade later (July, 2006), the Department of Veterans Affairs (VA) / Veterans Health Administration (VHA) was the recipient of the Innovations in American Government Award presented by the Ash Institute of the John F. Kennedy School of Government
John F. Kennedy School of Government

The John F. Kennedy School of Government at Harvard University is a public policy school and public administration school, and one of Harvard's graduate and professional schools....
 at Harvard University
Harvard University

Harvard University is a private university in Cambridge, Massachusetts, Massachusetts, United States, and a member of the Ivy League. Founded in 1636 by the colonial Massachusetts legislature, Harvard is the Colonial Colleges institution of higher learning in the United States....
 for its extension of DHCP into VistA
Vista

Vista usually refers to a distant view.Vista or Vistas may also refer to:...
 in July, 2006. Nearly the entire VA hospital system in the United States
United States

The United States of America is a Federal government constitutional republic comprising U.S. state and a federal district. The country is situated mostly in central North America, where its Contiguous United States and Washington, D.C., the Capital districts and territories, lie between the Pacific Ocean and Atlantic Oceans, Borders of the U...
 and the Indian Health Service
Indian Health Service

Indian Health Service is an Operating Division within the U.S. Department of Health and Human Services . IHS is responsible for providing medical and public health services to members of federally recognized Tribes and Alaska Natives....
, as well as major parts of the Department of Defense
United States Department of Defense

The United States Department of Defense is the federal department charged with coordinating and supervising all agencies and functions of the government relating directly to national security and the Military of the United States....
 CHCS hospital system all run systems using MUMPS databases for clinical data tracking.

Large companies currently using MUMPS include AmeriPath (now part of Quest Diagnostics), Care Centric, Team Health, Epic Systems Corporation
Epic Systems Corporation

Epic Systems Corporation is a Privately held company health care software company founded in 1979 by Judy Faulkner. Originally headquartered in Madison, Wisconsin, Wisconsin, Epic began moving staff to a new campus in Verona, Wisconsin, Wisconsin in late 2005....
, EMIS, Partners HealthCare
Partners HealthCare

Partners HealthCare is a non-profit organization that owns several hospitals in Massachusetts, primarily in the Boston area. Massachusetts General Hospital and Brigham and Women's Hospital founded the organization in 1993....
, Meditech
Meditech

Medical Information Technology, Inc., commonly known as MEDITECH, is a Massachusetts-based software and service company serving the medical community with information systems, which are installed in health care organizations throughout the world....
, and GE Healthcare
GE Healthcare

GE Healthcare is a unit of GE Technology Infrastructure, which is a unit of General Electric . It employs more than 46,000 people worldwide and is headquartered in Little Chalfont, Buckinghamshire, United Kingdom....
 (formerly IDX Systems and Centricity
Centricity

Centricity is a brand of 31 healthcare IT software solutions from GE Healthcare, a division of General Electric. It includes software for independent physician practices, academic medical centers, hospitals and large integrated delivery networks....
). Many reference laboratories, such as Quest Diagnostics
Quest Diagnostics

Quest Diagnostics Incorporated is a United States corporation which provides Medical laboratory services. The company has operations in the United States, United Kingdom, Mexico and through its wholly-owned subsidiary Quest Diagnostics India Pvt....
 and Dynacare, use MUMPS software written or based on by Antrim Corporation code. Antrim, and its parent Sunquest, was acquired by Misys in 2001.

Coventry Healthcare and Massachusetts Hospital have also been reported to use MUMPS.

MUMPS is also widely used in financial applications. MUMPS gained an early following in the financial sector, and MUMPS applications are in use at many banks and credit unions. It is used by Ameritrade, the largest online trading service in the US with over 12 billion transactions per day, as well as by the Bank of England and Barclays Bank, among others.

most use of M is either in the form of GT.M
GT.M

GT.M is a high-performance schemaless database engine, optimized for transaction processing. GT.M is also an application development platform and a compiler for the ANSI/ISO standard MUMPS language, which was formerly known as MUMPS....
 or InterSystems Caché. The latter is being aggressively marketed by InterSystems and has had success in penetrating new markets, such as telecommunications, in addition to existing markets.

Overview

MUMPS is a language intended for and designed to build database applications. Secondary language features were included to help programmers make applications using minimal computing resources. The original implementations were interpreted
Interpreter (computing)

In computer science, an interpreter normally means a computer program that execution , i.e. performs, instructions written in a programming language....
, though modern implementations may be fully or partially compiled
Compiler

A compiler is a computer program that transforms source code written in a programming language into another computer language . The most common reason for wanting to transform source code is to create an executable program....
.

Database interaction is transparently built into the language. The MUMPS language assumes the presence of a MUMPS hierarchical database, which is implicitly "opened" for every application. All variable names prefixed with the caret character ("^") use permanent (instead of RAM) storage, will maintain their values after the application ends, and will be visible to (and modifiable by) other running applications. Variables using permanent storage are called Globals in MUMPS, though this is not meant in the usual sense of unscoped variables.

Additionally, all variables (both RAM and disk-based) are hierarchical. They can all have child nodes (called subscripts in MUMPS terminology). Thus, the variable 'Car' can have subscripts "Door", "Steering Wheel" and "Engine", each of which can contain a value and have subscripts of their own. Thus, you could say

SET ^Car("Door","Color")="BLUE"

to modify a nested child node of ^Car. In MUMPS terminology, "Color" is the 2nd subscript of the variable ^Car (both the names of the child-nodes and the child-nodes themselves are called subscripts). Hierarchical variables are similar to objects with properties in Object Oriented languages. Additionally, all subscripts of variables are automatically kept in sorted order. Numeric subscripts (including floating-point numbers) are stored from lowest to highest. All non-numeric subscripts are stored in alphabetical order following the numbers. In MUMPS terminology, this is canonical order. By using only non-negative integer subscripts, the MUMPS programmer can emulate the Array
Array

In computer science, an array is a data structure consisting of a group of element s that are accessed by index . In most programming languages each element has the same data type and the array occupies a contiguous area of computer memory....
s data type from other languages. Although MUMPS does not natively offer a full set of DBMS
Database management system

A database management system is computer software that manages databases. DBMSes may use any of a variety of database models, such as the network model or relational model....
 features, several DBMS systems have been built on top of it that provide application developers with flat-file, relational and network database features.

As a secondary language feature, you can abbreviate nearly all commands and native functions to a single character to save space; this was a common feature of languages designed in this period (eg, early BASICs). Additionally, there are built-in operators which treat a delimited string (eg, comma-separated values
Comma-separated values

A Comma separated values file is a computer data file used for implementing the tried and true organizational tool, the Comma Separated List....
) as an array. Early MUMPS programmers would often store a structure of related information as a delimited string, parsing it after it was read in; this saved disk access time and offered considerable speed advantages on some hardware.

MUMPS has no data types. Numbers can be treated as strings of digits, or strings can be treated as numbers by numeric operators (coerced, in MUMPS terminology). Coercion can have some odd side effects, however. For example, when a string is coerced, the parser turns as much of the string (starting from the left) into a number as it can, then discards the rest. Thus the statement IF 20<"30 DUCKS" is evaluated as TRUE in MUMPS.

Other features of the language are intended to help MUMPS applications interact with each other in a multi-user environment. Database locks, process identifiers, and atomicity
Atomicity

In database systems, atomicity is one of the ACID database transaction properties. In an atomic transaction, a series of database operations either all occur, or nothing occurs....
 of database update transactions are all required of standard MUMPS implementations.

In contrast to languages in the C or Wirth traditions, some space characters between MUMPS statements are significant. A single space separates a command from its argument, and a space, or newline, separates each argument from the next MUMPS token. Commands which take no arguments (eg, ELSE) require two following spaces. The concept is that one space separates the command from the (nonexistent) argument, the next separates the "argument" from the next command. Newlines are also significant; an IF, ELSE or FOR command processes (or skips) everything else til the end-of-line. To make those statements control multiple lines, you must use the DO command to create a code block.

"Hello, World!" in MUMPS

A simple Hello world program
Hello world program

A "Hello World" program is a computer program that prints out "Hello world!" on a display device. It is used in many introductory tutorials for teaching a programming language....
 in MUMPS might be:

hello write "Hello, World!",! quit

and would be run from the MUMPS command line with the command 'do ^hello'. Since MUMPS allows commands to be strung together on the same line, and since commands can be abbreviated to a single letter, this routine could be made more compact:

hello w "Hello, World!",! q

The ',!' after the text generates a newline. The 'quit' is not strictly necessary at the end of a function like this, but is good programming practice in case other functions are added below 'hello' later.

Summary of key language features

The following summary seeks to give programmers familiar with other languages a feeling for what MUMPS is like. This is not a formal language specification, and many features and qualifiers have been omitted for brevity. ANSI X11.1-1995 gives a complete, formal description of the language; an annotated version of this standard is available online.

Data types: There is one universal datatype, automatically interpreted/converted to string, integer, or floating-point number as context requires.

Booleans: In IF statements and other conditional statements, any numeric, nonzero value is treated as True. a<b yields 1 if a is less than b, 0 otherwise.

Declarations: None. All variables are dynamically created on first reference.

Lines: are important syntactic entities, unlike their status in languages patterned on C or Pascal. Multiple statements per line are allowed and are common. The scope of IF and FOR is "the remainder of current line."

Case sensitivity: Commands and intrinsic functions are case-insensitive. In contrast, variable names and labels are case-sensitive. There is no special meaning for upper vs. lower-case and few widely followed conventions. The percent sign (%) is legal as first character of variables and labels.

Postconditionals: SET:N<10 A="FOO" sets A to "FOO" if N is less than 10; DO:N>100 PRINTERR, performs PRINTERR if N is greater than 100. This construct provides a conditional whose scope is less than a full line.

Abbreviation: You can abbreviate nearly all commands and native functions to one or two characters.

Reserved words: None. Since MUMPS interprets source code by context, there is no need for reserved words. You may use the names of language commands as variables. There has been no obfuscated MUMPS contest as in C, despite the potential of examples such as the following, perfectly legal, MUMPS code:

GREPTHIS NEW SET,NEW,THEN,IF,KILL,QUIT SET IF="KILL",SET="11",KILL="l1",QUIT="RETURN",THEN="KILL" IF IF=THEN DO THEN QUIT:$QUIT QUIT QUIT ; (quit) THEN IF IF,SET&KILL SET SET=SET+KILL QUIT

Arrays: are created dynamically, stored as B-trees, use almost no space for missing nodes, can use any number of subscripts, and subscripts can be strings or numeric (including floating point). Arrays are always automatically stored in sorted order, so there is never any occasion to sort, pack, reorder, or otherwise reorganize the database. $ORDER, $ZPREVIOUS, and $QUERY functions provide efficient traversal of the fundamental array structure, on disk or in memory.

for i=10000:1:12345 set sqtable(i)=i*i set address("Smith","Daniel")="dpbsmith@world.std.com"

Local arrays: variable names not beginning with caret are stored in memory by process, are private to the creating process, expire when the creating process terminates. The available storage depends on partition size, but is typically small (32K).

Global arrays: ^abc, ^def. These are stored on disk, are available to all processes, and are persistent when the creating process terminates. Very large globals (eg, hundreds of megabytes) are practical and efficient in most implementations. This is MUMPS' main "database" mechanism. It is used instead of calling on the operating system to create, write, and read files.

Indirection: in many contexts, @VBL can be used, and effectively substitutes the contents of VBL into another MUMPS statement. SET XYZ="ABC" SET @XYZ=123 sets the variable ABC to 123. SET SUBROU="REPORT" DO @SUBROU performs the subroutine named REPORT. This is effectively the operational equivalent of "pointers" in other languages.

Piece function: This breaks variables into pieces guided by a user specified separator character. Those who know awk will find this familiar. $PIECE(STRINGVAR,"^",3) means the "third caret-separated piece of STRINGVAR." It can appear as an assignment target. After

SET X="dpbsmith@world.std.com"

$PIECE("world.std.com",".",2) yields "std" SET $P(X,"@",1)="office" causes X to become "office@world.std.com" (note that $P is equivalent to $PIECE and could be written as such).

Order function

Set stuff(6)="xyz",stuff(10)=26,stuff(15)=""

$Order(stuff("")) yields 6, $Order(stuff(6)) yields 10, $Order(stuff(8)) yields 10, $Order(stuff(10)) yields 15, $Order(stuff(15)) yields "".

Set i="" For Set i=$O(stuff(i)) Quit:i="" Write !,i,10,stuff(i)

Here, the argument-less For repeats until stopped by a terminating Quit. This line prints a table of i and stuff(i) where i is successively 6, 10, and 15.

Multi-User/Multi-Tasking/Multi-Processor: MUMPS supports multiple simultaneous users and processes even when the underlying operating system does not (Eg. MS-DOS). Additionally, by specifying a machine name in a variable (as in SET ^|"DENVER"|A(1000)="Foo"), you can access data on remote machines.

For a thorough listing of the rest of the MUMPS commands, operators, functions and special variables, see these online resources:
  • , or the (out of print) book of the same name by Ed de Moel. Much of the language syntax is detailed there, with examples of usage.
  • , showing the evolution of the language and differences between versions of the ANSI standard.


"MUMPS" vs. "M" naming debate

While of little interest to those outside the MUMPS/M community, this topic has been contentious there.

All of the following positions can, and have been, supported by knowledgeable people at various times:
  • The language's name became M in 1993 when the M Technology Association adopted it.
  • The name became M on December 8 1995 with the approval of ANSI X11.1-1995
  • Both M and MUMPS are officially accepted names.
  • M is only an "alternate name" or "nickname" for the language, and MUMPS is still the official name.


Some of the contention arose in response to strong M advocacy on the part of one commercial interest, InterSystems
InterSystems

InterSystems Corporation is a vendor of software for high-performance database management system, rapid Software engineering, Enterprise application integration, and healthcare information systems....
, whose chief executive disliked the name MUMPS and felt that it represented a serious marketing obstacle. Thus, favoring M to some extent became identified as alignment with InterSystems. The dispute also reflected rivalry between organizations (the M Technology Association, the MUMPS Development Committee, the ANSI and ISO Standards Committees) as to who determines the "official" name of the language. Some writers have attempted to defuse the issue by referring to the language as M[UMPS], square brackets being the customary notation for optional syntax elements. A leading authority, and the author of an open source MUMPS implementation, Professor Kevin O'Kane, uses only 'MUMPS'.

The most recent standard (ISO/IEC 11756:1999, re-affirmed on 6 January 2005), still mentions both M and MUMPS as officially accepted names.

The MUMPS epoch

In MUMPS, the current date and time is contained in a special system variable, $H (short for "HOROLOG"). The format is a pair of integers separated by a comma, e.g. "54321,12345" The first number is the number of days since December 31, 1840, i.e. day number 1 is January 1, 1841; the second is the number of seconds since midnight.

James M. Poitras has written that he chose this epoch for the date and time routines in a package developed by his group at MGH in 1969:

(More colorful versions have circulated in the folklore, suggesting, for example, that December 31 1840 was the exact date of the first entry in the MGH
Massachusetts General Hospital

Massachusetts General Hospital is a teaching hospital of Harvard Medical School and a biomedical research facility in Boston, Massachusetts.It is owned and operated by Partners HealthCare ....
 records, but these seem to be urban legends.)

Sample programs

An example of "traditional" M coding style, from the Fileman system written for the US Government Veterans' Administration. This fragment uses statement abbreviations and cryptic routine and variable names, extensively. In an era in which disks were small, memory smaller, and I/O often limited to 300 baud
Baud

In telecommunications and electronics, baud is synonymous to symbols/s or pulses/s. It is the unit of symbol rate, also known as baud rate or modulation rate; the number of distinct symbol changes made to the transmission medium per second in a digitally modulation signal or a line code....
, this made some sense. Modern MUMPS code typically uses helpful variable names and would avoid statement abbreviations if possible. There is still a line length limit in most MUMPS implementations, however.

%DTC %DTC ; SF/XAK - DATE/TIME OPERATIONS ;1/16/92 11:36 AM ;;19.0;VA FileMan;;Jul 14, 1992 D I 'X1!'X2 S X="" Q S X=X1 D H S X1=%H,X=X2,X2=%Y+1 D H S X=X1-%H,%Y=%Y+1&X2 K %H,X1,X2 Q ; C S X=X1 Q:'X D H S %H=%H+X2 D YMD S:$P(X1,".",2) X=X_"."_$P(X1,".",2) K X1,X2 Q S S %=%#60/100+(%#3600\60)/100+(%\3600)/100 Q ; H I X<1410000 S %H=0,%Y=-1 Q S %Y=$E(X,1,3),%M=$E(X,4,5),%D=$E(X,6,7) S %T=$E(X_0,9,10)*60+$E(X_"000",11,12)*60+$E(X_"00000",13,14) TOH S %H=%M>2&'(%Y#4)+$P("^31^59^90^120^151^181^212^243^273^304^334","^",%M)+%D S %='%M!'%D,%Y=%Y-141,%H=%H+(%Y*365)+(%Y\4)-(%Y>59)+%,%Y=$S(%:-1,1:%H+4#7) K %M,%D,% Q ; DOW D H S Y=%Y K %H,%Y Q DW D H S Y=%Y,X=$P("SUN^MON^TUES^WEDNES^THURS^FRI^SATUR","^",Y+1)_"DAY" S:Y<0 X="" Q 7 S %=%H>21608+%H-.1,%Y=%\365.25+141,%=%#365.25\1 S %D=%+306#(%Y#4=0+365)#153#61#31+1,%M=%-%D\29+1 S X=%Y_"00"+%M_"00"+%D Q ; YX D YMD S Y=X_% G DD^%DT YMD D 7 S %=$P(%H,",",2) D S K %D,%M,%Y Q T F %=1:1 S Y=$E(X,%) Q:"+-"[Y G 1^%DT:$E("TODAY",%)'=Y S X=$E(X,%+1,99) G PM:Y="" I +X'=X D DMW S X=% G:'X 1^%DT PM S @("%H=$H"_Y_X) D TT G 1^%DT:%I(3)'?3N,D^%DT N F %=2:1 S Y=$E(X,%) Q:"+-"[Y G 1^%DT:$E("NOW",%)'=Y I Y="" S %H=$H G RT S X=$E(X,%+1,99) I X?1.N1"H" S X=X*3600,%H=$H,@("X=$P(%H,"","",2)"_Y_X),%=$S(X<0:-1,1:0)+(X\86400),X=X#86400,%H=$P(%H,",")+%_","_X G RT D DMW G 1^%DT:'% S @("%H=$H"_Y_%),%H=%H_","_$P($H,",",2) RT D TT S %=$P(%H,",",2) D S S %=X_% I %DT'["S" S %=+$E(%,1,12) Q:'$D(%(0)) S Y=% G E^%DT PF S %H=$H D YMD S %(9)=X,X=%DT["F"*2-1 I @("%I(1)*100+%I(2)"_$E("> <",X+2)_"$E(%(9),4,7)") S %I(3)=%I(3)+X Q TT D 7 S %I(1)=%M,%I(2)=%D,%I(3)=%Y K %M,%D,%Y Q NOW S %H=$H,%H=$S($P(%H,",",2):%H,1:%H-1) D TT S %=$P(%H,",",2) D S S %=X_$S(%:%,1:.24) Q DMW S %=$S(X?1.N1"D":+X,X?1.N1"W":X*7,X?1.N1"M":X*30,+X=X:X,1:0) Q COMMA ; S %D=X<0 S:%D X=-X S %=$S($D(X2):+X2,1:2),X=$J(X,1,%),%=$L(X)-3-$E(23456789,%),%L=$S($D(X3):X3,1:12) F %=%:-3 Q:$E(X,%)="" S X=$E(X,1,%)_","_$E(X,%+1,99) S:$D(X2) X=$E("$",X2["$")_X S X=$J($E("(",%D)_X_$E(" )",%D+1),%L) K %,%D,%L Q HELP S DDH=$S($D(DDH):DDH,1:0),A1="Examples of Valid Dates:" D % S A1=" JAN 20 1957 or 20 JAN 57 or 1/20/57"_$S(%DT'["N":" or 012057",1:"") D % S A1=" T (for TODAY), T+1 (for TOMORROW), T+2, T+7, etc." D % S A1=" T-1 (for YESTERDAY), T-3W (for 3 WEEKS AGO), etc." D % S A1="If the year is omitted, the computer "_$S(%DT["P":"assumes a date in the PAST.",1:"uses the CURRENT YEAR.") D % I %DT'["X" S A1="You may omit the precise day, as: JAN, 1957" D % I %DT'["T",%DT'["R" G 0 S A1="If the date is omitted, the current date is assumed." D % S A1="Follow the date with a time, such as JAN 20@10, T@10AM, 10:30, etc." D % S A1="You may enter a time, such as NOON, MIDNIGHT or NOW." D % I %DT["S" S A1="Seconds may be entered as 10:30:30 or 103030AM." D % I %DT["R" S A1="Time is REQUIRED in this response." D % 0 Q:'$D(%DT(0)) S A1=" " D % S A1="Enter a date which is "_$S(%DT(0)["-":"less",1:"greater")_" than or equal to " D % S Y=$S(%DT(0)["-":$P(%DT(0),"-",2),1:%DT(0)) D DD^%DT:Y'["NOW" I '$D(DDS) W Y,"." K A1 Q S DDH(DDH,"T")=DDH(DDH,"T")_Y_"." K A1 Q ; % I '$D(DDS) W !," ",A1 Q S DDH=DDH+1,DDH(DDH,"T")=" "_A1 Q

The following code is a complete implementation of ROT13
ROT13

ROT13 is a simple substitution cipher used in online forums as a means of hiding spoiler s, punch line, puzzle solutions, and profanitys from the casual glance....
, a trivially breakable cipher used for various purposes on the Net, not high security. It illustrates the compact nature of MUMPS code and is rather less cryptic than the sample above.

ST ; ROT13 ; Gunter Rensch ; 2000-01-03 ; Encrypt/Decrypt ROT13 Q ; no direct execution ; ; call from your program with ; S A="String" ; S A=$$ROT^ROT13(.A) ; ROT(R) ; S S1="ABCDEFGHIJKLMNOPQRSTUVWXYZ" S S2="NOPQRSTUVWXYZABCDEFGHIJKLM" S s1="abcdefghijklmnopqrstuvwxyz" S s2="nopqrstuvwxyzabcdefghijklm" S R=$TR(R,S1_s1,S2_s2) Q R

A second implementation is below, which illustrates the possibilities of concision in MUMPS.

s A="String" F i=1:1:$L(A) W $c($S($A($E(A,i))<91:$A($E(A,i))-52#26+65,1:$A($E(A,i))-84#26+97))



Finally, one of the shortest programs ever written in a high language, demonstrating the extreme concision of which MUMPS is capable. s x="x x" x x The same algorithm using expanded variable and command names Set X="Xecute X" Xecute X This program sets a value of "x x" to a variable named x, and then launches an infinite recursive execution of x, resulting in stack overflow. At 13 characters, including spaces and an end-of-line mark, the first variant demonstrates that it can be as compact and obscure as such languages as Perl
Perl

In computer programming, Perl is a high-level programming language, List of programming languages by category, Interpreter , dynamic programming language....
.

See also

  • PSL
    Profile Scripting Language

    Profile Scripting Language is a superset of MUMPS that adds object-oriented language features....
     an extension to MUMPS
  • Caché ObjectScript
    Caché ObjectScript

    The original scripting language for Cach? , Cach? ObjectScript is an object-oriented language. One interesting feature of Cach? ObjectScript is that it enables the intermixing of data access methods ? developers may view data as Object s, as relational tables , or as multidimensional arrays....
     an object oriented extension to MUMPS from a prominent MUMPS vendor
  • EsiObjects an Open Source Object Oriented extension to MUMPS

Further reading

  • Walters, Richard (1989). "ABCs of MUMPS. 1989: Butterworth-Heinemann, ISBN 1-55558-017-3.
  • Walters, Richard (1997). M Programming: A Comprehensive Guide. Digital Press. ISBN 1-55558-167-6.
  • Lewkowicz, John. The Complete MUMPS : An Introduction and Reference Manual for the MUMPS Programming Language. ISBN 0-13-162125-4
  • Kirsten, Wolfgang, et al. (2003) Object-Oriented Application Development Using the Caché Postrelational Database ISBN 3-540-00960-4
  • Martínez de Carvajal Hedrich, Ernesto (1993). "El Lenguaje MUMPS". Completa obra en castellano sobre el lenguaje Mumps. ISBN 84-477-0125-5. Distribuido exclusivamente por su autor (ecarvajal@hedrich.es)
  • O'Kane, K.C.; A language for implementing information retrieval software, Online Review, Vol 16, No 3, pp 127-137 (1992).
  • O'Kane, K.C.; and McColligan, E. E., A case study of a Mumps intranet patient record, Journal of the Healthcare Information and Management Systems Society, Vol 11, No 3, pp 81-95 (1997).
  • O'Kane, K.C.; and McColligan, E.E., A Web Based Mumps Virtual Machine, Proceedings of the American Medical Informatics Association 1997


External links

  • (1999) General source; also specific source for the Poitras quote re the origin of the 1840 epoch.
  • A MUMPS story at The Daily WTF
    The Daily WTF

    The Daily WTF is a humorous blog dedicated to ?Curious Perversions in Information Technology?. The blog, run by Alex Papadimoulis, ?offers living examples of code that invites the exclamation ?Wiktionary:WTF!??? and ?recounts tales of disastrous development, from project management gone spectacularly bad to inexplicable coding choices.?...
  • An Object Oriented extension of MUMPS
  • DSM, MSM and OpenM