MUMPS - MUMPS

MUMPS
Paradigma Imperativ , prozedural
Entworfen von Neil Pappalardo
Erstmals erschienen 1966 ; Vor 55 Jahren ( 1966 )
Stabile Version
ANSI X11.1-1995 / 8. Dezember 1995 ( 1995-12-08 )
Schreibdisziplin Typlos
Betriebssystem Plattformübergreifend
Beeinflusst von
JOSS
Beeinflusst
PSL , Caché ObjectScript

MUMPS ("Massachusetts General Hospital Utility Multi-Programming System"), oder M , ist eine leistungsstarke Schlüssel-Wert-Datenbank für die Transaktionsverarbeitung mit integrierter Programmiersprache . Es wurde ursprünglich am Massachusetts General Hospital für die Verwaltung von Krankenhauslaborinformationssystemen entwickelt.

Die MUMPS-Technologie hat sich seitdem als die vorherrschende Datenbank für Gesundheitsinformationssysteme und elektronische Patientenakten in den Vereinigten Staaten entwickelt. MUMPS-basierte Informationssysteme laufen über 40 % der Krankenhäuser in den USA, laufen in allen Bundeskrankenhäusern und -kliniken der USA und bieten Gesundheitsinformationsdienste für über 54 % der Patienten in den USA

Ein einzigartiges Merkmal der MUMPS-Technologie ist die integrierte Datenbanksprache, die einen direkten Hochgeschwindigkeits-Lese-/Schreibzugriff auf den permanenten Plattenspeicher ermöglicht. Dies bietet eine enge Integration unbegrenzter Anwendungen in einer einzigen Datenbank und bietet eine extrem hohe Leistung und Zuverlässigkeit als Online-Transaktionsverarbeitungssystem .

Überblick

MUMPS ist eine Sprache, die für die Erstellung von Datenbankanwendungen bestimmt und entwickelt wurde. Sekundärsprachfeatures wurden integriert, um Programmierern zu helfen, Anwendungen mit minimalen Rechenressourcen zu erstellen. Die ursprünglichen Implementierungen wurden interpretiert , obwohl moderne Implementierungen vollständig oder teilweise kompiliert werden können . Einzelne "Programme" laufen in " Speicherpartitionen " . Frühe MUMPS-Speicherpartitionen waren auf 2048 Byte beschränkt, so dass aggressive Abkürzungen die Multiprogrammierung auf stark ressourcenbegrenzter Hardware stark unterstützten, da mehr als ein MUMPS-Job in die zu dieser Zeit in der Hardware vorhandenen sehr kleinen Speicher passen konnte. Die Fähigkeit, Mehrbenutzersysteme bereitzustellen, war ein weiteres Sprachdesignmerkmal. Das Wort „ M ulti- P rogramming“ im Akronym weist darauf hin. Selbst die frühesten Maschinen, auf denen MUMPS ausgeführt wurde, unterstützten mehrere gleichzeitig laufende Jobs. Mit dem Wechsel von Minicomputern zu Mikrocomputern einige Jahre später könnte sogar ein "Einzelbenutzer-PC" mit einer einzelnen 8-Bit-CPU und 16K oder 64K Speicher mehrere Benutzer unterstützen, die sich von (nicht- grafische ) Videoterminals .

Da der Speicher ursprünglich knapp war, legte das Sprachdesign für MUMPS Wert auf sehr knappen Code. So könnte jeder MUMPS-Befehl oder Funktionsname auf ein bis drei Buchstaben abgekürzt werden, zB Quit (Programm beenden) als Q, $P = $Stückfunktion, R = Lesebefehl, $TR = $Translate-Funktion. Leerzeichen und Zeilenendemarkierungen sind in MUMPS von Bedeutung, da der Zeilenbereich das gleiche knappe Sprachdesign förderte. Somit könnte eine einzige Zeile Programmcode mit wenigen Zeichen eine Idee ausdrücken, für die andere Programmiersprachen 5 bis 10 Mal so viele Zeichen benötigen könnten. Abkürzungen waren ein übliches Merkmal von Sprachen, die in dieser Zeit entwickelt wurden (zB FOCAL-69 , frühe BASICs wie Tiny BASIC usw.). Ein unglücklicher Nebeneffekt davon, gepaart mit der frühen Notwendigkeit, minimalistischen Code zu schreiben, war, dass MUMPS-Programmierer routinemäßig Code nicht kommentierten und umfangreiche Abkürzungen verwendeten. Dies bedeutete, dass selbst ein erfahrener MUMPS-Programmierer nicht einfach eine Seite Code überfliegen konnte, um ihre Funktion zu sehen, sondern sie Zeile für Zeile analysieren musste.

