MUMPOR -
MUMPS

Från Wikipedia, den fria encyklopedin
PÅSSJUKA
Paradigm Tvingande , procedurmässigt
Designad av Neil Pappalardo
Första gången dök upp 1966
; 55 år sedan
 (
1966
)
Stabil frisättning
ANSI X11.1-1995 / 8 december 1995
 (
1995-12-08
)
Skrivdisciplin Typlös
OS Plattformsoberoende
Påverkad av
JOSS
Påverkad
PSL , Caché ObjectScript
. Det utvecklades ursprungligen på Massachusetts General Hospital för att hantera informationssystem för sjukhuslaboratorier.

MUMPS -tekniken har sedan dess utökats som den dominerande databasen för hälsoinformationssystem och elektroniska hälsojournaler i USA. MUMPS-baserade informationssystem driver över 40% av sjukhusen i USA, körs över alla amerikanska federala sjukhus och kliniker och tillhandahåller hälsoinformationstjänster för över 54% av patienterna i USA

En unik egenskap hos MUMPS-teknologin är dess integrerade databasspråk, vilket möjliggör direkt höghastighets läs- och skrivåtkomst till permanent disklagring. Detta ger en tät integration av obegränsade applikationer i en enda databas och ger extremt hög prestanda och tillförlitlighet som ett online -transaktionsbehandlingssystem .

Översikt

MUMPS är ett språk som är avsett för och utformat för att bygga databasapplikationer. Sekundära språkfunktioner inkluderades för att hjälpa programmerare att skapa applikationer som använder minimala datorresurser. De ursprungliga implementeringarna tolkades , även om moderna implementeringar kan vara helt eller delvis sammanställda . Enskilda "program" körs i "partitioner" i minnet . Tidiga MUMPS-minnespartitioner var begränsade till 2048 byte, så aggressiv förkortning hjälpte starkt multi-programmering på kraftigt resursbegränsad hårdvara, eftersom mer än ett MUMPS-jobb kunde passa in i de mycket små minnen som fanns i hårdvaran vid den tiden. Möjligheten att tillhandahålla fleranvändarsystem var en annan språkdesignfunktion. Ordet " M i slut P rogramming" i förkortningen pekar på detta. Även de tidigaste maskinerna som kör MUMPS stödde flera jobb som körs samtidigt. Med övergången från minidatorer till mikrodatorer några år senare kan även en "enda användardator" med en enda 8-bitars CPU och 16K eller 64K minne stödja flera användare som kan ansluta till den från (icke- grafiska ) videodisplayterminaler .

Eftersom minnet var tätt från början uppskattade språkdesignen för MUMPS mycket kortfattad kod. Således kan varje MUMPS -kommando eller funktionsnamn förkortas från en till tre bokstäver i längd, t.ex. Avsluta (avsluta programmet) som Q, $ P = $ Piece -funktion, R = Läs -kommando, $ TR = $ Translate -funktion. Utrymmen och slut-av-rad-markörer är betydande i MUMPS eftersom radomfång främjade samma trånga språkdesign. Således kan en enda rad programkod uttrycka, med få tecken, en idé för vilken andra programmeringsspråk kan kräva 5 till 10 gånger så många tecken. Förkortning var ett vanligt inslag i språk som utformats under denna period (t.ex. FOCAL-69 , tidiga BASIC, som Tiny BASIC , etc.). En olycklig bieffekt av detta, i kombination med det tidiga behovet av att skriva minimalistisk kod, var att MUMPS -programmerare rutinmässigt inte kommenterade kod och använde omfattande förkortningar. Detta innebar att även en expert MUMPS programmerare inte bara kunde skumma igenom en kodsida för att se dess funktion utan måste analysera den rad för rad.

