Articulo de referencia

PAPERAS

MUMPS ("Sistema Multiprogramador de Utilidades del Hospital General de Massachusetts"), o M , es un lenguaje de programación imperativo de alto nivel con una base de datos clave...

MUMPS ("Sistema Multiprogramador de Utilidades del Hospital General de Massachusetts"), o M , es un lenguaje de programación imperativo de alto nivel con una base de datos clave-valor integrada para el procesamiento de transacciones . Fue desarrollado originalmente en el Hospital General de Massachusetts para la gestión de historiales médicos de pacientes y sistemas de información de laboratorios hospitalarios.

La tecnología MUMPS se ha expandido hasta convertirse en la base de datos predominante para sistemas de información sanitaria y registros médicos electrónicos en los Estados Unidos. Los sistemas de información basados ​​en MUMPS, como Epic Systems , proporcionan servicios de información sanitaria a más del 78 % de los pacientes en todo Estados Unidos [ 1 ].

Una característica única de la tecnología MUMPS es su lenguaje de base de datos integrado , que permite el acceso directo y de alta velocidad de lectura y escritura al almacenamiento en disco permanente. [ 2 ]

Historia

Décadas de 1960-1970 - Génesis

MUMPS fue desarrollado por Neil Pappalardo , Robert A. Greenes y Curt Marble en el laboratorio del Dr. Octo Barnett en el Hospital General de Massachusetts (MGH) en Boston durante 1966 y 1967. [ 3 ] Surgió de la frustración, durante un proyecto de sistemas de información hospitalaria apoyado por los Institutos Nacionales de la Salud (NIH) en el MGH, con el desarrollo en lenguaje ensamblador en un PDP-1 de tiempo compartido por el contratista principal Bolt, Beranek y Newman (BBN). MUMPS surgió de un proyecto interno de " trabajos secretos " en el MGH por Pappalardo, Greenes y Marble para crear un entorno de desarrollo alternativo. Como resultado de la demostración inicial de capacidades, la propuesta del Dr. Barnett a los NIH en 1967 para la renovación de la subvención del proyecto informático del hospital tomó el audaz paso de proponer que el sistema se construyera en MUMPS en adelante, en lugar de depender del enfoque de BBN. ​​El proyecto fue financiado y comenzó la implementación seria del sistema en MUMPS.

El sistema MUMPS original, al igual que Unix unos años después, se basó en un DEC PDP-7 . Octo Barnett y Neil Pappalardo obtuvieron un PDP-9 compatible con versiones anteriores y comenzaron a usar MUMPS en el ciclo de admisiones y en la elaboración de informes de pruebas de laboratorio. MUMPS era entonces un lenguaje interpretado , pero incluso en ese momento, incorporaba un sistema de archivos de base de datos jerárquico para estandarizar la interacción con los datos y abstraer las operaciones de disco, de modo que solo las realizara el propio lenguaje MUMPS. MUMPS también se utilizó en sus inicios en un sistema experimental de registro de notas de progreso clínico [ 4 ] y en un sistema de registro de informes radiológicos [ 5 ] .

Algunos aspectos de MUMPS tienen su origen en JOSS de RAND Corporation , pasando por TELCOMP y STRINGCOMP de BBN . ​​El equipo de MUMPS optó por incluir la portabilidad entre máquinas como objetivo de diseño.

Una característica avanzada del lenguaje MUMPS, poco compatible con los sistemas operativos y el hardware informático de la época, era la multitarea . Si bien el tiempo compartido en las computadoras centrales era cada vez más común en sistemas como Multics , la mayoría de las minicomputadoras no ejecutaban programas en paralelo y el uso de subprocesos era inexistente. Incluso en las computadoras centrales, la variante de procesamiento por lotes, donde un programa se ejecutaba hasta su finalización, era la implementación más común para un sistema operativo de multiprogramación.

Pasaron algunos años hasta que se desarrolló Unix. La falta de hardware para la gestión de memoria también implicaba que todo procesamiento paralelo conllevaba el riesgo de que un puntero de memoria pudiera modificar otro proceso. Los programas MUMPS no tienen una forma estándar de acceder directamente a la memoria, a diferencia del lenguaje C , por lo que, dado que la multitarea estaba impuesta por el lenguaje, y no por ningún programa escrito en él, era imposible que existiera el riesgo que sí existía en otros sistemas.

El sistema DEC MUMPS-15 de Dan Brevik se adaptó a un DEC PDP-15 , donde permaneció durante un tiempo. Se instaló por primera vez en Health Data Management Systems de Denver en mayo de 1971. [ 6 ] La portabilidad resultó útil y MUMPS recibió una subvención gubernamental para investigación, por lo que se liberó al dominio público, requisito para obtener subvenciones. MUMPS pronto se adaptó a otros sistemas, incluyendo el popular DEC PDP-8 , el Data General Nova , el DEC PDP-11 y el miniordenador Artronix PC12 . La noticia sobre MUMPS se extendió principalmente dentro de la comunidad médica y tuvo un uso generalizado, a menudo modificado localmente para sus propias necesidades.