Die Datenbankinteraktion ist transparent in die Sprache integriert. Die MUMPS-Sprache stellt eine hierarchische Datenbank aus persistenten spärlichen Arrays bereit , die implizit für jede MUMPS-Anwendung "geöffnet" wird. Alle Variablennamen, denen das Caret-Zeichen ("^") vorangestellt ist, verwenden einen permanenten (anstelle von RAM) Speicher, behalten ihre Werte nach dem Beenden der Anwendung bei und sind für andere laufende Anwendungen sichtbar (und veränderbar). Variablen, die diesen gemeinsamen und permanenten Speicher verwenden, werden in MUMPS als Globals bezeichnet , da der Bereich dieser Variablen für alle Jobs auf dem System "global verfügbar" ist. Die neuere und häufigere Verwendung des Namens "globale Variablen" in anderen Sprachen ist ein eingeschränkterer Namensbereich, der aus der Tatsache resultiert , dass Variablen ohne Gültigkeitsbereich für alle Programme, die im selben Prozess ausgeführt werden, "global" verfügbar sind, aber nicht von anderen geteilt werden mehrere Prozesse. Der MUMPS-Speichermodus (dh Globals, die als persistente spärliche Arrays gespeichert werden) verleiht der MUMPS-Datenbank die Eigenschaften einer dokumentenorientierten Datenbank .

Alle Variablennamen, denen kein Caret-Zeichen ("^") vorangestellt ist, sind temporär und privat. Wie globale Variablen haben auch sie ein hierarchisches Speichermodell, sind aber nur für einen einzelnen Job "lokal verfügbar", daher werden sie "lokale" genannt. Sowohl "globals" als auch "locals" können untergeordnete Knoten haben ( in der MUMPS-Terminologie als Indizes bezeichnet ). Tiefgestellte Zeichen sind nicht auf Ziffern beschränkt – jedes ASCII- Zeichen oder jede Zeichengruppe kann ein tiefgestellter Bezeichner sein. Während dies für moderne Sprachen wie Perl oder JavaScript nicht ungewöhnlich ist, war es Ende der 1970er Jahre eine sehr ungewöhnliche Funktion. Diese Fähigkeit wurde in MUMPS-Systemen vor dem ANSI-Standard von 1984 nicht universell implementiert, da der Standard nur kanonisch numerische Indizes erlaubte. Somit kann die Variable mit dem Namen 'Auto' die Indizes "Door", "Steering Wheel" und "Engine" haben, die jeweils einen Wert enthalten und eigene Indizes haben können. Die Variable ^Car("Door") könnte beispielsweise einen verschachtelten Variablenindex von "Color" haben. So könnte man sagen

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

um einen verschachtelten untergeordneten Knoten von ^Car zu ändern. In MUMPS-Begriffen ist "Color" der 2. Index der Variablen ^Car (sowohl die Namen der Child-Knoten als auch die Child-Knoten selbst werden ebenfalls als Subscripts bezeichnet). Hierarchische Variablen ähneln Objekten mit Eigenschaften in vielen objektorientierten Sprachen. Darüber hinaus erfordert das MUMPS-Sprachdesign, dass alle Indizes von Variablen automatisch in sortierter Reihenfolge gehalten werden. Numerische Indizes (einschließlich Gleitkommazahlen) werden vom niedrigsten zum höchsten gespeichert. Alle nicht numerischen Indizes werden in alphabetischer Reihenfolge nach den Zahlen gespeichert. In der MUMPS-Terminologie ist dies die kanonische Ordnung . Durch die Verwendung nur nicht-negativer ganzzahliger Indizes kann der MUMPS-Programmierer den Datentyp Arrays aus anderen Sprachen emulieren . Obwohl MUMPS nicht nativ einen vollständigen Satz von DBMS- Funktionen wie obligatorische Schemata bietet, wurden mehrere DBMS-Systeme darauf aufgebaut, die Anwendungsentwicklern Flatfile-, relationale und Netzwerkdatenbankfunktionen bieten .

Darüber hinaus gibt es eingebaute Operatoren, die einen durch Trennzeichen getrennten String (zB durch Kommas getrennte Werte ) als Array behandeln. Frühe MUMPS-Programmierer speicherten oft eine Struktur zusammengehöriger Informationen als begrenzte Zeichenfolge und analysierten sie, nachdem sie eingelesen wurden; dies sparte Zeit für den Festplattenzugriff und bot auf einigen Hardware-Geräten erhebliche Geschwindigkeitsvorteile.

MUMPS hat keine Datentypen. Zahlen können als Ziffernfolgen behandelt werden, oder Zeichenfolgen können von numerischen Operatoren ( erzwungen , in der MUMPS-Terminologie) als Zahlen behandelt werden . Zwang kann jedoch einige seltsame Nebenwirkungen haben. Wenn beispielsweise eine Zeichenfolge erzwungen wird, wandelt der Parser so viel wie möglich von der Zeichenfolge (von links beginnend) in eine Zahl um und verwirft dann den Rest. Damit wird die Anweisung IF 20<"30 DUCKS"wie TRUEbei MUMPS ausgewertet .