Databasinteraktion är transparent inbyggt i språket. MUMPS -språket tillhandahåller en hierarkisk databas som består av ihållande glesa matriser , som implicit "öppnas" för varje MUMPS -applikation. Alla variabelnamn som har prefixet med huvudtecknet ("^") använder permanent (i stället för RAM) lagring, kommer att behålla sina värden efter att programmet avslutas och kommer att vara synligt för (och kan ändras av) andra program som körs. Variabler som använder denna delade och permanenta lagring kallas Globals i MUMPS, eftersom omfattningen av dessa variabler är "globalt tillgänglig" för alla jobb i systemet. Den nyare och vanligare användningen av namnet "globala variabler" på andra språk är en mer begränsad omfattning av namn, som kommer från det faktum att oskalade variabler är "globalt" tillgängliga för alla program som körs i samma process, men inte delas mellan flera processer. MUMPS-lagringsläget (dvs. globaler lagrade som ihållande glesa matriser) ger MUMPS-databasen egenskaperna hos en dokumentorienterad databas .

Alla variabelnamn som inte har prefix med caret -tecken ("^") är tillfälliga och privata. Precis som globala variabler har de också en hierarkisk lagringsmodell, men är bara "lokalt tillgängliga" för ett enda jobb, så de kallas "lokalbefolkningen". Både "globaler" och "lokalbefolkningen" kan ha barnnoder (kallas abonnemang i MUMPS -terminologi). Prenumerationer är inte begränsade till siffror - alla ASCII -tecken eller grupper av tecken kan vara en prenumerationsidentifierare. Även om detta inte är ovanligt för moderna språk som Perl eller JavaScript, var det en mycket ovanlig funktion i slutet av 1970 -talet. Denna förmåga implementerades inte universellt i MUMPS -system före 1984 års ANSI -standard, eftersom endast kanoniskt numeriska abonnemang krävdes av standarden för att tillåtas. Variabeln som heter "bil" kan således ha abonnemang "Dörr", "ratt" och "motor", som var och en kan innehålla ett värde och ha egna abonnemang. Variabeln ^Bil ("Dörr") kan ha en kapslad variabelabonnemang av "Färg" till exempel. Således kan man säga

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

att modifiera en kapslad barnnod av ^Bil. I MUMPS-termer är "Färg" det andra abonnemanget på variabeln ^Bil (både namnen på barnnoderna och barnknapparna själva kallas också abonnemang). Hierarkiska variabler liknar objekt med egenskaper på många objektorienterade språk. Dessutom kräver MUMPS språkdesign att alla abonnemang av variabler automatiskt hålls i sorterad ordning. Numeriska prenumerationer (inklusive flyttal) lagras från lägsta till högsta. Alla icke-numeriska prenumerationer lagras i alfabetisk ordning efter siffrorna. I MUMPS -terminologi är detta kanonisk ordning . Genom att använda endast icke-negativa heltalsabonnemang kan MUMPS-programmeraren emulera matrisdatatypen från andra språk. Även om MUMPS inte inbyggt erbjuder en komplett uppsättning DBMS- funktioner, såsom obligatoriska scheman, har flera DBMS-system byggts ovanpå det som ger applikationsutvecklare plattfils-, relations- och nätverksdatabasfunktioner .

Dessutom finns det inbyggda operatörer som behandlar en avgränsad sträng (t.ex. kommaseparerade värden ) som en array. Tidiga MUMPS -programmerare skulle ofta lagra en struktur av relaterad information som en avgränsad sträng och analysera den efter att den lästs in; detta sparade diskåtkomsttid och erbjöd avsevärda hastighetsfördelar på viss hårdvara.

MUMPS har inga datatyper. Siffror kan behandlas som siffror, eller strängar kan behandlas som nummer av numeriska operatorer ( tvingas i MUMPS -terminologi). Tvång kan dock ha några udda biverkningar. Till exempel, när en sträng tvingas, omvandlar parsern så mycket av strängen (från vänster) till ett nummer som den kan, och kasserar sedan resten. Påståendet IF 20<"30 DUCKS"utvärderas TRUEsåledes som i MUMPS.

