MUMPS è vivo? [chiuso]


11

Nel mio primo posto di lavoro stavamo usando i Digital Standard MUMPS su un PDP 11-clone (TPA 440), quindi siamo passati ai Micronetics Standard MUMPS in esecuzione su una macchina Hewlett-Packard, HP-UX 9, intorno ai primi anni '90.

MUMPS è ancora vivo? C'è qualcuno che lo usa? Se sì, per favore scrivi alcune parole al riguardo: lo stai usando in modalità personaggio, funziona da web server? ecc. (intendo anche Caché.)

Se sei stato usato, quali sono stati i tuoi sentimenti a riguardo? Ti è piaciuto?


1
Non credo che a nessuno piaccia qualcosa che assomigli a questo . Almeno perl è espressivo.
imgx64,

13
"MUMPS è vivo?" - Sì, ma tutti gli sviluppatori si stanno uccidendo.
Steven Evers,

@ imgx64 Dio che sembra orribile!
TheLQ

Non è necessario utilizzare la forma abbreviata di comandi "DHSY =% YK% H,% YQ", è necessario scrivere nomi di comandi completi (e utilizzare nomi di etichette / variabili più lunghi): "Do HourCount Set Year =% YearParam Kill% HourParam ,% YearParam Esci ". Inoltre, dopo anni di utilizzo del modulo di comando breve, ho scritto un programma di 20 righe con comandi long-form usng e variabili con nome lungo. Ai miei colleghi è stato detto: "Va bene, è una bella battuta, ma non farlo di nuovo", era 10 volte più difficile da leggere rispetto ai comandi brevi.
ern0

Risposte:


11

Intersystems vende un derivato MUMPS: http://www.intersystems.com

Alcune delle persone più interessanti di MUMPS sono probabilmente qui: http://www.outoftheslipstream.com/

Ho iniziato a scrivere blog su Cache (il derivato MUMPS) un paio di anni fa: http://cachetastic.blogspot.com/ (ma poi ho cambiato lavoro)

Essendo stato fuori dal mondo per un paio d'anni, il mio pensiero è che il movimento NoSQL è probabilmente la cosa migliore e peggiore che possa accadere a MUMPS. Alla fine è probabile sia rivendicare che ucciderlo. Perché qualcuno, ad un certo punto, reinventerà il database e la struttura delle query di MUMPS in modo quasi identico, ma senza alcuna connessione con la tradizione MUMPS. Quindi le persone adoreranno questo nuovo sistema di archiviazione. Ma nessuno sceglierà mai più un derivato MUMPS.

Ad esempio, un mese o due fa, stavo parlando con un collega sull'uso di redis per memorizzare nella cache una ricerca di qualcosa nella nostra applicazione Django. Avevamo un gran numero di record indirizzati da una tripla di tre chiavi e avevamo bisogno di ottenere rapidamente sottoinsiemi corrispondenti a una o due di queste chiavi (ma combinazioni diverse in momenti diversi).

Questo è il tipo di cosa che MUMPS mangia a colazione. Ma stavamo trovando difficile comprimere la chiave di redis, la struttura della coppia di val. Anche con i dizionari. (Lo stesso vale per memcached, ecc.) Per la prima volta nella mia vita, mi sono davvero pentito di non poter scrivere questo modulo in Cache ObjectScript.

Qualche altro pensiero su Cache qui:

Buono: http://cachetastic.blogspot.com/2008/07/ok-after-mentioning-some-bad-things.html

Bad: http://cachetastic.blogspot.com/2008/07/some-mumps-dissing-and-more-positive.html


9

Interstar divertente dovrebbe menzionare Redis. In realtà ho invertito quasi tutto il comportamento di Redis usando Mumps (sia Cache che GT.M). Emulare la sua semplice e basilare struttura coppia chiave / valore e le API è stato un gioco da ragazzi e i clienti Redis che ho testato non sanno nemmeno che stanno parlando con un database Mumps invece che con il Redis corretto.

Tuttavia, come dice interstar, il database Mumps è in grado di fare molto di più in termini di struttura dei dati (in realtà un database Mumps può facilmente emulare tutti e 4 i tipi di database NoSQL: chiave / valore, tabulare, documento e grafico, e può anche modellare dbs relazionali e di oggetti - tutto in una volta, se necessario) e l'equilibrio corretto e automatico tra memoria in memoria e su disco. A differenza dei database NoSQL che esistono da pochi anni, le tecnologie Mumps sono mature, testate, testate, ben supportate e hanno pacchetti di analisi e amministrazione disponibili e hanno il tipo di prestazioni che molti database NoSQL come CouchDB moriranno per .