Andere Funktionen der Sprache sollen MUMPS-Anwendungen helfen, in einer Mehrbenutzerumgebung miteinander zu interagieren. Datenbanksperren, Prozesskennungen und die Atomarität von Datenbankaktualisierungstransaktionen sind für Standard-MUMPS-Implementierungen erforderlich.

Im Gegensatz zu Sprachen in der C- oder Wirth- Tradition sind einige Leerzeichen zwischen MUMPS-Anweisungen von Bedeutung. Ein einzelnes Leerzeichen trennt einen Befehl von seinem Argument und ein Leerzeichen oder eine neue Zeile trennt jedes Argument vom nächsten MUMPS-Token. Befehle, die keine Argumente annehmen (zB ELSE) benötigen zwei folgende Leerzeichen. Das Konzept ist, dass ein Leerzeichen den Befehl vom (nicht vorhandenen) Argument trennt, das nächste das "Argument" vom nächsten Befehl. Zeilenumbrüche sind ebenfalls von Bedeutung; ein IF, ELSEoder FORBefehl verarbeitet (oder überspringt) alles andere bis zum Zeilenende. Damit diese Anweisungen mehrere Zeilen steuern, müssen Sie den DOBefehl verwenden, um einen Codeblock zu erstellen.

"Hallo Welt!" Beispiel

Ein einfaches "Hallo, Welt!" Programm in MUMPS könnte sein:

hello()
  write "Hello, World!",!
  quit

und würde von der MUMPS-Befehlszeile mit dem Befehl ausgeführt werden do ^hello. Da MUMPS die Aneinanderreihung von Befehlen in einer Zeile ermöglicht und Befehle auf einen einzigen Buchstaben abgekürzt werden können, könnte diese Routine kompakter gestaltet werden:

hello() w "Hello, World!",! q

Das ' ,!' nach dem Text erzeugt einen Zeilenumbruch.

Geschichte

Genesis

MUMPS wurde 1966 und 1967 von Neil Pappalardo , Robert Greenes und Curt Marble in Dr. Octo Barnetts Labor am Massachusetts General Hospital (MGH) in Boston entwickelt . Es wurde später von den technischen Leitern Dennis "Dan" Brevik und Paul Stylos von Dezember 1970 und 1971.

Das ursprüngliche MUMPS-System wurde, wie einige Jahre später Unix , auf einem DEC PDP-7 aufgebaut . Octo Barnett und Neil Pappalardo waren auch an der Planung von MGH für ein Krankenhausinformationssystem beteiligt, erhielten ein abwärtskompatibles PDP-9 und begannen, MUMPS im Aufnahmezyklus und in der Labortestberichterstattung zu verwenden. MUMPS war damals eine interpretierte Sprache , enthielt jedoch selbst dann ein hierarchisches Datenbank- Dateisystem, um die Interaktion mit den Daten und abstrakte Plattenoperationen zu standardisieren, sodass sie nur von der MUMPS-Sprache selbst durchgeführt wurden.

Einige Aspekte der MUMPS aus verfolgt werden RAND Corporation 's JOSS durch BBN ' s TELCOMP und STRINGCOMP . Das MUMPS-Team hat sich entschieden, die Portabilität zwischen Maschinen als Designziel zu berücksichtigen.

Eine fortgeschrittene Funktion der MUMPS-Sprache, die in Betriebssystemen oder Computerhardware der damaligen Zeit nicht weit verbreitet war, war Multitasking . Obwohl Timesharing auf Großrechnern in Systemen wie Multics immer häufiger vorkam , liefen auf den meisten Mini-Computern keine parallelen Programme und Threading war überhaupt nicht verfügbar. Selbst auf Mainframes war die Variante der Stapelverarbeitung, bei der ein Programm vollständig ausgeführt wurde, die häufigste Implementierung für ein Betriebssystem der Multiprogrammierung.

Es dauerte einige Jahre, bis Unix entwickelt wurde. Das Fehlen von Speicherverwaltungshardware bedeutete auch, dass die gesamte Mehrfachverarbeitung mit der Möglichkeit behaftet war, dass ein Speicherzeiger einen anderen Prozess ändern könnte. MUMPS Programme haben keine Standardmethode in dem Speicher überhaupt direkt zu beziehen, im Gegensatz zu C - Sprache , so da das Multitasking von der Sprache erzwungen wurde, nicht durch ein Programm geschrieben in der Sprache war es unmöglich , das Risiko zu haben, bestand für andere Systeme.

Dan Breviks DEC MUMPS-15 System wurde an ein DEC PDP-15 angepasst , wo es einige Zeit lebte. Es wurde erstmals im Mai 1971 bei Health Data Management Systems in Denver installiert. Die Portabilität erwies sich als nützlich und MUMPS erhielt ein Forschungsstipendium der Regierung, und so wurde MUMPS der Öffentlichkeit zugänglich gemacht, was eine Voraussetzung für Stipendien war. MUMPS wurde bald auf eine Reihe anderer Systeme portiert, darunter das beliebte DEC PDP-8 , das Data General Nova und auf DEC PDP-11 und den Artronix PC12 Minicomputer . Die Nachricht über MUMPS verbreitete sich hauptsächlich in der medizinischen Gemeinschaft und war weit verbreitet und wurde oft lokal für ihre eigenen Bedürfnisse modifiziert.