Andra språkfunktioner är avsedda att hjälpa MUMPS-applikationer att interagera med varandra i en miljö med flera användare. Databaslås, processidentifierare och atomicitet för databasuppdateringstransaktioner krävs alla av standard MUMPS -implementeringar.

Till skillnad från språk i C- eller Wirth -traditionerna är vissa mellanslag mellan MUMPS -uttalanden betydande. Ett enda mellanslag separerar ett kommando från dess argument, och ett mellanslag eller ny rad skiljer varje argument från nästa MUMPS -token. Kommandon som inte tar några argument (t.ex. ELSE) kräver två följande mellanslag. Konceptet är att ett mellanslag separerar kommandot från (icke -existerande) argument, nästa separerar "argumentet" från nästa kommando. Newlines är också betydande; en IF, ELSEeller FORkommando bearbetar (eller hoppar över) allt annat till slutet av raden. För att dessa uttalanden ska styra flera rader måste du använda DOkommandot för att skapa ett kodblock.

"Hej världen!" exempel

En enkel "Hej, värld!" programmet i MUMPS kan vara:

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

och skulle köras från kommandoraden MUMPS med kommandot do ^hello. Eftersom MUMPS tillåter kommandon att strängas ihop på samma rad, och eftersom kommandon kan förkortas till en enda bokstav, kan denna rutin göras mer kompakt:

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

' ,!' Efter texten genererar en ny rad.

Historia

Första Moseboken

MUMPS utvecklades av Neil Pappalardo , Robert Greenes och Curt Marble i Dr. Octo Barnetts laboratorium vid Massachusetts General Hospital (MGH) i Boston under 1966 och 1967. Det skrevs senare om av tekniska ledare Dennis "Dan" Brevik och Paul Stylos från DEC 1970 och 1971.

Det ursprungliga MUMPS-systemet byggdes, liksom Unix några år senare, på en DEC PDP-7 . Octo Barnett och Neil Pappalardo var också inblandade i MGH : s planering av ett sjukhusinformationssystem, fick en bakåtkompatibel PDP-9 och började använda MUMPS i antagningscykeln och laboratorietestrapportering. MUMPS var då ett tolkat språk , men även då införlivade ett hierarkiskt databasfilsystem för att standardisera interaktion med data och abstrakta diskoperationer så att de endast utfördes av MUMPS -språket själv.

Vissa aspekter av PÅSSJUKA kan spåras från RAND Corporation 's JOSS genom BBN : s TELCOMP och STRINGCOMP . MUMPS -teamet valde att inkludera bärbarhet mellan maskiner som ett designmål.

En avancerad funktion i MUMPS -språket som inte stöds i stor utsträckning i operativsystem eller i datorhårdvaran i eran var multitasking . Även om timesharing på stordatorer var allt vanligare i system som Multics , körde de flesta minidatorer inte parallella program och trådning var inte alls tillgänglig. Även på mainframes var varianten av batchbearbetning där ett program kördes till slut den vanligaste implementeringen för ett operativsystem med flerprogrammering.

Det var några år tills Unix utvecklades. Avsaknaden av hårdvara för minneshantering innebar också att all multi-behandling var full av möjligheten att en minnespekare skulle kunna ändra någon annan process. MUMPS -program har inte alls ett vanligt sätt att hänvisa till minne direkt, till skillnad från C -språk , så eftersom multitasking genomfördes av språket, inte av något program skrivet på språket var det omöjligt att ha den risk som fanns för andra system.

Dan Breviks DEC MUMPS-15-system anpassades till en DEC PDP-15 , där det bodde en tid. Den installerades först på Health Data Management Systems i Denver i maj 1971. Portabiliteten visade sig vara användbar och MUMPS fick ett statligt forskningsbidrag, och så släpptes MUMPS till allmänheten vilket var ett krav på bidrag. MUMPS portades snart till ett antal andra system inklusive den populära DEC PDP-8 , Data General Nova och på DEC PDP-11 och Artronix PC12 minidator . Ordet om MUMPS spreds mestadels genom det medicinska samhället och var i stor utsträckning, ofta lokalt modifierat för deras egna behov.