Quindi perché i fornitori di Cache e GT.M non stanno promuovendo duramente nel mercato NoSQL piuttosto che permettere a qualcuno di reinventare la ruota come dici tu?

Quanto al vecchio stanco litigi sulla lingua e sull'uso di quell'esempio antico e obsoleto dal sito di Wikipedia:

a) Se lo si desidera, è possibile accedere al database Mumps tramite il linguaggio moderno e sexy preferito dal proprio animale domestico

b) quello stile di programmazione è uscito con l'Arca ed è stato scritto in quel momento per ottenere prestazioni straordinarie da computer PDP che avevano una potenza di elaborazione inferiore rispetto al chip dell'orologio. La codifica Modern Mumps è in realtà molto simile nello stile a Python e può essere altrettanto pulita, leggibile e mantenibile.

c) Come ogni lingua ci sono buoni esempi che puoi trovare e terribili. Non dare per scontato che il codice di Mumps debba essere opaco e vecchio stile come nell'esempio sul sito di Wikipedia.

..e Mason, la mia conclusione sarebbe che forse non hai familiarità con il panorama del database come pensavi di essere! :-) Se hai avuto qualsiasi forma di trattamento medico nella tua vita, le tue informazioni saranno passate attraverso innumerevoli sistemi di parotite lungo il percorso, compresi quelli che gestiscono la richiesta dei tuoi test. Il contenuto del tuo quotidiano può essere gestito da un sistema Mumps e anche la pizza che hai ordinato online era probabilmente anche tramite un sistema Mumps. La logistica degli articoli che potresti aver spedito all'estero è stata probabilmente gestita tramite un sistema Mumps, e se ti è capitato di essere un ricercatore che aveva bisogno di alcuni metalli fantasiosi o ceramiche, probabilmente li avrai ordinati tramite un sistema Mumps.

Uno dei motivi per cui raramente si sente parlare di ciò che in realtà è un database sorprendentemente pervasivo è che i fornitori hanno tradizionalmente trattato direttamente con gli sviluppatori di applicazioni / sistemi piuttosto che con gli utenti finali, quindi il database è solitamente incorporato dietro le quinte nei prodotti.


1
Penso che la lingua non sia male. Non ci ho provato ma deve essere abbastanza veloce su un hardware moderno. L'ultima versione di MSM supportava la programmazione strutturata: variabili locali (nuovo comando), parametri di funzione, subroutine in linea per linee multiple. Eravamo così contenti di queste funzionalità e abbiamo creato un sacco di utility: visualizzatore di elenchi, menu ecc. Infine, abbiamo esaurito lo stack, quindi abbiamo chiesto a Micronetics di aumentare le dimensioni dello stack. Ci hanno compilato una versione personalizzata dello stack MSM a 32 profondità anziché la versione predefinita a 16 profondità.
ern0

1
Per respingere un po 'Rob, mentre penso che valga la pena prestare attenzione al db MUMPS, mi chiedo se solo il db, a cui si accede da un'altra lingua, possa ancora essere chiamato MUMPS. Chiunque scelga MUMPS si aspetta di essere in grado di eseguire il codice legacy. Quindi MUMPS, che piaccia o no, è uguale a db + alla lingua.
interstar,

2
Come ho già detto altrove, il vero disastro / dealbreaker per la lingua è l'ambito dinamico. Non credo che nessun ingegnere, oggi, possa giustificare la scelta di una lingua senza variabili locali che rimangano locali. Quindi, usa sicuramente il db MUMPS come componente della scatola nera, ma il linguaggio è oltre la redenzione e dovrebbe essere messo a riposo.
interstar

1
La parotite ha una portata lessicale completa delle variabili - lo fa da anni, ma molte persone non sembrano aver notato! Il codice di parotite può essere pulito e ben educato come qualsiasi altra lingua. In effetti, Mumps ha molte somiglianze con Javascript in termini di scoping variabile. es. New in Mumps è, in effetti, uguale a var in Javascript. Per impostazione predefinita, tuttavia, le variabili hanno un ambito globale in entrambe le lingue.
Rob,