In den frühen 1970er Jahren gab es viele und unterschiedliche Implementierungen von MUMPS auf einer Reihe von Hardwareplattformen. Eine weitere bemerkenswerte Plattform war das DEC MUMPS-11 von Paul Stylos auf dem PDP-11 und das MIIS von MEDITECH . Im Herbst 1972 nahmen viele MUMPS-Anwender an einer Konferenz in Boston teil, die die damals gebrochene Sprache standardisierte und dazu die MUMPS-Benutzergruppe und das MUMPS-Entwicklungskomitee (MDC) gründeten. Diese Bemühungen erwiesen sich als erfolgreich; ein Standard war 1974 fertig und wurde am 15. September 1977 als ANSI- Standard X11.1-1977 genehmigt. Ungefähr zur gleichen Zeit brachte DEC DSM-11 (Digital Standard MUMPS) für die PDP-11 auf den Markt. Diese dominierte schnell den Markt und wurde zur Referenzimplementierung der Zeit. Außerdem verkaufte InterSystems ISM-11 für den PDP-11 (der mit DSM-11 identisch war).

1980er Jahre

In den frühen 1980er Jahren brachten mehrere Anbieter MUMPS-basierte Plattformen auf den Markt, die dem ANSI-Standard entsprachen. Die bedeutendsten waren:

  • Digital Equipment Corporation mit DSM (Digital Standard MUMPS). DSM-11 wurde durch VAX-11 ersetzt DSM für das VAX/VMS- Betriebssystem, und das wurde in zwei Varianten auf die Alpha portiert : DSM für OpenVMS und als DSM für Ultrix .
  • InterSystems mit ISM (InterSystems M) auf VMS (M/VX), M/11+ auf der PDP-11-Plattform, M/PC auf MS-DOS, M/DG auf Data General , M/VM auf IBM VM/CMS, und M/UX auf verschiedenen Unixen.

Andere Unternehmen entwickelten wichtige MUMPS-Implementierungen:

  • Greystone Technology Corporation mit einer kompilierten Version namens GT.M .
  • DataTree Inc. mit einem Intel PC-basierten Produkt namens DTM .
  • Micronetics Design Corporation mit einer Produktlinie namens MSM für UNIX- und Intel-PC-Plattformen (später portiert auf IBMs VM- Betriebssystem , VAX/VMS-Plattformen und OpenVMS Alpha-Plattformen).
  • Computer Consultants (später umbenannt in MGlobal), ein Houston gegründete Unternehmen ursprünglich erstellt CCSM auf 6800, dann 6809 und schließlich ein Anschluss an die 68000, die später MacMUMPS , ein Mac OS basierten Produkt. Sie arbeiteten auch an der MGM MUMPS-Implementierung. MGlobal hat ihre Implementierung auch auf die DOS-Plattform portiert. MGlobal MUMPS war das erste kommerzielle MUMPS für den IBM PC und die einzige Implementierung für das klassische Mac OS.
  • Tandem Computers hat eine Implementierung für ihre fehlertoleranten Computer entwickelt.

In diesem Zeitraum gab es auch erhebliche MDC-Aktivitäten. Die zweite Überarbeitung des ANSI-Standards für MUMPS (X11.1-1984) wurde am 15. November 1984 genehmigt.

1990er Jahre

  • Am 11. November 1990 wurde die dritte Revision des ANSI-Standards (X11.1-1990) genehmigt.
  • 1992 wurde die gleiche Norm auch als ISO- Norm 11756-1992 übernommen. Etwa zur gleichen Zeit wurde die Verwendung von M als alternativer Name für die Sprache genehmigt.
  • Am 8. Dezember 1995 wurde die vierte Revision des Standards ( X11.1-1995 ) von ANSI und von ISO 1999 als ISO 11756:1999 genehmigt , die auch von ANSI veröffentlicht wurde . Das MDC hat 1998 eine weitere Überarbeitung des Standards abgeschlossen, die jedoch ANSI noch nicht zur Genehmigung vorgelegt wurde.
  • Open M für Windows/NT von InterSystems sowie Open M für Alpha/OSF und Alpha/VMS (ihre ersten 64-Bit-Implementierungen für den 64-Bit-Alpha-Prozessor) wurden veröffentlicht.
  • 1997 wurde die Unicode-Unterstützung in Caché 3.0 von InterSystems hinzugefügt