I början av 1970 -talet fanns det många och varierande implementeringar av MUMPS på en rad hårdvaruplattformar. En annan anmärkningsvärd plattform var Paul Stylos' december PÅSSJUKA-11 på PDP-11, och MEDI 's MIIS . Hösten 1972 deltog många MUMPS-användare på en konferens i Boston som standardiserade det då sprickade språket och skapade MUMPS Users Group och MUMPS Development Committee (MDC) för att göra det. Dessa insatser visade sig vara framgångsrika; en standard slutfördes 1974 och godkändes den 15 september 1977 som ANSI- standard X11.1-1977. Ungefär samtidigt lanserade DEC DSM-11 (Digital Standard MUMPS) för PDP-11. Detta dominerade snabbt marknaden och blev tidens referensimplementering. Också, Inter säljs ISM-11 för PDP-11 (som var identisk med DSM-11).

1980 -talet

Under början av 1980-talet släppte flera leverantörer MUMPS-baserade plattformar som uppfyllde ANSI-standarden till marknaden. De viktigaste var:

  • Digital Equipment Corporation med DSM (Digital Standard MUMPS). DSM-11 ersattes av VAX-11 DSM för VAX/VMS- operativsystemet, och det överfördes till Alpha i två varianter: DSM för OpenVMS och som DSM för Ultrix .
  • InterSystems med ISM (InterSystems M) på VMS (M/VX), M/11+ på PDP-11-plattformen, M/PC på MS-DOS, M/DG på Data General , M/VM på IBM VM/CMS, och M/UX på olika Unixer.

Andra företag utvecklade viktiga MUMPS -implementeringar:

  • Greystone Technology Corporation med ett kompilerat version som kallas GT.M .
  • DataTree Inc. med en Intel PC-baserad produkt som heter DTM .
  • Micronetics Design Corporation med en produktlinje som heter MSM för UNIX- och Intel -PC -plattformar (senare portad till IBMs VM -operativsystem , VAX/VMS -plattformar och OpenVMS Alpha -plattformar).
  • Computer Consultants (senare bytt namn till MGlobal), ett Houston -baserat företag skapade ursprungligen CCSM på 6800, sedan 6809, och så småningom en port till 68000, som senare blev MacMUMPS , en Mac OS -baserad produkt. De arbetade också med implementeringen av MGM MUMPS. MGlobal överförde också deras implementering till DOS -plattformen. MGlobal MUMPS var den första kommersiella MUMPS för IBM PC och den enda implementeringen för det klassiska Mac OS.
  • Tandem Computers utvecklade en implementering för sina feltoleranta datorer.

Denna period hade också stor MDC -aktivitet. Den andra revisionen av ANSI-standarden för MUMPS (X11.1-1984) godkändes den 15 november 1984.

1990 -talet

  • Den 11 november 1990 godkändes den tredje revisionen av ANSI-standarden (X11.1-1990).
  • År 1992 antogs samma standard som ISO- standard 11756-1992. Användning av M som ett alternativt namn för språket godkändes ungefär samtidigt.
  • Den 8 december 1995 godkändes den fjärde revisionen av standarden ( X11.1-1995 ) av ANSI, och av ISO 1999 som ISO 11756: 1999 , som också publicerades av ANSI . MDC slutförde en ytterligare översyn av standarden 1998 men detta har inte presenterats för ANSI för godkännande.
  • InterSystems Open M för Windows/NT släpptes, liksom Open M för Alpha/OSF och Alpha/VMS (deras första 64-bitars implementeringar, för 64-bitars Alpha-processorn).
  • 1997 tillkom Unicode -stöd i InterSystems Caché 3.0