1
Rapinare. Certamente non ho notato lo scoping lessicale delle variabili nella cache. E il mio esempio in cachetastic.blogspot.com/2008/07/… ? Che utilizza la "nuova" parola chiave, ma NON è assolutamente la regola di ambito desiderata. La x in f e la x in g NON devono essere la stessa variabile SENZA g che deve nascondere esplicitamente qualsiasi x che si trovava nello stack. La stessa cosa convertita in javascript, sostituendo il "nuovo" di COS con "var" restituisce correttamente x in f come indefinito.
interstar,

6

MUMPS è molto vivo. È stato uno dei sistemi più degni di fiducia nelle mani giuste. Lo staff di programmazione è generalmente piccolo e il tempo di attività è impressionante. Può sembrare non iniziato che MUMPS sia ottuso, ma è possibile scrivere codice molto lucido e altamente funzionale in pochissime sequenze di tasti e le strutture di dati supportate da MUMPS lo rendono estremamente potente e molto trasportabile attraverso varie architetture diverse. Tutti gli ospedali VA utilizzano MUMPS e il tempo medio di riparazione è molto rapido nella maggior parte dei casi. Il sistema VistA scritto in MUMPS è facilmente scaricabile da Source Forge e la natura polimodale (è possibile accedere al database in molti modi, roll and scroll, thin client, browser o RPC o altra interfaccia di programma) di VistA e MUMPS arriva attraverso per molti che lo approfondiscono. MUMPS è un linguaggio semplice con pochissimi comandi e un tipo di dati. È facile da imparare perché è un linguaggio interpretato e lascia intatto lo stack e la tabella dei simboli per vedere esattamente cosa stava succedendo quando l'applicazione si è fermata per il debug. VistA è stato utilizzato per gestire gli ospedali del Dipartimento della Difesa (Sistema sanitario composito, CHCS), nonché il servizio sanitario indiano (IHS RPMS), e un tempo era utilizzato dal Servizio sanitario pubblico statunitense. Ha risparmiato al paese molti milioni di dollari in costi operativi. MUMPS funziona praticamente su qualsiasi cosa. Modella facilmente qualsiasi altro modello di database e fornisce un accesso sorprendentemente veloce ai database. Il modello MUMPS può effettivamente ottenere prestazioni più rapide con più utenti sul sistema (in alcuni casi, a causa degli aspetti di cache di MUMPS in cui i blocchi di puntatori necessari per trovare un blocco di dati sono già in memoria e non devono essere recuperati di nuovo, a proposito, l'overhead del puntatore per MUMPS è di circa il 2%, quindi la maggior parte del database sono i dati dell'utente reale). MUMPS è stato originariamente scritto per funzionare su una macchina 2K. L'assalto della nuova tecnologia ha solo ampliato le funzionalità complete dell'ambiente MUMPS in un regno in cui interi ospedali sono ora in esecuzione su server di prodotti a basso costo. All'inizio, MUMPS si è separato dall'hardware e ha beneficiato molto bene di quella decisione. Non ci preoccupiamo della dimensione delle parole o della precisione, o di quante o quanto grandi. Il database è in ritardo di associazione e cresce in base alle esigenze del record specifico. Nessun record in alcun database è più grande di quanto deve essere. Il database può essere espanso o eliminato come da parte di un record o come un intero record. MUMPS è ancora in giro ?, scommetti? Invece di ottenere 8 utenti su un PDP-11/34, puoi avere un paio di centinaia di utenti sul PC da tavolo sotto la tua scrivania. Viene utilizzato nel settore bancario, nella borsa europea, nell'industria dei viaggi (hotel e agenti di prenotazione), in alcune case di ricambi auto e negli ospedali di maggior successo (commerciali, privati ​​o di comunità) gestiscono MUMPS in qualche modo. Il VA ha attualmente oltre 30 anni di storie di risultati per i suoi oltre 9 milioni di pazienti. Questo di per sé è qualcosa che nessun altro sistema sanitario ha realizzato, ad eccezione del Beth Israel / Deaconess Hospital di Boston che ha oltre 35 anni di risultati nel suo sistema MUMPS costruito in casa. scommetti? Invece di ottenere 8 utenti su un PDP-11/34, puoi avere un paio di centinaia di utenti sul PC da tavolo sotto la tua scrivania. Viene utilizzato nel settore bancario, nella borsa europea, nell'industria dei viaggi (hotel e agenti di prenotazione), in alcune case di ricambi auto e negli ospedali di maggior successo (commerciali, privati ​​o di comunità) gestiscono MUMPS in qualche modo. Il VA ha attualmente oltre 30 anni di storie di risultati per i suoi oltre 9 milioni di pazienti. Questo di per sé è qualcosa che nessun altro sistema sanitario ha realizzato, ad eccezione del Beth Israel / Deaconess Hospital di Boston che ha oltre 35 anni di risultati nel suo sistema MUMPS costruito in casa. scommetti? Invece di ottenere 8 utenti su un PDP-11/34, puoi avere un paio di centinaia di utenti sul PC da tavolo sotto la tua scrivania. Viene utilizzato nel settore bancario, nella borsa europea, nell'industria dei viaggi (hotel e agenti di prenotazione), in alcune case di ricambi auto e negli ospedali di maggior successo (commerciali, privati ​​o di comunità) gestiscono MUMPS in qualche modo. Il VA ha attualmente oltre 30 anni di storie di risultati per i suoi oltre 9 milioni di pazienti. Questo di per sé è qualcosa che nessun altro sistema sanitario ha realizzato, ad eccezione del Beth Israel / Deaconess Hospital di Boston che ha oltre 35 anni di risultati nel suo sistema MUMPS costruito in casa. l'industria dei viaggi (hotel e agenti di prenotazione), alcune case di ricambi auto e gli ospedali di maggior successo (commerciali, privati ​​o di comunità) gestiscono MUMPS in qualche modo. Il VA ha attualmente oltre 30 anni di storie di risultati per i suoi oltre 9 milioni di pazienti. Questo di per sé è qualcosa che nessun altro sistema sanitario ha realizzato, ad eccezione del Beth Israel / Deaconess Hospital di Boston che ha oltre 35 anni di risultati nel suo sistema MUMPS costruito in casa. l'industria dei viaggi (hotel e agenti di prenotazione), alcune case di ricambi auto e gli ospedali di maggior successo (commerciali, privati ​​o di comunità) gestiscono MUMPS in qualche modo. Il VA ha attualmente oltre 30 anni di storie di risultati per i suoi oltre 9 milioni di pazienti. Questo di per sé è qualcosa che nessun altro sistema sanitario ha realizzato, ad eccezione del Beth Israel / Deaconess Hospital di Boston che ha oltre 35 anni di risultati nel suo sistema MUMPS costruito in casa.