2000er

  • Im Jahr 2000 war der Middleware- Anbieter InterSystems durch den Kauf mehrerer anderer Anbieter zum dominierenden Akteur auf dem MUMPS-Markt geworden. Anfang der 1990er Jahre erwarben sie DataTree Inc.. Und am 30. Dezember 1995 erwarb InterSystems die DSM-Produktlinie von DEC. InterSystems hat diese Produkte in einer einzigen Produktlinie zusammengefasst und sie auf mehreren Hardwareplattformen als OpenM gebrandmarkt . 1997 brachte InterSystems ein neues Produkt namens Caché auf den Markt . Dies basierte auf ihrem ISM-Produkt, jedoch mit Einflüssen aus den anderen Implementierungen. Die Vermögenswerte der Micronetics Design Corporation wurden am 21. Juni 1998 ebenfalls von InterSystems übernommen. InterSystems bleibt der dominierende MUMPS-Anbieter und verkauft Caché an MUMPS-Entwickler, die Anwendungen für eine Vielzahl von Betriebssystemen schreiben.
  • Die GT.M-Implementierung der Greystone Technology Corporation wurde Mitte der 1990er Jahre an Sanchez Computer Associates (jetzt Teil von FIS ) verkauft. Am 7. November 2000 stellte Sanchez GT.M für Linux unter der GPL- Lizenz zur Verfügung und am 28. Oktober 2005 wurden GT.M für OpenVMS und Tru64 UNIX auch unter der AGPL-Lizenz verfügbar gemacht. GT.M ist weiterhin auf anderen UNIX- Plattformen unter einer traditionellen Lizenz verfügbar .
  • Im Jahr 2000 veröffentlichten Ray Newman und andere MUMPS V1, eine Implementierung von MUMPS (ursprünglich auf FreeBSD) ähnlich wie DSM-11. MUMPS V1 wurde inzwischen auf Linux , Mac OS X und Windows (mit Cygwin) portiert. Zunächst nur für die x86-CPU, wurde MUMPS V1 nun auf den Raspberry Pi portiert.
  • Die neueste Implementierung von MUMPS, die im April 2002 veröffentlicht wurde, ist ein MSM- Derivat namens M21 von der Real Software Company aus Rugby, UK .
  • Es gibt auch mehrere Open-Source-Implementierungen von MUMPS, darunter einige Forschungsprojekte. Das bemerkenswerteste davon ist Mumps/II von Dr. Kevin O'Kane (Professor Emeritus, University of Northern Iowa ) und ein Studentenprojekt. Dr. O'Kane hat den Dolmetscher auch auf Mac OS X portiert.
  • Einer der ursprünglichen Schöpfer der MUMPS-Sprache, Neil Pappalardo, gründete eine Firma namens MEDITECH . Sie erweiterten und bauten auf der MUMPS-Sprache auf und nannten die neue Sprache MIIS (und später eine andere Sprache namens MAGIC). Im Gegensatz zu InterSystems vertreibt MEDITECH keine Middleware mehr, daher werden MIIS und MAGIC nur noch intern bei MEDITECH verwendet.
  • Am 6. Januar 2005 und später erneut am 25. Juni 2010 bestätigte ISO seine MUMPS-bezogenen Standards: ISO/IEC 11756:1999, Sprachstandard , ISO/IEC 15851:1999, Open MUMPS Interconnect und ISO/IEC 15852:1999 , MUMPS Windowing Application Programmers Interface .

Aktuelle Nutzer von MUMPS-Anwendungen

Gesundheitsinformationssysteme des Bundes

Das US Department of Veterans Affairs (ehemals Veterans Administration) war einer der ersten großen Anwender der MUMPS-Sprache. Ihre Entwicklungsarbeit (und spätere Beiträge zur kostenlosen MUMPS-Anwendungscodebasis) beeinflusste viele medizinische Anwender weltweit. 1995 erhielt das Dezentrale Krankenhaus-Computerprogramm (DHCP) von Veterans Affairs den Computerworld Smithsonian Award für den besten Einsatz der Informationstechnologie in der Medizin. Im Juli 2006 erhielt das Department of Veterans Affairs (VA) / Veterans Health Administration (VHA) den Innovations in American Government Award des Ash Institute der John F. Kennedy School of Government an der Harvard University für die Erweiterung des DHCP in die Veterans Health Information Systems and Technology Architecture ( VistA ). Fast das gesamte VA-Krankenhaussystem in den Vereinigten Staaten, der indische Gesundheitsdienst und große Teile des CHCS- Krankenhaussystems des Verteidigungsministeriums verwenden MUMPS-Datenbanken zur Verfolgung klinischer Daten.

Kommerzielle Gesundheitsinformationssysteme

Andere IT-Unternehmen im Gesundheitswesen, die MUMPS verwenden, sind:

Referenzlabore

Viele Referenzlabore wie DASA, Quest Diagnostics und Dynacare verwenden MUMPS-Software, die von Antrim Corporation Code geschrieben wurde oder darauf basiert. Antrim wurde 2001 von Misys Healthcare (jetzt Sunquest Information Systems ) gekauft.

Online-Banking und Handelssysteme

MUMPS wird auch häufig in Finanzanwendungen verwendet. MUMPS hat sich schon früh im Finanzsektor einen Namen gemacht und ist bei vielen Banken und Kreditgenossenschaften im Einsatz. Es wird von TD Ameritrade sowie von der Bank of England und der Barclays Bank verwendet .