2000 -talet

  • År 2000 hade mellanprogramvaruleverantören InterSystems blivit den dominerande aktören på MUMPS -marknaden med köp av flera andra leverantörer. Ursprungligen förvärvade de DataTree Inc. i början av 1990 -talet. Och den 30 december 1995 förvärvade InterSystems produktlinjen DSM från DEC. InterSystems konsoliderade dessa produkter till en enda produktlinje och märkte dem på flera hårdvaruplattformar som OpenM . 1997 lanserade InterSystems en ny produkt som heter Caché . Detta baserades på deras ISM -produkt, men med influenser från de andra implementeringarna. Micronetics Design Corporation -tillgångar förvärvades också av InterSystems den 21 juni 1998. InterSystems är fortfarande den dominerande MUMPS -leverantören och säljer Caché till MUMPS -utvecklare som skriver applikationer för en mängd olika operativsystem.
  • Greystone Technology Corporation: s implementering av GT.M såldes till Sanchez Computer Associates (nu en del av FIS ) i mitten av 1990-talet. Den 7 november 2000 gjorde Sanchez GT.M för Linux tillgängligt under GPL -licensen och den 28 oktober 2005 gjordes GT.M för OpenVMS och Tru64 UNIX också under AGPL -licensen. GT.M fortsätter att vara tillgängligt på andra UNIX -plattformar under en traditionell licens.
  • Under 2000 släppte Ray Newman och andra MUMPS V1, en implementering av MUMPS (initialt på FreeBSD) liknande DSM-11. MUMPS V1 har sedan dess överförts till Linux , Mac OS X och Windows (med hjälp av cygwin). Ursprungligen endast för x86 -CPU: n, MUMPS V1 har nu överförts till Raspberry Pi.
  • Den senaste implementeringen av MUMPS, som släpptes i april 2002, är ett MSM -derivat som heter M21 från Real Software Company of Rugby, Storbritannien .
  • Det finns också flera open source -implementeringar av MUMPS, inklusive några forskningsprojekt. Den mest anmärkningsvärda av dessa är påssjuka/II , av Dr Kevin O'Kane (professor emeritus, University of Northern Iowa ) och studenters projekt. Dr O'Kane har också överfört tolken till Mac OS X.
  • En av de ursprungliga skaparna av MUMPS -språket, Neil Pappalardo, grundade ett företag som heter MEDITECH . De utvidgade och byggde på MUMPS -språket och namngav det nya språket MIIS (och senare ett annat språk som heter MAGIC). Till skillnad från InterSystems säljer MEDITECH inte längre mellanprogram, så MIIS och MAGIC används nu endast internt på MEDITECH.
  • Den 6 januari 2005, och senare igen den 25 juni 2010, bekräftade ISO sina MUMPS-relaterade standarder: ISO/IEC 11756: 1999, språkstandard , ISO/IEC 15851: 1999, Open MUMPS Interconnect och ISO/IEC 15852: 1999 , MUMPS Windowing Application Programmers Interface .

Nuvarande användare av MUMPS -applikationer

Federala hälsoinformationssystem

US Department of Veterans Affairs (tidigare Veterans Administration) var en av de tidigaste stora adoptörerna av MUMPS -språket. Deras utvecklingsarbete (och efterföljande bidrag till den kostnadsfria MUMPS -applikationens kodbas) påverkade många medicinska användare världen över. År 1995 mottog Veterans Affairs patientintagning/spårning/urladdningssystem, Decentralized Hospital Computer Program (DHCP) Computerworld Smithsonian Award för bästa användning av informationsteknik i medicin. I juli 2006 var Department of Veterans Affairs (VA) / Veterans Health Administration (VHA) mottagaren av Innovations in American Government Award som delades ut av Ash Institute vid John F. Kennedy School of Government vid Harvard University för dess förlängning av DHCP till Veterans Health Information Systems and Technology Architecture ( VistA ). Nästan hela VA -sjukhussystemet i USA, Indian Health Service och stora delar av Department of Defense CHCS sjukhussystem använder MUMPS -databaser för klinisk dataspårning.