Las versiones del sistema MUMPS fueron reescritas por los líderes técnicos Dennis "Dan" Brevik y Paul Stylos [ 6 ] de DEC en 1970 y 1971. A principios de la década de 1970, existían numerosas y variadas implementaciones de MUMPS en diversas plataformas de hardware. Otra plataforma destacada fue DEC MUMPS-11 de Paul Stylos [ 6 ] en el PDP-11, y MIIS de MEDITECH . En otoño de 1972, muchos usuarios de MUMPS asistieron a una conferencia en Boston que estandarizó el lenguaje, entonces fragmentado, y creó el Grupo de Usuarios de MUMPS y el Comité de Desarrollo de MUMPS (MDC) para tal fin. Estos esfuerzos resultaron exitosos; el estándar se completó en 1974 y fue aprobado, el 15 de septiembre de 1977, como estándar ANSI , X11.1-1977. Casi al mismo tiempo, DEC lanzó DSM-11 (Estándar Digital MUMPS) para el PDP-11. Esto rápidamente dominó el mercado y se convirtió en la implementación de referencia de la época. Además, InterSystems vendió ISM-11 para el PDP-11 (que era idéntico a DSM-11).

década de 1980

A principios de la década de 1980, varios proveedores lanzaron al mercado plataformas basadas en MUMPS que cumplían con el estándar ANSI. Las más importantes fueron:

  • Digital Equipment Corporation con DSM (Digital Standard MUMPS). Para la serie PDP-11, DSM-11 se lanzó en 1977. VAX DSM [ 7 ] se vendió en paralelo después de su lanzamiento en 1978. Ambas familias de hardware, así como las versiones MUMPS, estuvieron disponibles hasta 1995 a través de DEC. El DSM-11 se portó al Alpha en dos variantes: DSM para OpenVMS y como DSM para Ultrix .
  • InterSystems con ISM (InterSystems M) en VMS (M/VX), ISM-11 más tarde M/11+ en la plataforma PDP-11 (1978), M/PC en MS-DOS, M/DG en Data General , M/VM en IBM VM/CMS y M/UX en varios Unix.
  • Greystone Technology Corporation fue fundada en 1980, con una versión compilada llamada GT.M para AIX, HP-UX, UNIX y OpenVMS.
  • DataTree Inc. con un producto basado en PC Intel llamado DTM . (1982)
  • Micronetics Design Corporation (1980) con una línea de productos llamada MSM. MSM-PC, MSM/386, MS-UNIX, MSM-NT, MSM/VM para IBM , plataformas VAX/VMS y plataformas OpenVMS Alpha.
  • Computer Consultants (más tarde rebautizada como MGlobal), una empresa con sede en Houston , creó originalmente CCSM para la 6800, luego para la 6809 y, finalmente, una versión para la 68000, que posteriormente se convirtió en MacMUMPS , un producto basado en Mac OS . También trabajaron en la implementación de MGM MUMPS. MGlobal también adaptó su implementación a la plataforma DOS. MGlobal MUMPS fue la primera versión comercial de MUMPS para la IBM PC y la única implementación para el Mac OS clásico.
  • Tandem Computers desarrolló una implementación para sus computadoras tolerantes a fallos. [ 8 ]
  • IBM vendió brevemente una implementación de MUMPS llamada MUMPS/VM que se ejecutaba como una máquina virtual sobre VM/370 . [ 9 ]

Durante este período también se observó una considerable actividad del MDC. La segunda revisión de la norma ANSI para MUMPS (X11.1-1984) fue aprobada el 15 de noviembre de 1984.

década de 1990

  • El 11 de noviembre de 1990 se aprobó la tercera revisión de la norma ANSI (X11.1-1990).
  • En 1992, la misma norma fue adoptada también como norma ISO 11756-1992. El uso de la letra M como nombre alternativo para el idioma fue aprobado aproximadamente en la misma época.
  • El 8 de diciembre de 1995, la cuarta revisión de la norma ( X11.1-1995 ) fue aprobada por ANSI, y en 1999 por ISO como ISO 11756:1999 , que también fue publicada por ANSI . El MDC finalizó una nueva revisión de la norma en 1998, pero esta no ha sido presentada a ANSI para su aprobación.
  • En 1999 se aprobó el último estándar M (ISO-IEC 11756-1999). ISO lo reafirmó en 2020. Junto con ISO/IEC 15851:1999, Open MUMPS Interconnect e ISO/IEC 15852:1999, MUMPS Windowing Application Programmers Interface .