Aktuelle Implementierungen

Seit 2005 sind Greystone Technology MUMPS (GT.M) von Fidelity National Information Services und Caché von Intersystems Corporation die beliebtesten Implementierungen von MUMPS. Die Europäische Weltraumorganisation (ESA) gab am 13. Mai 2010 bekannt, dass sie die InterSystems Caché- Datenbank zur Unterstützung der Gaia- Mission nutzen wird. Ziel dieser Mission ist es, die Milchstraße mit beispielloser Präzision zu kartieren . InterSystems ist dabei, Caché zugunsten von Iris auslaufen zu lassen.

Andere aktuelle Implementierungen umfassen:

  • M21
  • YottaDB
  • MiniM
  • Referenzstandard M
  • FreeM

Zusammenfassung der wichtigsten Sprachfunktionen

ANSI X11.1-1995 gibt eine vollständige, formale Beschreibung der Sprache; eine kommentierte Version dieses Standards ist online verfügbar.

Datentypen : Es gibt einen universellen Datentyp , der je nach Kontext implizit in String- , Integer- oder Gleitkomma-Datentypen umgewandelt wird.

Boolesche Werte (genannt truthvalues in MUMPS): In IF - Befehle und andere Syntax , die Ausdrücke ausgewertet als Bedingungen, eine beliebige Zeichenfolge Wert hat , wird als numerischer Wert ausgewertet und, wenn das ein Nicht - Null - Wert ist, dann wird es als wahr interpretiert. a<bergibt 1, wenn a kleiner als b ist, andernfalls 0.

Erklärungen : Keine. Alle Variablen werden beim ersten Zuweisen eines Wertes dynamisch erstellt.

Linien : sind wichtige syntaktische Einheiten, im Gegensatz zu ihrem Status in Sprachen, die an C oder Pascal angelehnt sind. Mehrere Anweisungen pro Zeile sind zulässig und üblich. Der Gültigkeitsbereich jedes IF-, ELSE- und FOR-Befehls ist "der Rest der aktuellen Zeile".

Fall Empfindlichkeit : Befehle und Eigenfunktionen sind Groß- und Kleinschreibung. Im Gegensatz dazu muss bei Variablennamen und -labels die Groß-/Kleinschreibung beachtet werden. Es gibt keine besondere Bedeutung für Groß- und Kleinschreibung und nur wenige weit verbreitete Konventionen. Das Prozentzeichen (%) ist als erstes Zeichen von Variablen und Labels zulässig.

Nachkonditionale : Die Ausführung von fast jedem Befehl kann kontrolliert werden, indem man ihm einen Doppelpunkt und einen Wahrheitswertausdruck folgt. SET:N<10 A="FOO" setzt A auf "FOO", wenn N kleiner als 10 ist; DO:N>100 PRINTERR,führt PRINTERR aus, wenn N größer als 100 ist. Dieses Konstrukt stellt eine Bedingung bereit, deren Gültigkeitsbereich kleiner als eine volle Zeile ist.

Abkürzung : Sie können fast alle Befehle und nativen Funktionen auf ein, zwei oder drei Zeichen abkürzen.

Reservierte Wörter : Keine. Da MUMPS den Quellcode kontextabhängig interpretiert, sind keine reservierten Wörter erforderlich. Sie können die Namen von Sprachbefehlen als Variablen verwenden, daher ist Folgendes absolut legaler 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

MUMPS kann durch die Verwendung der kontrahierten Operatorsyntax verschleiert werden, wie in diesem knappen Beispiel gezeigt, das aus dem obigen Beispiel abgeleitet wurde:

GREPTHIS()
       N S,N,T,I,K,Q S I="K",S="11",K="l1",Q="R",T="K"
       I I=T D T
       Q:$Q Q Q
T  I I,S&K S S=S+K Q

Arrays : werden dynamisch erstellt, als B-Bäume gespeichert , sind spärlich (dh verwenden fast keinen Platz für fehlende Knoten), können eine beliebige Anzahl von Indizes verwenden, und Indizes können Zeichenfolgen oder numerisch (einschließlich Gleitkomma) sein. Arrays werden immer automatisch in sortierter Reihenfolge gespeichert, sodass keine Gelegenheit besteht, die Datenbank zu sortieren, zu packen, neu anzuordnen oder anderweitig zu reorganisieren. Eingebaute Funktionen wie $DATA, $ORDER, $NEXT(veraltet) und $QUERY ermöglichen eine effiziente Untersuchung und Durchquerung der grundlegenden Array-Struktur auf der Festplatte oder im Speicher.

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

Lokale Arrays : Variablennamen, die nicht mit Caret beginnen (dh "^") werden vom Prozess im Speicher gespeichert, sind für den Erstellungsprozess privat und verfallen, wenn der Erstellungsprozess beendet wird. Der verfügbare Speicher hängt von der Implementierung ab. Bei Implementierungen, die Partitionen verwenden, ist sie auf die Partitionsgröße beschränkt (eine kleine Partition kann 32 KB groß sein). Für andere Implementierungen kann es mehrere Megabyte sein.