Kommersiella hälsoinformationssystem

Andra IT -företag inom sjukvården som använder MUMPS inkluderar:

Referenslaboratorier

Många referenslaboratorier, till exempel DASA, Quest Diagnostics och Dynacare, använder MUMPS -programvara skriven av eller baserad på Antrim Corporation -kod. Antrim köptes av Misys Healthcare (nu Sunquest Information Systems ) 2001.

Online bank- och handelssystem

MUMPS används också i stor utsträckning i ekonomiska applikationer. MUMPS fick en tidig följd i finanssektorn och används i många banker och kreditföreningar. Det används av TD Ameritrade samt av Bank of England och Barclays Bank .

Nuvarande implementeringar

Sedan 2005 har de mest populära implementeringarna av MUMPS varit Greystone Technology MUMPS (GT.M) från Fidelity National Information Services och Caché från Intersystems Corporation. Europeiska rymdorganisationen meddelade den 13 maj 2010 att den kommer att använda InterSystems Caché -databasen för att stödja Gaia -uppdraget. Detta uppdrag syftar till att kartlägga Vintergatan med oöverträffad precision. InterSystems håller på att fasa ut Caché till förmån för Iris.

Andra aktuella implementeringar inkluderar:

  • M21
  • YottaDB
  • Halvnot
  • Referensstandard M
  • FreeM

Sammanfattning av viktiga språkfunktioner

ANSI X11.1-1995 ger en fullständig, formell beskrivning av språket; en annoterad version av denna standard är tillgänglig online.

Datatyper : Det finns en universell datatyp , som implicit tvingas till sträng-, heltal- eller flytpunktdatatyper efter behov.

Booleaner (kallade sanningsvärden i MUMPS): I IF -kommandon och annan syntax som har uttryck utvärderade som villkor, utvärderas alla strängvärden som ett numeriskt värde och, om det är ett värde utan noll, tolkas det som True. a<bger 1 om a är mindre än b, 0 annars.

Deklarationer : Inga. Alla variabler skapas dynamiskt vid första gången ett värde tilldelas.

Linjer : är viktiga syntaktiska enheter, till skillnad från deras status på språk som är mönstrade på C eller Pascal. Flera satser per rad är tillåtna och är vanliga. Omfattningen av alla IF-, ELSE- och FOR -kommandon är "resten av den aktuella raden."

Skiftlägeskänslighet : Kommandon och inneboende funktioner är skiftlägeskänsliga. Däremot är variabelnamn och etiketter skiftlägeskänsliga. Det finns ingen särskild betydelse för versaler mot gemener och få konventioner som följs ofta. Procenttecknet (%) är lagligt som första tecken i variabler och etiketter.

Efterbetingelser : utförandet av nästan vilket kommando som helst kan kontrolleras genom att följa det med ett kolon och ett sanningvärdeuttryck. SET:N<10 A="FOO" sätter A till "FOO" om N är mindre än 10; DO:N>100 PRINTERR,utför PRINTERR om N är större än 100. Denna konstruktion ger ett villkor vars omfattning är mindre än en hel rad.

Förkortning : Du kan förkorta nästan alla kommandon och inbyggda funktioner till ett, två eller tre tecken.

Reserverade ord : Inga. Eftersom MUMPS tolkar källkoden efter kontext behöver du inte reserverade ord. Du kan använda namnen på språkkommandon som variabler, så följande är helt laglig MUMPS -kod:

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 kan göras mer skymd med hjälp av den kontrakterade operatörssyntaxen, som visas i detta korta exempel som härleds från exemplet ovan:

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

Matriser : skapas dynamiskt, lagras som B-träd , är glesa (dvs. använder nästan inget utrymme för saknade noder), kan använda valfritt antal abonnemang och abonnemang kan vara strängar eller numeriska (inklusive flytande punkt). Arrays lagras alltid automatiskt i sorterad ordning, så det finns aldrig något tillfälle att sortera, packa om, ordna om eller på annat sätt omorganisera databasen. Inbyggda funktioner som $ DATA, $ ORDER, $ NEXT (deprecated) och $ QUERY-funktioner ger effektiv undersökning och genomgång av den grundläggande arraystrukturen, på disken eller i minnet.

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