década de 2000

  • Para 1998, el proveedor de middleware InterSystems se había convertido en el actor dominante en el mercado MUMPS con la compra de varios otros proveedores. Inicialmente adquirieron DataTree Inc. en 1993. El 30 de diciembre de 1994, InterSystems adquirió la línea de productos DSM de DEC. [ 10 ] InterSystems consolidó estos productos en una sola línea de productos, bautizándolos, en varias plataformas de hardware, como OpenM . En 1997, InterSystems lanzó un nuevo producto llamado Caché . Este se basaba en su producto ISM, pero con influencias de las otras implementaciones. Micronetics Design Corporation, en ese momento el número 2 en el mercado, fue adquirida por InterSystems el 21 de junio de 1998. InterSystems sigue siendo el proveedor dominante de "M", propietario de MSM, DSM, ISM, DTM y vendiendo su plataforma de datos IRIS (y, hasta 2018, su predecesora Caché) a desarrolladores de M que escriben aplicaciones para una variedad de sistemas operativos. Además, Intersystems dejó de usar el término M y tampoco siguió el estándar M.
  • La implementación de GT.M de Greystone Technology Corporation se vendió a Sanchez Computer Associates (ahora parte de FIS ) a mediados de la década de 1990. El 7 de noviembre de 2000, Sanchez puso a disposición GT.M para Linux bajo la licencia GPL [ 11 ] y el 28 de octubre de 2005, GT.M para OpenVMS y Tru64 UNIX también se puso a disposición bajo la licencia AGPL. [ 12 ] GT.M continúa estando disponible en otras plataformas UNIX bajo una licencia tradicional.
  • Durante el año 2000, Ray Newman y otros lanzaron MUMPS V1, una implementación de MUMPS (inicialmente en FreeBSD) similar a DSM-11. Posteriormente, MUMPS V1 se adaptó a Linux , Mac OS X y Windows (usando Cygwin). [ 13 ] Inicialmente solo para la CPU x86, MUMPS V1 ahora se ha adaptado a la Raspberry Pi.
  • Lanzado en abril de 2002, un derivado de MSM llamado M21 es ofrecido por la Real Software Company de Rugby, Reino Unido .
  • También existen varias implementaciones de código abierto de MUMPS, incluyendo algunos proyectos de investigación. El más notable de ellos es Mumps/II , del Dr. Kevin O'Kane (Profesor Emérito de la Universidad del Norte de Iowa ) y un proyecto estudiantil. El Dr. O'Kane también ha adaptado el intérprete a Mac OS X. [ 14 ]
  • Neil Pappalardo, uno de los creadores originales del lenguaje MUMPS, fundó la empresa MEDITECH en 1969. Ampliaron y desarrollaron el lenguaje MUMPS, creando un nuevo lenguaje llamado MIIS (y posteriormente, otro llamado MAGIC). A diferencia de InterSystems, MEDITECH ya no comercializa middleware, por lo que MIIS y MAGIC se utilizan exclusivamente de forma interna en MEDITECH.
  • Una implementación ligera es MiniM de Eugene Karataev, cuyo desarrollo se detuvo en 2024 [ 15 ].

Nombre

Al director ejecutivo de InterSystems no le gustaba el nombre MUMPS y consideraba que representaba un serio obstáculo para el marketing. Por lo tanto, favorecer la denominación M, en cierta medida, se identificó con la alineación con InterSystems. El estándar ANSI de 1990 admitía tanto M como MUMPS, y tras un debate internacional en 1992, los grupos de usuarios de Mumps cambiaron oficialmente el nombre a M. La disputa también reflejó la rivalidad entre las organizaciones (la Asociación de Tecnología M, el Comité de Desarrollo de MUMPS y los Comités de Normas ANSI e ISO) sobre quién debía determinar el nombre oficial del lenguaje.

A partir de 2020, la ISO todavía menciona tanto M como MUMPS como nombres oficialmente aceptados. [ 16 ]

El Hospital General de Massachusetts registró "MUMPS" como marca comercial ante la USPTO el 28 de noviembre de 1971 y la renovó el 16 de noviembre de 1992, pero la dejó expirar el 30 de agosto de 2003. [ 17 ]

Diseño

Descripción general

MUMPS es un lenguaje diseñado para la creación de aplicaciones de bases de datos. Se incluyeron características secundarias para ayudar a los programadores a desarrollar aplicaciones con recursos informáticos mínimos. Las implementaciones originales eran interpretadas , aunque las implementaciones modernas pueden ser total o parcialmente compiladas . Los programas individuales se ejecutan en particiones de memoria . Las primeras particiones de memoria de MUMPS estaban limitadas a 2048 bytes, por lo que la abreviación agresiva facilitó enormemente la multiprogramación en hardware con recursos muy limitados, ya que más de un trabajo de MUMPS podía caber en las pequeñas memorias disponibles en el hardware de la época. La capacidad de proporcionar sistemas multiusuario fue otra característica de diseño del lenguaje. La palabra " Multi - Programming " en el acrónimo hace referencia a esto. Incluso las primeras máquinas que ejecutaban MUMPS admitían la ejecución simultánea de varios trabajos. Con el cambio de minicomputadoras a microcomputadoras unos años más tarde, incluso una "PC de un solo usuario" con una sola CPU de 8 bits y 16K o 64K de memoria podía admitir a varios usuarios, que podían conectarse a ella desde terminales de visualización de video (no gráficas ) .

Dado que la memoria era limitada en sus inicios, el diseño del lenguaje MUMPS priorizaba la concisión del código. Por ello, cada comando o nombre de función de MUMPS podía abreviarse de una a tres letras, por ejemplo , Quit (salir del programa) como Q , $P = función $Piece , R = comando Read , $TR = función $Translate . Los espacios y los marcadores de fin de línea eran importantes en MUMPS porque el ámbito de línea fomentaba la misma concisión. Así, una sola línea de código podía expresar, con pocos caracteres, una idea que otros lenguajes de programación requerirían entre 5 y 10 veces más. La abreviación era una característica común de los lenguajes diseñados en este período (por ejemplo, FOCAL-69 , los primeros BASIC como Tiny BASIC , etc.). Un efecto secundario desafortunado de esto, sumado a la necesidad inicial de escribir código minimalista, fue que los programadores de MUMPS no solían comentar el código y utilizaban abreviaturas extensas. Esto significaba que incluso un programador experto en MUMPS no podía simplemente ojear una página de código para ver su función, sino que tenía que analizarla línea por línea.