Globale Arrays : ^abc, ^def. Diese werden auf der Festplatte gespeichert, stehen allen Prozessen zur Verfügung und bleiben bestehen, wenn der Erstellungsprozess beendet wird. Sehr große Globals (z. B. Hunderte von Gigabyte) sind in den meisten Implementierungen praktisch und effizient. Dies ist der wichtigste "Datenbank"-Mechanismus von MUMPS. Es wird verwendet, anstatt das Betriebssystem zum Erstellen, Schreiben und Lesen von Dateien aufzurufen.

Indirektion : @VBLKann in vielen Kontexten verwendet werden und ersetzt effektiv den Inhalt von VBL in einer anderen MUMPS-Anweisung. SET XYZ="ABC" SET @XYZ=123setzt die Variable ABC auf 123. SET SUBROU="REPORT" DO @SUBROUführt das Unterprogramm namens REPORT aus. Diese Ersetzung ermöglicht eine träge Auswertung und späte Bindung sowie effektiv das operative Äquivalent von "Zeigern" in anderen Sprachen.

Piece-Funktion : Diese teilt Variablen in segmentierte Stücke auf, die von einer benutzerdefinierten Trennzeichenfolge (manchmal als "Trennzeichen" bezeichnet) geführt werden. Diejenigen, die awk kennen, werden dies bekannt vorkommen. $PIECE(STRINGVAR,"^",3)bedeutet das "dritte Caret-getrennte Stück von STRINGVAR". Die Stückfunktion kann auch als Zuweisungsziel (SET-Befehl) erscheinen.

$PIECE("world.std.com",".",2) ergibt "std".

Nach

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

SET $P(X,"@",1)="office" bewirkt, dass X zu "office@world.std.com" wird (beachten Sie, dass $P $PIECE entspricht und als solches geschrieben werden könnte).

Order-Funktion : Diese Funktion behandelt ihre Eingabe als Struktur und findet den nächsten existierenden Index, der bis auf den letzten Index dieselbe Struktur hat. Es gibt den sortierten Wert zurück, der nach dem als Eingabe angegebenen Wert geordnet ist. (Dadurch wird die Arrayreferenz als inhaltsadressierbare Daten und nicht als Adresse eines Werts behandelt.)

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

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

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

Hier wird das argumentlose For wiederholt, bis es von einem beendenden Quit gestoppt wird . Diese Zeile gibt eine Tabelle mit i und stuff(i) aus, wobei i nacheinander 6, 10 und 15 ist.

Zum Durchlaufen der Datenbank gibt die Funktion Order den nächsten zu verwendenden Schlüssel zurück.

GTM>S n=""
GTM>S n=$order(^nodex(n))
GTM>zwr n
n=" building"
GTM>S n=$order(^nodex(n))
GTM>zwr n
n=" name:gd"
GTM>S n=$order(^nodex(n))
GTM>zwr n
n="%kml:guid"

Multi-User/Multi-Tasking/Multi-Prozessor : MUMPS unterstützt mehrere gleichzeitige Benutzer und Prozesse, auch wenn das zugrunde liegende Betriebssystem dies nicht tut (zB MS-DOS). Darüber hinaus besteht die Möglichkeit, eine Umgebung für eine Variable anzugeben, z. B. durch Angabe eines Computernamens in einer Variablen (wie in SET ^|"DENVER"|A(1000)="Foo"), wodurch Sie auf Daten auf Remote-Computern zugreifen können.

Kritik

