MUMPS ("Massachusetts General Hospital Utility Multi-Programming System"), o M , es un lenguaje de programación imperativo de alto nivel con una base de datos clave-valor de procesamiento de transacciones integrada . Fue desarrollado originalmente en el Hospital General de Massachusetts para administrar los registros médicos de los pacientes y los sistemas de información de laboratorio del hospital.
Desde entonces, la tecnología MUMPS se ha expandido hasta convertirse en la base de datos predominante para los sistemas de información sanitaria y los registros médicos electrónicos en los Estados Unidos. Los sistemas de información basados en MUMPS funcionan en más del 40 % de los hospitales de los EE. UU., en todos los hospitales y clínicas federales del país y brindan servicios de información sanitaria a más del 54 % de los pacientes en todo el país [ cita requerida ]
Una característica única de la tecnología MUMPS es su lenguaje de base de datos integrado , que permite un acceso de lectura y escritura directo y de alta velocidad al almacenamiento en disco permanente. [1]
Historia
Década de 1960 y 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. [2] Surgió de la frustración, durante un proyecto de sistemas de información hospitalaria de apoyo de los Institutos Nacionales de Salud (NIH) en el MGH, con el desarrollo en lenguaje ensamblador en un PDP-1 de tiempo compartido por el contratista principal Bolt Beranek & Newman, Inc. (BBN). MUMPS surgió de un proyecto interno de " skunkworks " 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 al NIH en 1967 para la renovación de la subvención del proyecto informático del hospital dio el paso audaz de proponer que el sistema se construyera en MUMPS en el futuro, en lugar de depender del enfoque BBN. Se financió el proyecto y se inició la implementación seria del sistema en MUMPS.
El sistema MUMPS original se construyó, como Unix unos años después, sobre un DEC PDP-7 . Octo Barnett y Neil Pappalardo obtuvieron un PDP-9 compatible con versiones anteriores y comenzaron a utilizar MUMPS en el ciclo de admisiones y en los informes de pruebas de laboratorio. MUMPS era entonces un lenguaje interpretado , pero incluso entonces incorporaba un sistema de archivos de base de datos jerárquico para estandarizar la interacción con los datos y abstraer las operaciones del disco de modo que solo las realizara el propio lenguaje MUMPS. MUMPS también se utilizó en sus inicios en un sistema experimental de entrada de notas de progreso clínico [3] y en un sistema de entrada de informes de radiología [4] .
Algunos aspectos de MUMPS se pueden rastrear desde JOSS de RAND Corporation hasta TELCOMP y STRINGCOMP de BBN . El equipo de MUMPS decidió incluir la portabilidad entre máquinas como un objetivo de diseño.
Una característica avanzada del lenguaje MUMPS que no era ampliamente compatible con los sistemas operativos o el hardware informático de la época era la multitarea . Aunque la compartición de tiempo en los ordenadores mainframe era cada vez más común en sistemas como Multics , la mayoría de los miniordenadores no ejecutaban programas en paralelo y el subprocesamiento no estaba disponible en absoluto. Incluso en los mainframes, la variante del procesamiento por lotes en el que se ejecutaba un programa 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 de gestión de memoria también significaba que todo multiprocesamiento estaba plagado de la posibilidad de que un puntero de memoria pudiera cambiar algún otro proceso. Los programas MUMPS no tienen una forma estándar de hacer referencia a la memoria directamente, a diferencia del lenguaje C , por lo que, dado que la multitarea era impuesta por el lenguaje, no por ningún programa escrito en el lenguaje, era imposible tener el riesgo que existía para otros sistemas.
El sistema DEC MUMPS-15 de Dan Brevik fue adaptado a un DEC PDP-15 , donde permaneció durante algún tiempo. Se instaló por primera vez en Health Data Management Systems de Denver en mayo de 1971. [5] La portabilidad resultó útil y MUMPS recibió una subvención de investigación del gobierno, por lo que MUMPS se lanzó al dominio público, lo que era un requisito para las subvenciones. MUMPS pronto se trasladó a varios otros sistemas, incluido el popular DEC PDP-8 , el Data General Nova y el DEC PDP-11 y la minicomputadora Artronix PC12 . La noticia sobre MUMPS se extendió principalmente a través de la comunidad médica y su uso se extendió, a menudo modificándose localmente para sus propias necesidades.
En 1970 y 1971, los líderes técnicos Dennis "Dan" Brevik y Paul Stylos [5] de DEC reescribieron versiones del sistema MUMPS. A principios de los años 70, había muchas y variadas implementaciones de MUMPS en una variedad de plataformas de hardware. Otra plataforma notable fue DEC MUMPS-11 de Paul Stylos [5] en el PDP-11 y MIIS de MEDITECH . En el otoño de 1972, muchos usuarios de MUMPS asistieron a una conferencia en Boston que estandarizó el lenguaje, que entonces estaba fragmentado, y para ello se creó el Grupo de Usuarios de MUMPS y el Comité de Desarrollo de MUMPS (MDC). Estos esfuerzos resultaron exitosos; en 1974 se completó un estándar y se aprobó, 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. Éste dominó rápidamente 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 al DSM-11).
Década de 1980
A principios de los años 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, el DSM-11 se lanzó en 1977. El VAX DSM [6] se vendió en paralelo después del lanzamiento en 1978. Ambas familias de hardware, así como las versiones MUMPS, estuvieron disponibles hasta 1995 en DEC. El DSM-11 se trasladó a 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 denominada 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 en 6800, luego en 6809 y, finalmente, en un port para 68000, que más tarde se convirtió en MacMUMPS , un producto basado en Mac OS . También trabajaron en la implementación de MGM MUMPS. MGlobal también portó su implementación a la plataforma DOS. MGlobal MUMPS fue el primer MUMPS comercial para IBM PC y la única implementación para el Mac OS clásico.
- Tandem Computers desarrolló una implementación para sus computadoras tolerantes a fallas. [7]
- IBM vendió brevemente una implementación de MUMPS llamada MUMPS/VM que se ejecutaba como una máquina virtual sobre VM/370 . [8]
En este período también se produjo una considerable actividad del MDC. El 15 de noviembre de 1984 se aprobó la segunda revisión de la norma ANSI para MUMPS (X11.1-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 como norma ISO 11756-1992. El uso de M como nombre alternativo para el lenguaje fue aprobado aproximadamente en esa misma fecha.
- El 8 de diciembre de 1995, ANSI aprobó la cuarta revisión de la norma (X11.1-1995) y, en 1999, la ISO la aprobó como ISO 11756:1999, que también fue publicada por ANSI. El MDC finalizó una nueva revisión de la norma en 1998, pero no se presentó a ANSI para su aprobación.
- En 1999 se aprobó la última norma M (ISO-IEC 11756-1999). La ISO la reafirmó en 2020. Junto con la ISO/IEC 15851:1999, Open MUMPS Interconnect y la ISO/IEC 15852:1999, MUMPS Windowing Application Programmers Interface.
Década de 2000
- En 1998, el proveedor de middleware InterSystems se había convertido en el jugador dominante en el mercado de MUMPS con la compra de varios otros proveedores. Inicialmente, adquirió DataTree Inc. en 1993. El 30 de diciembre de 1994, InterSystems adquirió la línea de productos DSM de DEC. [9] InterSystems consolidó estos productos en una sola línea de productos, marcá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 adquirido por InterSystems el 21 de junio de 1998. InterSystems sigue siendo el "proveedor M" dominante, propietario de MSM, DSM, ISM, DTM y vendiendo Caché a los desarrolladores M que escriben aplicaciones para una variedad de sistemas operativos. Además, Intersystems ya no utilizó el término M, ni siguió el estándar M.
- La implementación GT.M de Greystone Technology Corporation fue vendida a Sanchez Computer Associates (ahora parte de FIS ) a mediados de los años 1990. El 7 de noviembre de 2000, Sanchez puso a disposición GT.M para Linux bajo la licencia GPL [10] 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. [11] 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. Desde entonces, MUMPS V1 se ha portado a Linux , Mac OS X y Windows (usando cygwin). [12] Inicialmente solo para la CPU x86, MUMPS V1 ahora se ha portado a Raspberry Pi.
- En abril de 2002, la Real Software Company de Rugby, Reino Unido , ofrece un derivado de MSM llamado M21 .
- También existen varias implementaciones de código abierto de MUMPS, incluidos 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 de estudiantes. El Dr. O'Kane también ha adaptado el intérprete a Mac OS X. [13]
- Uno de los creadores originales del lenguaje MUMPS, Neil Pappalardo, fundó una empresa llamada MEDITECH en 1969. Extendieron y desarrollaron el lenguaje MUMPS, bautizándolo como MIIS (y más tarde, otro lenguaje llamado MAGIC). A diferencia de InterSystems, MEDITECH ya no vende middleware, por lo que ahora MIIS y MAGIC solo se utilizan internamente en MEDITECH.
- La novedad en el mercado desde 2022 es MiniM de Eugene Karataev
Nombre
Al director ejecutivo de InterSystems no le gustaba el nombre MUMPS y pensaba que representaba un serio obstáculo de marketing. Por lo tanto, favorecer a M hasta cierto punto se identificó como una alineación con InterSystems. El estándar ANSI de 1990 estaba abierto tanto a M como a MUMPS y, después de una discusión "mundial" en 1992, los grupos de usuarios de Mumps cambiaron oficialmente el nombre a M. La disputa también reflejó la rivalidad entre organizaciones (la Asociación de Tecnología M, el Comité de Desarrollo de MUMPS, los Comités de Estándares ANSI e ISO) sobre quién determina el nombre "oficial" del lenguaje. [ cita requerida ]
A partir de 2020, la ISO todavía menciona tanto M como MUMPS como nombres aceptados oficialmente. [14]
El Hospital General de Massachusetts registró "MUMPS" como marca comercial en 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. [15]
Diseño
Descripción general
MUMPS es un lenguaje pensado y diseñado para crear aplicaciones de bases de datos. Se incluyeron características de lenguaje secundario para ayudar a los programadores a crear aplicaciones utilizando recursos informáticos mínimos. Las implementaciones originales se interpretaron , aunque las implementaciones modernas pueden compilarse total o parcialmente . 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 abreviatura agresiva ayudó en gran medida a la multiprogramación en hardware con recursos muy limitados, porque más de un trabajo MUMPS podía caber en las memorias muy pequeñas existentes en el hardware de la época. La capacidad de proporcionar sistemas multiusuario fue otra característica de diseño del lenguaje. La palabra " Multi - Programación " en el acrónimo apunta a esto. Incluso las primeras máquinas que ejecutaban MUMPS admitían la ejecución de varios trabajos al mismo tiempo. Con el cambio de minicomputadoras a microcomputadoras unos años más tarde, incluso una "PC de usuario único" con una única CPU de 8 bits y 16K o 64K de memoria podía admitir múltiples usuarios, que podían conectarse a ella desde terminales de visualización de video (no gráficas ) .
Como la memoria era limitada originalmente, el diseño del lenguaje para MUMPS valoraba el código muy conciso. Por lo tanto, cada comando MUMPS o nombre de función podía abreviarse de una a tres letras de longitud, por ejemplo, Quit (salir del programa) como Q , $P = $Piece function, R = Read command, $TR = $Translate function. Los espacios y los marcadores de final de línea son significativos en MUMPS porque el alcance de línea promovía el mismo diseño de lenguaje conciso. Por lo tanto, una sola línea de código de programa podía expresar, con pocos caracteres, una idea para la que otros lenguajes de programación podrían requerir de 5 a 10 veces más caracteres. La abreviatura 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 desafortunado efecto secundario de esto, junto con la necesidad temprana de escribir código minimalista, fue que los programadores de MUMPS rutinariamente no comentaban el código y usaban abreviaturas extensas. Esto significaba que incluso un programador experto en MUMPS no podría simplemente hojear una página de código para ver su función, sino que tendría que analizarla línea por línea.
La interacción con bases de datos está incorporada de forma transparente en el lenguaje. El lenguaje MUMPS proporciona una base de datos jerárquica formada por matrices dispersas persistentes , que se "abre" implícitamente para cada aplicación MUMPS. Todos los nombres de variables prefijados con el carácter de intercalación ( ) utilizan almacenamiento permanente (en lugar de RAM), mantendrán sus valores después de que la aplicación salga y serán visibles para (y modificables por) otras aplicaciones en ejecución. Las variables que utilizan este almacenamiento compartido y permanente se denominan globales en MUMPS, porque el alcance de estas variables está "globalmente disponible" para todos los trabajos del sistema. El uso más reciente y más común del nombre "variables globales" en otros lenguajes es un alcance más limitado de los nombres, que proviene del hecho de que las variables sin ámbito 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 MUMPS (es decir, las variables globales almacenadas como matrices dispersas persistentes) le da a la base de datos MUMPS las características de una base de datos orientada a documentos . [16]^
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 secundarios (llamados subíndices en la terminología MUMPS). Los subíndices no se limitan a los números: cualquier carácter ASCII o grupo de caracteres puede ser un identificador de subíndice. Si bien esto no es poco común en los lenguajes modernos como Perl o JavaScript, era una característica muy inusual a fines 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. [17] Por lo tanto, la variable llamada 'Auto' puede tener los subíndices "Puerta", "Volante" y "Motor", cada uno de los cuales puede contener un valor y tener subíndices propios. La variable ^Car("Door")podría tener un subíndice de variable anidado de "Color", por ejemplo. Por lo tanto, podría decir
SET ^Car("Puerta", "Color")="AZUL"
para modificar un nodo secundario anidado de ^Car. En términos de MUMPS, "Color" es el segundo subíndice de la variable ^Car(tanto los nombres de los nodos secundarios como los nodos secundarios en sí 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 del más bajo al más alto. 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 usar solo subíndices enteros no negativos, el programador de MUMPS puede emular el tipo de datos de las matrices de otros lenguajes. Aunque MUMPS no ofrece de forma nativa un conjunto completo de características de DBMS como esquemas obligatorios, se han creado varios sistemas DBMS sobre él que brindan a los desarrolladores de aplicaciones características de base de datos relacional, de red y de archivo plano .
Además, hay 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 y analizarla después de leerla; esto ahorraba tiempo de acceso al disco y ofrecía considerables ventajas de velocidad en algunos equipos.
MUMPS no tiene tipos de datos. Los números se pueden tratar como cadenas de dígitos, o las cadenas se pueden tratar como números mediante operadores numéricos ( conversión , en la terminología de MUMPS). Sin embargo, la conversión puede tener algunos efectos secundarios extraños. Por ejemplo, cuando se convierte 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 declaración IF 20<"30 DUCKS"se evalúa como TRUEen MUMPS.
Otras características del lenguaje están pensadas para ayudar a las aplicaciones MUMPS a interactuar entre sí en un entorno multiusuario. Los bloqueos de bases de datos, los identificadores de procesos y la atomicidad de las transacciones de actualización de bases de datos son requisitos de las implementaciones estándar de MUMPS.
A diferencia de los lenguajes de la tradición C o Wirth , algunos caracteres de espacio entre las sentencias MUMPS son significativos. Un solo espacio separa un comando de su argumento, y un espacio, o nueva línea, separa cada argumento del siguiente token MUMPS. Los comandos que no aceptan argumentos (por ejemplo, ELSE) requieren dos espacios siguientes. El concepto es que un espacio separa el comando del argumento (inexistente), el siguiente separa el "argumento" del siguiente comando. Las nuevas líneas también son significativas; un comando IF, ELSEo FORprocesa (o saltea) todo lo demás hasta el final de la línea. Para que esas sentencias 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 haberlo 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 que los comandos se encadenen juntos en la misma línea y 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 una nueva línea. Este código volvería al mensaje de solicitud.
Características
ANSI X11.1-1995 proporciona una descripción formal y completa del lenguaje; una versión anotada de esta norma está disponible en línea. [18]
Las características del lenguaje incluyen:
- Tipos de datos
- Hay un tipo de datos universal , que se convierte implícitamente en tipos de datos de cadena, entero o de 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 es un valor distinto de cero, se interpreta como Verdadero.
a<bproduce 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 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 declaraciones 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. Por el contrario, los nombres de variables y las etiquetas sí lo hacen. No existe un significado especial para mayúsculas y minúsculas y hay pocas convenciones ampliamente aceptadas. El signo de porcentaje (%) es legal como primer carácter de variables y etiquetas.
- Postcondicionales
- La ejecución de casi cualquier comando se puede controlar si se le añaden dos puntos y una expresión de valor de verdad.
SET:N<10 A="FOO"Establece A en "FOO" si N es menor que 10;DO:N>100 PRINTERR,realiza PRINTERR si N es mayor que 100. Esta construcción proporciona una condición cuyo alcance es menor que una línea completa.
- Abreviatura
- Puede 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 hay necesidad de palabras reservadas. Puede utilizar los nombres de los comandos del lenguaje como variables, por lo que el código MUMPS que sigue es perfectamente legal:
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,SET&KILL SET SET=SET+KILL SALIR
- MUMPS se puede hacer más ofuscado mediante el uso de la sintaxis del operador contraído, como se muestra en este breve ejemplo derivado del ejemplo anterior:
GREPTHIS() NS,N,T,I,K,QSI="K",S="11",K="11",Q="R",T="K" II=TDT Q:$QQQ TII,S&K SS=S+KQ
- Matrices
- se crean dinámicamente, se almacenan como árboles B , son dispersos (es decir, casi no utilizan espacio para los nodos faltantes), pueden usar cualquier número de subíndices y los subíndices pueden ser cadenas o numéricos (incluidos los de punto flotante). Las matrices siempre se almacenan automáticamente en orden ordenado, por lo que nunca hay necesidad de ordenar, empaquetar, reordenar o reorganizar de otro modo la base de datos. Las funciones integradas como $DATA , $ORDER , $NEXT (obsoleta) y $QUERY proporcionan un examen y un recorrido eficientes de la estructura fundamental de la matriz, en el disco o en la memoria.
para i=10000:1:12345 establecer sqtable(i)=i*i establecer dirección("Smith", "Daniel")="dpbsmith@world.std.com"
- Matrices locales
- Los nombres de variables que no comienzan con el símbolo de intercalación (es decir, "^") se almacenan en la memoria por proceso, son privados para el proceso de creación y expiran cuando el proceso de creación termina. El almacenamiento disponible depende de la implementación. Para aquellas implementaciones que utilizan particiones, está limitado al tamaño de la partición (una partición pequeña puede ser de 32K). Para otras implementaciones, puede ser de varios megabytes.
- Matrices globales
^abc, ^defEstos se almacenan en el disco, están disponibles para todos los procesos y son persistentes cuando finaliza el proceso de creación. Los globales muy grandes (por ejemplo, de cientos de gigabytes) son prácticos 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 llamar 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 @SUBROURealiza la subrutina denominada REPORT. Esta sustitución permite la evaluación diferida y la vinculación tardía, así como el equivalente operativo efectivo de los "punteros" en otros lenguajes.
- Función de pieza
- Esto divide las variables en fragmentos segmentados guiados por una cadena separadora especificada por el usuario (a veces llamada "delimitador"). Aquellos que conocen awk lo encontrarán familiar.
$PIECE(STRINGVAR,"^",3)significa "la tercera parte separada por un cursor de STRINGVAR ". La función de fragmento también puede aparecer como un objetivo de asignación (comando SET).
$PIECE("world.std.com",".",2)rendimientosETS.
- Después
ESTABLECER 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 orden
- Esta función trata su entrada como una estructura y encuentra el siguiente índice que exista que tenga la misma estructura excepto por el último subíndice. Devuelve el valor ordenado que está después del que se proporcionó como entrada. (Esto trata la referencia de la matriz como un dato direccionable por contenido en lugar de una dirección de un valor).
Establecer cosas(6)="xyz",cosas(10)=26,cosas(15)=""
$Order(stuff(""))rendimientos6,$Order(stuff(6))rendimientos10,$Order(stuff(8))rendimientos10,$Order(stuff(10))rendimientos15,$Order(stuff(15))rendimientos"".
Establecer i="" Para establecer i=$O(cosas(i)) Salir:i="" Escribir !,i,10,cosas(i)
- Aquí, el For sin argumentos se repite hasta que se detiene con un Quit que termina . Esta línea imprime una tabla de i y donde i es sucesivamente 6, 10 y 15.
stuff(i)
- Para iterar la base de datos, la función Order devuelve la siguiente clave a utilizar.
GTM>S n="" GTM>S n=$orden(^nodex(n)) GTM>zwrn n="edificio" GTM>S n=$orden(^nodex(n)) GTM>zwrn n=" nombre:gd" GTM>S n=$orden(^nodex(n)) GTM>zwrn n="%kml:guid"
MUMPS admite varios usuarios y procesos simultáneos incluso cuando el sistema operativo subyacente no lo hace (por ejemplo, MS-DOS ). Además, existe la posibilidad de especificar un entorno para una variable, por ejemplo, especificando un nombre de máquina en una variable (como en SET ^|"DENVER"|A(1000)="Foo"), lo que puede permitirle acceder a datos en máquinas remotas.
Crítica
Algunos aspectos de la sintaxis de MUMPS difieren fuertemente de la de los lenguajes más modernos, lo que puede causar confusión, aunque esos aspectos varían entre las diferentes versiones del lenguaje. En algunas versiones, no se permiten espacios en blanco dentro de las expresiones, ya que terminan una declaració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*10evalúa a 50). Los operadores para "menor o igual que" y "mayor o igual que" son '>y '<(es decir, el operador de negación booleano 'más un operador de comparación estricta en la dirección opuesta), aunque algunas versiones permiten el uso de los operadores <=y más estándar >=respectivamente. Los puntos ( .) se utilizan para sangrar las líneas en un bloque DO, no los espacios en blanco. El comando ELSE no necesita un IF correspondiente, ya que opera inspeccionando el valor en la variable de sistema incorporada $test.
Las reglas de alcance de MUMPS son más permisivas que las de otros lenguajes modernos. Las variables locales declaradas se delimitan mediante la pila. Una rutina normalmente puede ver todas las variables locales declaradas de las rutinas que se encuentran debajo de ella en la pila de llamadas, y las rutinas no pueden impedir que las rutinas que llaman modifiquen sus variables locales declaradas, a menos que el que llama cree manualmente un nuevo nivel de pila ( do) y cree un alias para cada una de las variables que desea proteger ( . new x,y) antes de llamar a cualquier rutina secundaria. Por el contrario, las variables no declaradas (variables creadas mediante su uso, en lugar de la declaración) están dentro del alcance de todas las rutinas que se ejecutan en el mismo proceso, y permanecen dentro del alcance hasta que el programa finaliza.
Debido a que las referencias a la base de datos MUMPS difieren de las referencias a variables internas solo en el prefijo de cursor, es peligrosamente fácil editar involuntariamente la base de datos o incluso eliminar una "tabla" de la base de datos. [19]
Usuarios
El Departamento de Asuntos de Veteranos de los Estados Unidos (anteriormente la Administración de Veteranos) fue uno de los primeros en adoptar el lenguaje MUMPS. Su trabajo de desarrollo (y las contribuciones posteriores al código base de la aplicación gratuita MUMPS) ejercieron influencia sobre 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 al mejor uso 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 las Innovaciones en el Gobierno Americano presentado por el Instituto Ash de la Escuela de Gobierno John F. Kennedy de la Universidad de Harvard por su extensión de DHCP en la Arquitectura de Tecnología y Sistemas de Información de Salud de Veteranos ( VistA ). Casi todo el sistema hospitalario del VA en los Estados Unidos, el Servicio de Salud Indígena y partes importantes del sistema hospitalario CHCS del Departamento de Defensa utilizan bases de datos MUMPS para el seguimiento de datos clínicos.
Otras empresas de TI sanitarias que utilizan MUMPS incluyen:
- Épico
- MEDITECNOLOGÍA
- GE Healthcare (anteriormente IDX Systems y Centricity )
- AmeriPath (parte de Quest Diagnostics)
- Centrado en el cuidado
- Todos los guiones
- Atención sanitaria de Coventry
- EMIS Salud
- Sunquest Information Systems (anteriormente Misys Healthcare [20] ).
- Netsmart
Muchos laboratorios de referencia, como DASA, Quest Diagnostics [21] y Dynacare, utilizan software MUMPS escrito por Antrim Corporation o basado en código de la misma. Antrim fue adquirida por Misys Healthcare (ahora Sunquest Information Systems ) en 2001. [22]
El sistema MUMPS también se utiliza ampliamente en aplicaciones financieras. El sistema MUMPS ganó popularidad en el sector financiero y se utiliza en muchos bancos y cooperativas de crédito. Lo utilizan el Banco de Inglaterra y el Barclays Bank . [23] [24] [25]
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 apoyar la misión Gaia . Esta misión tiene como objetivo cartografiar la Vía Láctea con una precisión sin precedentes. [26] InterSystems está en proceso de sustituir gradualmente a Caché en favor de Iris. [27]
Otras implementaciones actuales incluyen:
- M21
- Base de datos Yotta [28]
- Blanca
- Norma de referencia M
- M libre
Véase también
Referencias
- ^ Tweed, Rob; James, George (2 de agosto de 2008). «MUMPS: la base de datos de escalas de Internet» . Archivado desde el original el 27 de septiembre de 2021 . Consultado el 25 de octubre de 2022 – vía SlideShare .
- ^ 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 (Oct): 469–85. doi :10.1016/0010-4809(69)90012-3. PMID 11697375.
- ^ 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 interacción médico-computadora". N Engl J Med . 282 (6): 307–15. doi :10.1056/NEJM197002052820605. PMID 5410816.
- ^ Pendergrass, Henry P; Greenes, Robert A; Barnett, G Octo; Poitras, James W; Pappalardo, A Neil; Marble, Curt W (1969). "Una herramienta informática en línea para la entrada sistematizada de informes de radiología". Radiología . 92 (4): 709–13. doi :10.1148/92.4.709. PMID 5767748.
- ^ abc Trask, Gardner; Diamond, Jon (6 de abril de 1999). "Preguntas frecuentes sobre tecnología M y lenguaje MUMPS, parte 1/2". Grupo de noticias : comp.lang.mumps. Usenet: FKu0LK.19p@world.std.com . Consultado el 25 de octubre de 2022 .
- ^ Manual de referencia del lenguaje VAX-11 DSM . Digital Equipment Corporation. 1982. OCLC 29217964.
- ^ "Servidores HP NonStop, Lista de mantenimiento de productos de software, Fecha de vigencia: enero de 2012" (PDF) . Hewlett-Packard Development Company, LP 20 de enero de 2012. pág. 32 . Consultado el 17 de mayo de 2014 .
- ^ "Se han publicado dos versiones de MUMPS". Computerworld . Vol. XXI, núm. 48. 1987-11-30 . Consultado el 2022-07-09 .
- ^ Grabscheid, Paul; Ragon, Terry (2 de enero de 1995). "DSM Announcement". Grupo de noticias : comp.lang.mumps. Usenet: hwSTpyiTUNQJ@world.std.com . Consultado el 25 de octubre de 2022 .
- ^ "Sanchez ofrece la base de datos GT.M como software libre y de código abierto para usuarios de GNU/Linux". Sanchez Computer Associates, Inc. (Nota de prensa). 8 de noviembre de 2000. Archivado desde el original el 28 de abril de 2004. Consultado el 12 de agosto de 2013 .
{{cite press release}}: CS1 maint: unfit URL (link) - ^ "GT.M Motor de base de datos TP de alta gama". Sourceforge.net . Consultado el 12 de agosto de 2013 .
- ^ "Base de datos y lenguaje MUMPS". Sourceforge.net . Consultado el 12 de agosto de 2013 .
- ^ "Paperas/Mii". Rychannel.com. 8 de noviembre de 2012. Consultado el 12 de agosto de 2013 .
- ^ "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 .
- ^ "Estado de la marca registrada y recuperación de documentos". tsdr.uspto.gov . Consultado el 26 de febrero de 2018 .
- ^ "Programación extrema de bases de datos con MUMPS Globals" (PDF) . Gradvs1.mjgateway.com . Consultado el 13 de agosto de 2013 .
- ^ "Los estándares anotados de la M[UMPS]". 71.174.62.16. 2011-11-29 . Consultado el 2013-08-12 .
- ^ "Los estándares anotados de M[UMPS]". 71.174.62.16 . Consultado el 26 de febrero de 2018 .
- ^ 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.
- ^ "SunQuest emerge de la sombra de Misys". Healthcare IT News. 13 de marzo de 2008. Consultado el 12 de agosto de 2013 .
- ^ "Ajax de misión crítica: hacer que los pedidos de pruebas sean más fáciles y rápidos en Qu". Slideshare.net. 5 de abril de 2008. Consultado el 12 de agosto de 2013 .
- ^ "Sunquest adquiere Antrim Corp. - Free Online Library". Thefreelibrary.com. 1996-11-26 . Consultado el 2013-08-12 .
- ^ "Bienvenido a M21, la base de datos del siglo XXI". M21.uk.com . Consultado el 13 de agosto de 2013 .
- ^ "Sistemas financieros basados en Caché". InterSystems . Archivado desde el original el 2013-06-02 . Consultado el 2013-08-13 .
- ^ "IDEA Turn-Key banking and ERP applications" (Aplicaciones bancarias y ERP llave en mano de IDEA). Idea.cz. Consultado el 13 de agosto de 2013 .
- ^ "La Agencia Espacial Europea elige la base de datos Caché de InterSystems para la misión Gaia de mapeo de la Vía Láctea". Realwire.com. 13 de mayo de 2010. Consultado el 13 de agosto de 2013 .
- ^ "InterSystems Iris". InterSystems . Consultado el 18 de marzo de 2021 .
- ^ "Sitio web de YottaDB". yottadb.com. 24 de mayo de 2024. Consultado el 24 de mayo de 2023 .
Lectura adicional
- Walters, Richard F. (15 de enero de 1989). ABCs of MUMPS: Una introducción para programadores principiantes e intermedios (2.ª ed.). Digital Press. ISBN 978-1555580179. OCLC 18989618. OL 2055247M .
- Walters, Richard F. (19 de junio de 1997). Programación M: una guía completa (2.ª edición). Digital Press. ISBN 978-1-55558-167-1. LCCN 97006513. OCLC 78593848. OL 661091M - vía Internet Archive .
- Lewkowicz, John. The Complete MUMPS: Manual de introducción y 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 posrelacional Caché ISBN 3-540-00960-4
- Martínez de Carvajal, Ernesto (1993). El Lenguaje MUMPS (en español europeo) (1ª ed.). Barcelona: PPU. 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, págs 127–137 (1992).
- O'Kane, KC; y McColligan, EE, Un estudio de caso de un registro de intranet de pacientes con paperas, Journal of the Healthcare Information and Management Systems Society, vol. 11, n.º 3, págs. 81-95 (1997).
- O'Kane, KC; y McColligan, EE, Una máquina virtual para las 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 Mumps, Createspace, ISBN 1-4382-4338-3 , 120 páginas (2010).
Enlaces externos
- Trask, Gardner; Diamond, Jon (6 de abril de 1999). "Preguntas frecuentes sobre tecnología M y lenguaje MUMPS, parte 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 operación de un sistema de información de laboratorio para el síndrome de paperas: una década de experiencia en el Hospital Johns Hopkins
- Soluciones tecnológicas de IDEA Systems basadas en YottaDB (antes FIS GT.M) y Caché
- Documentación, temas y recursos sobre las paperas (en checo e inglés)