La interacción con la base de datos está integrada de forma transparente en el lenguaje. El lenguaje MUMPS proporciona una base de datos jerárquica compuesta por matrices dispersas persistentes , que se "abre" implícitamente para cada aplicación MUMPS. Todos los nombres de variables precedidos por el carácter de intercalación ( ) utilizan almacenamiento permanente (en lugar de RAM), conservarán sus valores tras la finalización de la aplicación y serán visibles (y modificables) por otras aplicaciones en ejecución. Las variables que utilizan este almacenamiento compartido y permanente se denominan Globales en MUMPS, ya que el alcance de estas variables está "globalmente disponible" para todos los trabajos del sistema. El uso más reciente y común del término "variables globales" en otros lenguajes implica un alcance más limitado de los nombres, debido a que las variables sin alcance están "globalmente" disponibles para cualquier programa que se ejecute en el mismo proceso, pero no se comparten entre varios procesos. El modo de almacenamiento de MUMPS (es decir, las variables globales se almacenan como matrices dispersas persistentes) confiere a la base de datos MUMPS las características de una base de datos orientada a documentos . [ 18 ]^

Todos los nombres de variables que no tienen como prefijo el carácter de intercalación ( ^) son temporales y privados. Al igual que las variables globales, también tienen un modelo de almacenamiento jerárquico, pero solo están "disponibles localmente" para un solo trabajo, por lo que se denominan "locales". Tanto las "globales" como las "locales" pueden tener nodos hijos (llamados subíndices en la terminología MUMPS). Los subíndices no se limitan a números: cualquier carácter ASCII o grupo de caracteres puede ser un identificador de subíndice. Si bien esto no es infrecuente en lenguajes modernos como Perl o JavaScript, era una característica muy inusual a finales de la década de 1970. Esta capacidad no se implementó universalmente en los sistemas MUMPS antes del estándar ANSI de 1984, ya que el estándar solo requería que se permitieran subíndices numéricos canónicos. [ 19 ] Por lo tanto, la variable llamada 'Car' puede tener los subíndices "Door", "Steering Wheel" y "Engine", cada uno de los cuales puede contener un valor y tener sus propios subíndices. La variable ^Car("Door")podría tener un subíndice de variable anidada de "Color", por ejemplo. Por lo tanto, podría decir:

CONFIGURAR ^Coche("Puerta","Color")="AZUL" 

para modificar un nodo hijo anidado de ^Car. En términos de MUMPS, "Color" es el segundo subíndice de la variable ^Car(tanto los nombres de los nodos hijos como los nodos hijos mismos también se denominan subíndices). Las variables jerárquicas son similares a los objetos con propiedades en muchos lenguajes orientados a objetos . Además, el diseño del lenguaje MUMPS requiere que todos los subíndices de las variables se mantengan automáticamente en orden ordenado. Los subíndices numéricos (incluidos los números de punto flotante) se almacenan de menor a mayor. Todos los subíndices no numéricos se almacenan en orden alfabético después de los números. En la terminología de MUMPS, este es el orden canónico . Al utilizar solo subíndices enteros no negativos, el programador de MUMPS puede emular el tipo de datos de matrices de otros lenguajes. Aunque MUMPS no ofrece de forma nativa un conjunto completo de características de DBMS como esquemas obligatorios, se han construido varios sistemas DBMS sobre él que proporcionan a los desarrolladores de aplicaciones características de bases de datos de archivos planos, relacionales y de red .

Además, existen operadores integrados que tratan una cadena delimitada (por ejemplo, valores separados por comas ) como una matriz. Los primeros programadores de MUMPS solían almacenar una estructura de información relacionada como una cadena delimitada, analizándola después de leerla; esto ahorraba tiempo de acceso al disco y ofrecía ventajas de velocidad considerables en algunos equipos.

MUMPS no tiene tipos de datos. Los números se pueden tratar como cadenas de dígitos, o bien las cadenas se pueden tratar como números mediante operadores numéricos ( coerción , en la terminología de MUMPS). Sin embargo, la coerción puede tener algunos efectos secundarios extraños. Por ejemplo, cuando se coercia una cadena, el analizador convierte la mayor parte de la cadena (empezando por la izquierda) en un número, y luego descarta el resto. Por lo tanto, la instrucción IF 20<"30 DUCKS"se evalúa como TRUEen MUMPS.

Otras características del lenguaje están diseñadas para facilitar la interacción entre aplicaciones MUMPS en un entorno multiusuario. Los bloqueos de base de datos, los identificadores de proceso y la atomicidad de las transacciones de actualización de la base de datos son requisitos de las implementaciones estándar de MUMPS.

A diferencia de los lenguajes de las tradiciones C o Wirth , algunos caracteres de espacio entre las instrucciones MUMPS son significativos. Un solo espacio separa un comando de su argumento, y un espacio, o salto de línea, separa cada argumento del siguiente token MUMPS. Los comandos que no toman argumentos (por ejemplo, ELSE) requieren dos espacios a continuación. El concepto es que un espacio separa el comando del argumento (inexistente), y el siguiente separa el "argumento" del siguiente comando. Los saltos de línea también son significativos; un comando IF, ELSEo FORprocesa (o omite) todo lo demás hasta el final de la línea. Para que esas instrucciones controlen varias líneas, debe usar el DOcomando para crear un bloque de código.

¡Hola, mundo! Ejemplo

Un programa sencillo de "¡Hola, mundo!" en MUMPS podría ser:

 escribe "¡Hola, mundo!",! 