Einige Aspekte der MUMPS-Syntax unterscheiden sich stark von denen modernerer Sprachen, was zu Verwirrung führen kann, obwohl diese Aspekte zwischen verschiedenen Versionen der Sprache variieren. In einigen Versionen ist Leerzeichen in Ausdrücken nicht zulässig, da es eine Anweisung beendet: 2 + 3ist ein Fehler und muss geschrieben werden 2+3. Alle Operatoren haben dieselbe Priorität und sind linksassoziativ (wird 2+3*10auf 50 ausgewertet). Die Operatoren für "kleiner oder gleich" und "größer als oder gleich" sind '>und '<(d. h. der boolesche Negationsoperator 'plus ein strikter Vergleichsoperator), obwohl einige Versionen die Verwendung des eher standardisierten <=und zulassen >=. Punkte ( .) werden verwendet, um die Zeilen in einem DO-Block einzurücken, nicht Leerzeichen. Der ELSE-Befehl benötigt kein entsprechendes IF, da er den Wert in der eingebauten Systemvariablen überprüft $test.

MUMPS- Bereichsregeln sind freizügiger als andere moderne Sprachen. Deklarierte lokale Variablen werden mithilfe des Stapels bereichsbezogen. Eine Routine kann normalerweise alle deklarierten Locals der darunter liegenden Routinen auf der Aufrufliste sehen, und Routinen können nicht verhindern, dass Routinen, die sie aufrufen, ihre deklarierten Locals ändern, es sei denn, der Aufrufer erstellt manuell eine neue Stapelebene ( do) und weist jeder der gewünschten Variablen einen Alias ​​zu zu schützen ( . new x,y), bevor Sie untergeordnete Routinen aufrufen. Im Gegensatz dazu sind nicht deklarierte Variablen (Variablen, die durch ihre Verwendung erstellt wurden, anstatt durch Deklaration) für alle Routinen gültig, die im selben Prozess ausgeführt werden, und bleiben gültig, bis das Programm beendet wird.

Da sich MUMPS-Datenbankreferenzen nur im Caret-Präfix von internen Variablenreferenzen unterscheiden, ist es gefährlich leicht, die Datenbank unbeabsichtigt zu bearbeiten oder sogar eine Datenbank-"Tabelle" zu löschen.

"MUMPS" vs. "M"-Namensdebatte

Alle folgenden Positionen können und wurden zu verschiedenen Zeiten von sachkundigen Personen unterstützt:

  • Der Name der Sprache wurde 1993 M, als die M Technology Association ihn übernahm.
  • Der Name wurde am 8. Dezember 1995 mit der Genehmigung von ANSI X11.1-1995 zu M
  • Sowohl M als auch MUMPS sind offiziell akzeptierte Namen.
  • M ist nur ein "alternativer Name" oder "Spitzname" für die Sprache, und MUMPS ist immer noch der offizielle Name.

Ein Teil der Streitigkeiten entstand als Reaktion auf die starke M-Befürwortung seitens eines kommerziellen Unternehmens, InterSystems, dessen Geschäftsführer den Namen MUMPS nicht mochte und der Ansicht war, dass er ein ernsthaftes Marketinghindernis darstellte. Daher wurde die Bevorzugung von M in gewissem Maße als Ausrichtung auf InterSystems identifiziert. Der Streit spiegelte auch die Rivalität zwischen Organisationen (M Technology Association, MUMPS Development Committee, ANSI und ISO Standards Committees) wider, wer den "offiziellen" Namen der Sprache bestimmt. Einige Autoren haben versucht, das Problem zu entschärfen, indem sie die Sprache als M[UMPS] bezeichneten , wobei eckige Klammern die übliche Notation für optionale Syntaxelemente sind. Eine führende Autorität und der Autor einer Open-Source-MUMPS-Implementierung, Professor Kevin O'Kane, verwendet nur 'MUMPS'.

Die neueste Norm (ISO/IEC 11756:1999, bestätigt am 25. Juni 2010) nennt noch immer sowohl M als auch MUMPS als offiziell akzeptierte Namen.

Markenstatus

Das Massachusetts General Hospital registrierte "MUMPS" als Marke beim USPTO am 28. November 1971 und erneuerte es am 16. November 1992, ließ es jedoch am 30. August 2003 auslaufen.

Vergleich mit Pick

MUMPS lädt zum Vergleich mit dem Pick-Betriebssystem ein . Ähnlichkeiten umfassen:

  • Beide Systeme basieren auf der effizienten Implementierung großer, spärlicher, typloser, string-indizierter Arrays;
  • Beide haben historisch die Sprache und das Betriebssystem vermischt;
  • Beide haben einen ähnlichen Anwendungsbereich.
  • In den Programmiersprachen beider Umgebungen verwenden Operationen zum Lesen, Schreiben, Erstellen und Löschen von Datenbankdatensätzen dieselbe Syntax wie Variablenreferenzen.

Siehe auch

Verweise

Weiterlesen

  • Walters, Richard (1989). "ABCs of MUMPS. 1989: Butterworth-Heinemann, ISBN  1-55558-017-3 .
  • Walters, Richard (1997). M Programmierung: Ein umfassender Leitfaden. Digitale Presse. ISBN  1-55558-167-6 .
  • Lewkowicz, John. Das komplette MUMPS: Eine Einführung und ein Referenzhandbuch für die Programmiersprache MUMPS. ISBN  0-13-162125-4
  • Kirsten, Wolfgang et al. (2003) Objektorientierte Anwendungsentwicklung mit der postrelationalen Datenbank von Caché 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 author (ecarvajal@hedrich.es)
  • O'Kane, KC; Eine Sprache zum Implementieren von Information Retrieval Software, Online Review, Bd. 16, Nr. 3, S. 127–137 (1992).
  • O'Kane, KC; und McColligan, EE, A case study of a Mumps Intranet patient record, Journal of the Healthcare Information and Management Systems Society, Bd. 11, Nr. 3, S. 81–95 (1997).
  • O'Kane, KC; und McColligan, EE, A Web Based Mumps Virtual Machine, Proceedings of the American Medical Informatics Association 1997
  • O'Kane, KC, The Mumps Programming Language, Createspace, ISBN  1-4382-4338-3 , 120 Seiten (2010).

Externe Links