6

ci sono un paio di gravi domande sulla parotite su SO:

/programming/tagged/mumps


Perché il downvote? La domanda era : MUMPS è ancora vivo? C'è qualcuno che lo usa? - sicuramente questa è la prova rilevante di qualcuno che scrive seriamente nuovo codice e / o impara MUMPS?
Colin Pickard,

4

Sì, MUMPS è molto vivo. Una buona parte degli ospedali VA negli Stati Uniti usa MUMPS.


3
E buona parte dei pazienti è viva? :-)
Maniero

8
@bigown: certo. Altrimenti, non sarebbero ancora pazienti.
Mason Wheeler,


3

Sono anche nuovo di g.tm, ma posso rispondere a questa domanda:

Sì, la parotite è viva. Ci sono ancora persone che ci lavorano. Ecco alcuni esempi :

http://georgejames.com/ che ha scritto un server API di Openstreetmap in gt.m che sto imparando ora.

Ora ci sono anche moderni strumenti web aziendali per g.tm http://gradvs1.mgateway.com/main/

e l'ultima prova che è vivo è che è stato portato sulle ultime piattaforme GNU / linux e cloud.

Mike



1

Dovresti leggere questo:

http://thedailywtf.com/Articles/A_Case_of_the_MUMPS.aspx

a proposito di MUMPS.

D'altra parte, lavoro nell'area DC e incontro persone abbastanza regolarmente che non solo sanno in cosa MUMPS ci lavorano spesso.


Quello .... che mi ha ORRIFICATO. Mi sento come se dovessi fare il bagno, ora. :(
Matt DiTrolio,

1
È difficile spiegare nell'era di SQL che questi problemi, elencati in quell'articolo, sono delle caratteristiche. Una lettera è per la velocità. Un tipo è molto meglio della digitazione automatica. Ecc.
ern0

1

Bene, non ho mai sentito parlare di qualcuno che lo utilizza, in qualsiasi contesto o per qualsiasi motivo, tranne che per The Daily WTF. Quali conclusioni si possono trarre da ciò spetta al lettore. ;)


1

L'esempio di Interstar scritto correttamente per usare le funzioni:

f ;   
  new x  
  set x=$$g()  
  write x  
  quit  