y se ejecutaría con el comando do ^hello después de haber sido guardado en el disco. Para la ejecución directa del código, se necesita una especie de "etiqueta" (cualquier cadena alfanumérica) en la primera posición de la línea del programa para indicarle al intérprete de MUMPS dónde comenzar la ejecución. Dado que MUMPS permite encadenar comandos en la misma línea, y dado que los comandos se pueden abreviar a una sola letra, esta rutina podría hacerse más compacta:

w "¡Hola, mundo!",! 

El ' ,!' después del texto genera un salto de línea. Este código devolvería al indicador de comandos.

Características

ANSI X11.1-1995 ofrece una descripción completa y formal del lenguaje; una versión anotada de esta norma está disponible en línea. [ 20 ]

Las características del idioma incluyen:

Tipos de datos
Existe un tipo de dato universal , que se convierte implícitamente a tipos de datos de cadena, entero o punto flotante según lo requiera el contexto.
Valores booleanos (llamados valores de verdad en MUMPS)
En los comandos IF y otras sintaxis que tienen expresiones evaluadas como condiciones, cualquier valor de cadena se evalúa como un valor numérico y, si ese es un valor distinto de cero, entonces se interpreta como Verdadero. a<bDevuelve 1 si a es menor que b, 0 en caso contrario.
Declaraciones
Ninguna. Todas las variables se crean dinámicamente la primera vez que se les asigna un valor.
Pauta
son entidades sintácticas importantes, a diferencia de su estatus en lenguajes basados ​​en C o Pascal. Se permiten y son comunes múltiples instrucciones por línea. El alcance de cualquier comando IF , ELSE y FOR es "el resto de la línea actual".
Sensibilidad a mayúsculas y minúsculas
Los comandos y las funciones intrínsecas no distinguen entre mayúsculas y minúsculas. En cambio, los nombres y etiquetas de las variables sí distinguen entre mayúsculas y minúsculas. No existe un significado especial para las mayúsculas y minúsculas, y hay pocas convenciones ampliamente aceptadas. El signo de porcentaje (%) es válido como primer carácter de variables y etiquetas.
Postcondicionales
La ejecución de casi cualquier comando se puede controlar añadiendo dos puntos seguidos de una expresión de valor de verdad. SET:N<10 A="FOO"Asigna el valor "FOO" a A si N es menor que 10; DO:N>100 PRINTERR,ejecuta PRINTERR si N es mayor que 100. Esta construcción proporciona una condición cuyo alcance es menor que una línea completa.
Abreviatura
Puedes abreviar casi todos los comandos y funciones nativas a uno, dos o tres caracteres.
Palabras reservadas
Ninguna. Dado que MUMPS interpreta el código fuente por contexto, no es necesario usar palabras reservadas. Puede usar los nombres de los comandos del lenguaje como variables, por lo que el siguiente código MUMPS es perfectamente válido:
GREPTHIS() NUEVO CONJUNTO,NUEVO,ENTONCES,SI,MATAR,SALIR CONJUNTO SI="MATAR",CONJUNTO="11",MATAR="11",SALIR="REGRESAR",ENTONCES="MATAR" SI SI=ENTONCES HACER ENTONCES SALIR:$SALIR SALIR SALIR ; (salir) ENTONCES SI SI, ESTABLECER Y MATAR ESTABLECER ESTABLECER=ESTABLECER+MATAR SALIR 
MUMPS se puede hacer más ofuscado utilizando la sintaxis de operadores contraídos, como se muestra en este conciso ejemplo derivado del ejemplo anterior:
GREPTHIS() NS,N,T,I,K,QSI="K",S="11",K="11",Q="R",T="K" II=TDT P:$QQQ TII,S&K SS=S+KQ 
Matrices
Se crean dinámicamente, se almacenan como árboles B , son dispersos (es decir, casi no usan espacio para nodos faltantes), pueden usar cualquier número de subíndices, y los subíndices pueden ser cadenas o numéricos (incluidos números de coma flotante). Los arreglos siempre se almacenan automáticamente en orden ascendente, por lo que nunca hay ocasión de ordenar, empaquetar, reordenar o reorganizar la base de datos. Las funciones integradas como $DATA , $ORDER , $NEXT (obsoleta) y $QUERY proporcionan un examen y recorrido eficientes de la estructura fundamental del arreglo, en disco o en memoria.
para i=10000:1:12345 establecer sqtable(i)=i*i establecer dirección("Smith","Daniel")="dpbsmith@world.std.com" 
matrices locales
Las variables cuyos nombres no comienzan con el símbolo de intercalación (es decir, "^") se almacenan en memoria por proceso, son privadas para el proceso que las crea y caducan cuando este finaliza. El espacio de almacenamiento disponible depende de la implementación. En las implementaciones que utilizan particiones, está limitado al tamaño de la partición (una partición pequeña podría ser de 32 KB). En otras implementaciones, puede ser de varios megabytes.
Matrices globales
^abc, ^defEstos se almacenan en disco, están disponibles para todos los procesos y persisten incluso después de que finaliza el proceso que los creó. Las variables globales muy grandes (por ejemplo, de cientos de gigabytes) resultan prácticas y eficientes en la mayoría de las implementaciones. Este es el principal mecanismo de "base de datos" de MUMPS. Se utiliza en lugar de recurrir al sistema operativo para crear, escribir y leer archivos.
Indirección
En muchos contextos, @VBLse puede utilizar y sustituye eficazmente el contenido de VBL en otra instrucción MUMPS. SET XYZ="ABC" SET @XYZ=123Establece la variable ABC en 123. SET SUBROU="REPORT" DO @SUBROUEjecuta la subrutina denominada REPORT. Esta sustitución permite la evaluación perezosa y la vinculación tardía, así como el equivalente operativo de los punteros en otros lenguajes.
Función de la pieza
Esto divide las variables en segmentos guiados por una cadena separadora especificada por el usuario (a veces llamada "delimitador"). Quienes conozcan awk lo encontrarán familiar. $PIECE(STRINGVAR,"^",3)significa "el tercer segmento de STRINGVAR separado por un circunflejo ". La función piece también puede aparecer como destino de una asignación (comando SET).
$PIECE("world.std.com",".",2)rendimientosestándar.
Después
SET X="dpbsmith@world.std.com",
SET $P(X,"@",1)="office"hace que X se convierta en "office@world.std.com" (tenga en cuenta que $P es equivalente a $PIECE y podría escribirse como tal).
Función de pedido
Esta función trata la entrada como una estructura y encuentra el siguiente índice existente que tenga la misma estructura, excepto por el último subíndice. Devuelve el valor ordenado según el orden del valor proporcionado como entrada. (Esto trata la referencia al array como datos direccionables por contenido, en lugar de la dirección de un valor).
Establecer cosas(6)="xyz",cosas(10)=26,cosas(15)="" 
$Order(stuff(""))rendimientos6, $Order(stuff(6))produce10, $Order(stuff(8))produce10, $Order(stuff(10))produce15, $Order(stuff(15))produce"".
Establecer i="" Para Establecer i=$O(stuff(i)) Salir:i="" Escribir !,i,10,stuff(i) 
Aquí, el bucle For sin argumentos se repite hasta que se detiene con un Quit . Esta línea imprime una tabla de i y donde i es sucesivamente 6, 10 y 15.stuff(i)
Para iterar sobre la base de datos, la función Order devuelve la siguiente clave que se debe utilizar.
GTM>S n="" GTM>S n=$order(^nodex(n)) GTM>zwr n n=" edificio" GTM>S n=$order(^nodex(n)) GTM>zwr n n=" nombre:gd" GTM>S n=$order(^nodex(n)) GTM>zwr n n="%kml:guid" 