Lokala matriser : variabelnamn som inte börjar med caret (dvs. "^") lagras i minnet efter process, är privata för skapandeprocessen och upphör att gälla när skapandeprocessen avslutas. Tillgänglig lagring beror på implementering. För de implementeringar som använder partitioner är det begränsat till partitionsstorleken (en liten partition kan vara 32K). För andra implementeringar kan det vara flera megabyte.

Globala arrayer : ^abc, ^def. Dessa lagras på disken, är tillgängliga för alla processer och är ihållande när skapandeprocessen avslutas. Mycket stora globaler (till exempel hundratals gigabyte) är praktiska och effektiva i de flesta implementeringar. Detta är MUMPS huvudsakliga "databas" -mekanism. Det används istället för att uppmana operativsystemet att skapa, skriva och läsa filer.

Indirektion : kan i många sammanhang @VBLanvändas och ersätter innehållet i VBL effektivt i ett annat MUMPS -uttalande. SET XYZ="ABC" SET @XYZ=123sätter variabeln ABC till 123. SET SUBROU="REPORT" DO @SUBROUutför delrutan med namnet RAPPORT. Denna substitution möjliggör lat utvärdering och sen bindning samt effektivt den operativa motsvarigheten till "pekare" på andra språk.

Piece -funktion : Detta delar upp variabler i segmenterade bitar som styrs av en användarspecificerad separatorsträng (kallas ibland en "avgränsare"). De som vet awk kommer att finna detta bekant. $PIECE(STRINGVAR,"^",3)betyder "den tredje caret-separerade delen av STRINGVAR." Piece -funktionen kan också visas som ett tilldelningsmål (SET -kommando).

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

Efter

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

SET $P(X,"@",1)="office" får X att bli "office@world.std.com" (observera att $ P motsvarar $ PIECE och kan skrivas som sådant).

Ordningsfunktion : Den här funktionen behandlar sin inmatning som en struktur och hittar nästa index som finns som har samma struktur förutom den sista prenumerationen. Det returnerar det sorterade värdet som är ordnat efter det som anges som inmatning. (Detta behandlar matrisreferensen som en innehållsadresserbar data snarare än en adress med ett värde.)

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

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

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

Här upprepas den argumentfria For tills den stoppas av en avslutande Quit . Den här raden skriver ut en tabell med i och sånt (i) där jag successivt är 6, 10 och 15.

För iterering av databasen returnerar beställningsfunktionen nästa nyckel som ska användas.

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"
), som kan ge dig åtkomst till data på fjärrmaskiner.

Kritik