g()  
  new x  
  set x = 5  
  quit x  

do f  

fè una procedura che viene invocata con un do. Se, come in questo caso, non ha parametri formali, non è necessario (). Una procedura si chiude e non restituisce nulla.

g()d'altra parte è una funzione. Il nuovo xè fondamentale per la corretta portata x. Una funzione viene invocata precedendo il suo nome con $$QUIT con un valore di ritorno. Una funzione deve avere un elenco di parametri formale dichiarato anche se è vuoto come qui. In realtà potresti scrivere questa istanza g()come:

g()  
 quit 5

Ora si comporterà perfettamente. Per qualche ragione molti sviluppatori di Mumps non sembrano aver notato o capito l'esistenza di funzioni, o capiscono la differenza tra loro e le procedure. Penso che questo sia uno dei motivi per cui le persone che non conoscono la parotite alzano le mani inorridite (non sorprendentemente) - c'è un sacco di codice terribile là fuori.

Scritto come mostrato sopra, è tutto roba abbastanza pulita e rispettabile. Tuttavia, spetta al programmatore individuare esplicitamente le variabili all'interno di funzioni e procedure. Lasciali fuori e saranno globali e colano ovunque. Il trucco è costruire e testare ogni funzione mentre vai in isolamento e assicurarti che non facciano altro che i loro parametri formali e, una volta terminato, non lascino nulla alle spalle.


Ora uno dei motivi per cui vedi il codice di Mumps là fuori che non usa nuovi comandi e che si basa sul fatto che le variabili sono globali (quindi si rompe se hai le nuove variabili) è perché è stato scritto in un momento prima delle funzioni e l'ambito lessicale è stato aggiunto alla lingua. Sfortunatamente c'è un sacco di codice legacy là fuori e, sì, finisce per essere un incubo da mantenere, ma questo è un retaggio per te. D'altra parte, è del tutto possibile scrivere codice Mumps pulito, moderno e ben educato, a condizione che tu stia scrivendo nuove cose da zero senza alcuna roba legacy di cui preoccuparti.
Rob,

Guardando il tuo esempio originale, il valore x, quando nuovo nella procedura f è automaticamente disponibile per g - è così che è la parotite. Allo stesso modo, le persone che sono abituate ai linguaggi della sintassi C sono sorprese quando scoprono che l'ambito in Javascript è applicato solo alle funzioni e non, ad esempio, all'interno di loop o blocchi all'interno di una funzione. È così, una volta che lo conosci, lo affronti di conseguenza. Tali idiosincrasie non hanno impedito alle persone di accettare e adottare Javascript.
Rob,

Rob: "Guardando il tuo esempio originale, il valore x, quando nuovo nella procedura f è automaticamente disponibile per g - è così che è la parotite." Infatti! Ed è questo che significa che MUMPS ha un ambito dinamico e non un ambito lessicale. In un linguaggio con ambito lessicale, non è necessario disporre della "nuova x" nella funzione g, poiché la struttura lessicale del programma (ovvero il fatto che g sia definito al di fuori della definizione di f), è sufficiente a garantire che le x cui si fa riferimento in g e f sono due variabili completamente diverse.
interstar,

Rapinare. Sul punto più ampio, che un team ben programmato di programmatori MUMPS, scrivendo da zero e usando attentamente "nuovo" per garantire che tutte le variabili siano locali, può evitare i problemi di scoping dinamico. Certo, sono d'accordo. Ma perché dovremmo aver bisogno di una disciplina ferrea e di centinaia di righe extra di codice, per replicare ciò che ogni altro linguaggio contemporaneo ti offre gratuitamente? Inoltre, se ti trovi di fronte a un codice legacy che non è stato scritto con questa disciplina, è quasi impossibile inserirlo in un secondo momento, perché non puoi dire se il sistema si basa su uno di questi non locali per trasmettere informazioni .
interstar,

Esistono altri metodi (più vecchi) per separare le variabili della subroutine: tutti i nomi delle variabili delle utilità di sistema iniziano con il segno '%', quindi si trovano nello "spazio dei nomi di sistema". Inoltre, la denominazione delle variabili in New riguarda la velocità: se si utilizza un comando esplicito per inserire nello stack le variabili riutilizzate, l'interprete non deve fare nulla da solo quando si accede a una routine. Inoltre, puoi usare Nuovo, senza parametri, che nasconde tutte le variabili correnti.
ern0
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.