MUMPS admite múltiples usuarios y procesos simultáneos incluso cuando el sistema operativo subyacente no lo permite (por ejemplo, MS-DOS ). Además, existe la posibilidad de especificar un entorno para una variable, como por ejemplo, indicando el nombre de una máquina en una variable (como en SET ^|"DENVER"|A(1000)="Foo") , lo que permite acceder a datos en máquinas remotas.

Crítica

Algunos aspectos de la sintaxis de MUMPS difieren fuertemente de la de lenguajes más modernos, lo que puede causar confusión, aunque esos aspectos varían entre diferentes versiones del lenguaje. En algunas versiones, no se permiten espacios en blanco dentro de las expresiones, ya que finalizan una instrucción: 2 + 3es un error y debe escribirse 2+3. Todos los operadores tienen la misma precedencia y son asociativos por la izquierda ( 2+3*10se evalúa a 50). Los operadores para "menor o igual que" y "mayor o igual que" son '>y '<(es decir, el operador de negación booleana 'más un operador de comparación estricta en la dirección opuesta), aunque algunas versiones permiten el uso de los más estándar <=y >=respectivamente. Los puntos ( .) se utilizan para indentar las líneas en un bloque DO, no espacios en blanco. El comando ELSE no necesita un IF correspondiente, ya que opera inspeccionando el valor en la variable de sistema integrada $test.

Las reglas de ámbito de MUMPS son más permisivas que las de otros lenguajes modernos. Las variables locales declaradas se gestionan mediante la pila. Normalmente, una rutina puede ver todas las variables locales declaradas de las rutinas que se encuentran debajo en la pila de llamadas, y las rutinas no pueden impedir que las rutinas a las que llaman modifiquen sus variables locales declaradas, a menos que la rutina que realiza la llamada cree manualmente un nuevo nivel de pila doy asigne un alias a cada una de las variables que desea proteger . new x,yantes de llamar a cualquier rutina hija. Por el contrario, las variables no declaradas (variables creadas mediante su uso, en lugar de su declaración) están dentro del ámbito de todas las rutinas que se ejecutan en el mismo proceso y permanecen dentro del ámbito hasta que finaliza el programa.

Debido a que las referencias a la base de datos de MUMPS se diferencian de las referencias a variables internas únicamente en el prefijo de circunflejo, es peligrosamente fácil editar involuntariamente la base de datos, o incluso eliminar una "tabla" de la base de datos. [ 21 ]

Usuarios

El Departamento de Asuntos de Veteranos de EE. UU. (anteriormente Administración de Veteranos) fue uno de los primeros en adoptar el lenguaje MUMPS. Su trabajo de desarrollo (y sus posteriores contribuciones al código fuente de la aplicación gratuita MUMPS) influyó en muchos usuarios médicos en todo el mundo. En 1995, el sistema de admisión, seguimiento y alta de pacientes del Departamento de Asuntos de Veteranos, el Programa Informático Hospitalario Descentralizado (DHCP), recibió el Premio Computerworld Smithsonian a la mejor aplicación de la tecnología de la información en medicina. En julio de 2006, el Departamento de Asuntos de Veteranos (VA) / Administración de Salud de Veteranos (VHA) recibió el Premio a la Innovación en el Gobierno Estadounidense, otorgado por el Instituto Ash de la Escuela de Gobierno John F. Kennedy de la Universidad de Harvard, por la extensión de DHCP al Sistema de Información y Arquitectura Tecnológica de Salud de Veteranos ( VistA ). Casi todo el sistema hospitalario del VA en Estados Unidos, el Servicio de Salud Indígena y gran parte del sistema hospitalario CHCS del Departamento de Defensa utilizan bases de datos MUMPS para el seguimiento de datos clínicos.

Otras empresas de TI del sector sanitario que utilizan MUMPS son:

Muchos laboratorios de referencia, como DASA, Quest Diagnostics [ 23 ] y Dynacare, utilizan el software MUMPS escrito por o basado en el código de Antrim Corporation. Antrim fue adquirida por Misys Healthcare (ahora Sunquest Information Systems ) en 2001. [ 24 ]

MUMPS también se utiliza ampliamente en aplicaciones financieras. MUMPS obtuvo una rápida aceptación en el sector financiero y se utiliza en muchos bancos y cooperativas de crédito. Lo utilizan el Banco de Inglaterra y Barclays Bank . [ 25 ] [ 26 ] [ 27 ]

Implementaciones

Desde 2005, las implementaciones más populares de MUMPS han sido Greystone Technology MUMPS (GT.M) de Fidelity National Information Services y Caché, de Intersystems Corporation. La Agencia Espacial Europea anunció el 13 de mayo de 2010 que utilizará la base de datos Caché de InterSystems para dar soporte a la misión Gaia . Esta misión tiene como objetivo cartografiar la Vía Láctea con una precisión sin precedentes. [ 28 ] InterSystems está en proceso de reemplazar gradualmente Caché por Iris. [ 29 ]

Otras implementaciones actuales incluyen:

  • M21
  • YottaDB [ 30 ]
  • Blanca
  • Patrón de Referencia M (MRR)
  • FreeM

Véase también

Referencias

  1. Noviembre, Joseph (2016). "Pregúntale a tu médico... sobre computadoras" . IEEE Annals of the History of Computing . 38 (1): 3– 5. doi : 10.1109/MAHC.2016.5 .
  2. Tweed, Rob; James, George (2 de agosto de 2008). "MUMPS: la base de datos de escalas de Internet" . Archivado del original el 27 de septiembre de 2021. Recuperado el 25 de octubre de 2022 a través de SlideShare .
  3. Greenes, Robert; Pappalardo, A Neil; Marble, Curt W; Barnett, G Octo (1969). "Diseño e implementación de un sistema de gestión de datos clínicos". Comput Biomed Res . 5 (octubre): 469–85 . doi : 10.1016/0010-4809(69)90012-3 . PMID 11697375 . 
  4. Greenes, Robert A; Barnett, G Octo; Klein, Stuart W; Robbins, Anthony; Prior, Roderick E (1970). "Registro, recuperación y revisión de datos médicos mediante la interacción médico-computadora". N Engl J Med . 282 (6): 307– 15. doi : 10.1056/NEJM197002052820605 . PMID 5410816 . 
  5. Pendergrass, Henry P; Greenes, Robert A; Barnett, G Octo; Poitras, James W; Pappalardo, A Neil; Marble, Curt W (1969). "Un sistema informático en línea para la introducción sistematizada de informes radiológicos". Radiology . 92 (4): 709– 13. doi : 10.1148/92.4.709 . PMID 5767748 . 
  6. 1 2 3 Trask, Gardner; Diamond, Jon (6 de abril de 1999). "M Technology and MUMPS Language FAQ, Part 1/2" . Newsgroup : comp.lang.mumps . Usenet: FKu0LK.19p@world.std.com . Consultado el 25 de octubre de 2022 .  
  7. Manual de referencia del lenguaje VAX-11 DSM . Digital Equipment Corporation. 1982. OCLC 29217964 . 
  8. "HP NonStop Servers, Software Product Maintenance List, Effective Date: January 2012" (PDF) . Hewlett-Packard Development Company, LP 2012-01-20. p. 32. Consultado el 17 de mayo de 2014 . 
  9. "Dos versiones de MUMPS fuera" . Computerworld . Vol. XXI, n.º 48. 30-11-1987 . Consultado el 09-07-2022 .  
  10. Grabscheid, Paul; Ragon, Terry (2 de enero de 1995). "Anuncio de DSM" . Grupo de noticias : comp.lang.mumps . Usenet: hwSTpyiTUNQJ@world.std.com . Consultado el 25 de octubre de 2022 .  
  11. "Sanchez ofrece la base de datos GT.M como software libre de código abierto para usuarios de GNU/Linux" . Sanchez Computer Associates, Inc. (Comunicado de prensa). 8 de noviembre de 2000. Archivado del original el 28 de abril de 2004. Consultado el 12 de agosto de 2013 .
  12. "GT.M Motor de base de datos TP de gama alta" . Sourceforge.net . Consultado el 12 de agosto de 2013 .
  13. "Base de datos y lenguaje MUMPS" . Sourceforge.net . Consultado el 12 de agosto de 2013 .
  14. "Paperas/Mii" . Rychannel.com. 8 de noviembre de 2012. Consultado el 12 de agosto de 2013 .
  15. "El oscuro agosto: Servidor de base de datos MiniM" .
  16. "ISO/IEC 11756:1999(en) Tecnología de la información — Lenguajes de programación — M" . www.iso.org . 2020. Consultado el 18 de abril de 2024 .
  17. "Estado de la marca registrada y recuperación de documentos" . tsdr.uspto.gov . Consultado el 26 de febrero de 2018 .
  18. "Programación de bases de datos extrema con variables globales MUMPS" (PDF) . Gradvs1.mjgateway.com. Archivado del original (PDF) el 6 de julio de 2016. Consultado el 13 de agosto de 2013 .
  19. "Los estándares M [ UMPS ] anotados" . 71.174.62.16. 29-11-2011 . Consultado el 12-08-2013 .
  20. "Las normas M [ UMPS ] anotadas" . 71.174.62.16 . Consultado el 26 de febrero de 2018 .
  21. Richmond, Joseph Robin (1984). Métricas de mantenibilidad de software para programas MUMPS (PhD). Centro de Ciencias de la Salud de la Universidad de Texas en Dallas . OCLC 13285529 . 
  22. "SunQuest emerge de la sombra de Misys" . Healthcare IT News. 13 de marzo de 2008. Consultado el 12 de agosto de 2013 .
  23. "Ajax de misión crítica: Haciendo que el pedido de pruebas sea más fácil y rápido en Qu" . Slideshare.net. 5 de abril de 2008. Recuperado el 12 de agosto de 2013 .
  24. "Sunquest adquiere Antrim Corp. - Biblioteca en línea gratuita" . Thefreelibrary.com. 26 de noviembre de 1996. Consultado el 12 de agosto de 2013 .
  25. "Bienvenido a M21: la base de datos para el siglo XXI" . M21.uk.com . Consultado el 13 de agosto de 2013 .
  26. "Sistemas financieros basados ​​en caché" . InterSystems . Archivado del original el 2 de junio de 2013. Consultado el 13 de agosto de 2013 .
  27. "IDEA Soluciones bancarias y ERP llave en mano" . Idea.cz. Consultado el 13 de agosto de 2013 .
  28. "La Agencia Espacial Europea elige la base de datos InterSystems Caché para la misión Gaia para mapear la Vía Láctea" . RealWire . Realwire.com. 13 de mayo de 2010. Consultado el 13 de agosto de 2013 .
  29. "InterSystems Iris" . InterSystems . Consultado el 18 de marzo de 2021 .
  30. "Sitio web de YottaDB" . yottadb.com. 24 de mayo de 2024. Consultado el 24 de mayo de 2023 .

Lecturas adicionales

  • Walters, Richard F. (15 de enero de 1989). ABC de MUMPS: Una introducción para programadores principiantes e intermedios (2.ª  ed.). Digital Press. ISBN 978-1555580179. LCCN 88033522 . OCLC 18989618 . OL 2055247M .   
  • Walters, Richard F. (19 de junio de 1997). Programación M: Una guía completa (2.ª  ed.). Digital Press. ISBN 978-1-55558-167-1. LCCN 97006513 . OCLC 78593848 . OL 661091M - vía Internet Archive .   
  • Lewkowicz, John. MUMPS completo: Introducción y manual de referencia para el lenguaje de programación MUMPS. ISBN 0-13-162125-4
  • Kirsten, Wolfgang, et al. (2003) Desarrollo de aplicaciones orientadas a objetos utilizando la base de datos postrelacional Caché ISBN 3-540-00960-4
  • Martínez de Carvajal, Ernesto (1993). El Lenguaje MUMPS (en español europeo) (1ª  ed.). Barcelona: PUP. ISBN 978-8447701254. OCLC 435380102 . OL 40214570M .  
  • O'Kane, KC; Un lenguaje para implementar software de recuperación de información, Online Review, Vol 16, No 3, pp 127–137 (1992).
  • O'Kane, KC; y McColligan, EE, Un estudio de caso de un registro de pacientes con paperas en una intranet, Journal of the Healthcare Information and Management Systems Society, Vol 11, No 3, pp 81–95 (1997).
  • O'Kane, KC; y McColligan, EE, Una máquina virtual de paperas basada en la web, Actas de la Asociación Estadounidense de Informática Médica 1997
  • O'Kane, KC, El lenguaje de programación de las paperas, Createspace, ISBN 1-4382-4338-3, 120 páginas (2010).
  • Trask, Gardner; Diamond, Jon (6 de abril de 1999). "M Technology and MUMPS Language FAQ, Part 1/2" . Grupo de noticias : comp.lang.mumps . Usenet: FKu0LK.19p@world.std.com . Consultado el 25 de octubre de 2022 .  
  • "comp.lang.mumps" . Grupo de noticias : comp.lang.mumps . Consultado el 25 de octubre de 2022 a través de Google Groups . 
  • Intérprete del lenguaje de programación Mumps (GPL) por Kevin O'Kane, Universidad del Norte de Iowa
  • Paperas en SourceForge
  • Enlaces M en Hardhats.org
  • Desarrollo y funcionamiento de un sistema de información de laboratorio para el estudio de las paperas y la rubéola: una década de experiencia en el Hospital Johns Hopkins.
  • Soluciones tecnológicas de IDEA Systems basadas en YottaDB (anteriormente FIS GT.M) y Caché
  • Documentación, temas y recursos sobre las paperas (en checo e inglés).