Vissa aspekter av MUMPS syntax skiljer sig starkt från mer moderna språk, vilket kan orsaka förvirring, även om dessa aspekter varierar mellan olika versioner av språket. På vissa versioner är blanksteg inte tillåtet inom uttryck, eftersom det avslutar ett påstående: 2 + 3är ett fel och måste skrivas 2+3. Alla operatörer har samma företräde och är vänsterassociativa ( 2+3*10utvärderas till 50). Operatörerna för "mindre än eller lika med" och "större än eller lika med" är '>och '<(det vill säga den booleska negationsoperatören 'plus en strikt jämförelseoperator), även om vissa versioner tillåter användning av mer standard <=och >=respektive. Perioder ( .) används för att indraga linjerna i ett DO -block, inte blanksteg. ELSE -kommandot behöver inte motsvarande IF, eftersom det fungerar genom att inspektera värdet i den inbyggda systemvariabeln $test.

MUMPS omfattningsregler är mer tillåtande än andra moderna språk. Deklarerade lokala variabler omfattas av stacken. En rutin kan normalt se alla deklarerade lokalbefolkningen av rutinerna under den på samtalsstapeln, och rutiner kan inte hindra rutiner de ringer från att ändra sina deklarerade lokalbefolkningar, såvida inte den som ringer manuellt skapar en ny stapelnivå ( do) och aliasar var och en av de variabler de önskar för att skydda ( . new x,y) innan du ringer till några barns rutiner. Däremot finns odeklarerade variabler (variabler som skapats genom att använda dem, snarare än deklaration) för alla rutiner som körs i samma process och förblir i omfattning tills programmet avslutas.

Eftersom MUMPS databasreferenser skiljer sig från till interna variabelreferenser endast i huvudprefixet, är det farligt enkelt att oavsiktligt redigera databasen eller till och med radera en databas "tabell".

"MUMPS" kontra "M" namngivningsdebatt

Alla följande positioner kan vara och har stötts av kunniga personer vid olika tidpunkter:

  • Språkets namn blev M 1993 när M Technology Association antog det.
  • Namnet blev M den 8 december 1995, med godkännande av ANSI X11.1-1995
  • Både M och MUMPS är officiellt accepterade namn.
  • M är bara ett "alternativt namn" eller "smeknamn" för språket, och MUMPS är fortfarande det officiella namnet.

En del av påståendet uppstod som svar på ett starkt M -förespråkande från ett kommersiellt intresse, InterSystems, vars verkställande direktör ogillade namnet MUMPS och ansåg att det utgjorde ett allvarligt marknadsföringshinder. Således blev favoriseringen av M till viss del identifierad som anpassning till InterSystems. Tvisten återspeglade också rivalitet mellan organisationer (M Technology Association, MUMPS Development Committee, ANSI och ISO Standards Committee) om vem som bestämmer språkets "officiella" namn. Vissa författare har försökt att avhjälpa problemet genom att hänvisa till språket som M [UMPS] , varvid hakparenteser är den vanliga notationen för valfria syntaxelement. En ledande myndighet, och författaren till en öppen källkod MUMPS -implementering, professor Kevin O'Kane, använder endast "MUMPS".

Den senaste standarden (ISO/IEC 11756: 1999, återbekräftad den 25 juni 2010), nämner fortfarande både M och MUMPS som officiellt accepterade namn.

Varumärkesstatus

Massachusetts General Hospital registrerade "MUMPS" som ett varumärke hos USPTO den 28 november 1971 och förnyade det den 16 november 1992, men lät det upphöra att gälla den 30 augusti 2003.

Jämförelse med plockning

MUMPS inbjuder till jämförelse med Pick -operativsystemet . Likheter inkluderar:

  • Båda systemen bygger på ett effektivt genomförande av stora, glesa, typlösa, strängindexerade matriser;
  • Både historiskt blandade språket och operativsystemet;
  • Båda har en liknande tillämpningsdomän.
  • På programmeringsspråken i båda miljöerna använder operationer för att läsa, skriva, skapa och ta bort databasposter samma syntax som variabelreferenser.

Se även

Referenser

Vidare läsning

  • Walters, Richard (1989). "ABCs of MUMPS. 1989: Butterworth-Heinemann, ISBN  1-55558-017-3 .
  • Walters, Richard (1997). M Programmering: En omfattande guide. Digital press. ISBN  1-55558-167-6 .
  • Lewkowicz, John. Den kompletta MUMPS: En introduktions- och referenshandbok för MUMPS programmeringsspråk. ISBN  0-13-162125-4
  • Kirsten, Wolfgang, et al. (2003) Objektorienterad applikationsutveckling med hjälp av 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 påssjuka. ISBN  84-477-0125-5 . Distribuido exclusivamente por su author (ecarvajal@hedrich.es)
  • O'Kane, KC; Ett språk för implementering av informationshämtningsprogramvara, Online Review, Vol 16, No 3, s 127–137 (1992).
  • O'Kane, KC; och McColligan, EE, 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, KC; och 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 sidor (2010).