kabakulak - MUMPS

KABAKULAK
paradigma Zorunlu , prosedürel
Tarafından tasarlandı Neil Pappalardo
İlk ortaya çıktı 1966 ; 55 yıl önce ( 1966 )
kararlı sürüm
ANSI X11.1-1995 / 8 Aralık 1995 ( 1995-12-08 )
Yazma disiplini tipsiz
işletim sistemi Çapraz platform
Tarafından etkilenmiş
JOSS
Etkilenen
PSL , Önbellek ObjectScript

MUMPS ("Massachusetts General Hospital Utility Çoklu Programlama Sistemi") veya M , entegre programlama diline sahip yüksek performanslı bir işlem işleme anahtar-değer veritabanıdır . Başlangıçta Massachusetts General Hospital'da hastane laboratuvar bilgi sistemlerini yönetmek için geliştirilmiştir.

MUMPS teknolojisi o zamandan beri Amerika Birleşik Devletleri'nde sağlık bilgi sistemleri ve elektronik sağlık kayıtları için baskın veri tabanı olarak genişledi . MUMPS tabanlı bilgi sistemleri ABD'deki hastanelerin %40'ından fazlasını yönetiyor, tüm ABD federal hastaneleri ve kliniklerinde çalışıyor ve ABD genelinde hastaların %54'ünden fazlası için sağlık bilgi hizmetleri sağlıyor.

MUMPS teknolojisinin benzersiz bir özelliği, kalıcı disk depolamaya doğrudan, yüksek hızlı okuma-yazma erişimi sağlayan entegre veritabanı dilidir. Bu, tek bir veritabanı içinde sınırsız uygulamanın sıkı entegrasyonunu sağlar ve çevrimiçi işlem işleme sistemi olarak son derece yüksek performans ve güvenilirlik sağlar.

genel bakış

MUMPS, veritabanı uygulamaları oluşturmak için tasarlanmış ve tasarlanmış bir dildir. Programcıların minimum bilgi işlem kaynakları kullanarak uygulamalar yapmasına yardımcı olmak için ikincil dil özellikleri dahil edildi. Modern uygulamalar tamamen veya kısmen derlenebilse de orijinal uygulamalar yorumlandı . Bireysel "programlar" bellek "bölümlerinde" çalışır . İlk MUMPS bellek bölümleri 2048 bayt ile sınırlıydı, bu nedenle agresif kısaltma, ciddi şekilde kaynak sınırlı donanım üzerinde çoklu programlamaya büyük ölçüde yardımcı oldu, çünkü birden fazla MUMPS işi, o sırada donanımda mevcut olan çok küçük belleklere sığabilirdi. Çok kullanıcılı sistemler sağlama yeteneği, başka bir dil tasarım özelliğiydi. "Kelimesi M şıkkını P buna kısaltma noktalarında rogramming". MUMPS çalıştıran en eski makineler bile aynı anda birden fazla işi destekliyordu. Birkaç yıl sonra mini bilgisayarlardan mikro bilgisayarlara geçişle birlikte, tek bir 8 bit CPU ve 16K veya 64K belleğe sahip "tek kullanıcılı bir PC" bile, kendisine bağlanabilen (olmayan) birden fazla kullanıcıyı destekleyebilir. grafiksel ) video görüntüleme terminalleri .

Bellek başlangıçta kısıtlı olduğundan, MUMPS için dil tasarımı çok özlü koda değer veriyordu. Böylece, her MUMPS komutu veya işlev adı bir ila üç harf uzunluğunda kısaltılabilir, örneğin Quit (programdan çıkış) olarak Q, $P = $Parça işlevi, R = Okuma komutu, $TR = $Çevir işlevi. Çizgi kapsamı aynı özlü dil tasarımını desteklediğinden, MUMPS'ta boşluklar ve satır sonu işaretleyicileri önemlidir. Böylece, tek bir program kodu satırı, birkaç karakterle, diğer programlama dillerinin 5 ila 10 kat daha fazla karakter gerektirebileceği bir fikri ifade edebilir. Kısaltma, bu dönemde tasarlanan dillerin ortak bir özelliğiydi (örneğin, FOCAL-69 , Tiny BASIC gibi erken BASIC'ler , vb.). Bunun talihsiz bir yan etkisi, minimalist kod yazma ihtiyacı ile birleştiğinde, MUMPS programcılarının rutin olarak kod yorumlamaması ve kapsamlı kısaltmalar kullanmasıydı. Bu, uzman bir MUMPS programcısının bile işlevini görmek için sadece bir kod sayfasını gözden geçiremeyeceği, aynı zamanda onu satır satır analiz etmesi gerektiği anlamına geliyordu.

Veritabanı etkileşimi, şeffaf bir şekilde dilde yerleşiktir. KABAKULAK dili sağlar hiyerarşik veritabanı oluşan kalıcı seyrek diziler örtülü her KABAKULAK uygulama için "açılmış" olan,. Ön eki düzeltme işareti ("^") olan tüm değişken adları kalıcı (RAM yerine) depolama kullanır, uygulama çıktıktan sonra değerlerini korur ve çalışan diğer uygulamalar tarafından görülebilir (ve bunlar tarafından değiştirilebilir). Bu paylaşılan ve kalıcı depolamayı kullanan değişkenlere MUMPS'ta Globaller adı verilir , çünkü bu değişkenlerin kapsamı sistemdeki tüm işler için "küresel olarak kullanılabilir". "Global değişkenler" adının diğer dillerde daha yeni ve daha yaygın kullanımı, kapsamlandırılmamış değişkenlerin aynı süreçte çalışan tüm programlarda "genel olarak" kullanılabilir olması, ancak aralarında paylaşılmaması gerçeğinden kaynaklanan daha sınırlı bir ad kapsamıdır. çoklu süreçler. MUMPS Depolama modu (yani kalıcı seyrek diziler olarak depolanan globaller), MUMPS veritabanına belge yönelimli bir veritabanının özelliklerini verir .

Başına şapka karakteri ("^") getirilmeyen tüm değişken adları geçici ve özeldir. Global değişkenler gibi, hiyerarşik bir depolama modeline de sahiptirler, ancak tek bir iş için yalnızca "yerel olarak kullanılabilirler", bu nedenle "yerel" olarak adlandırılırlar. Hem "genel" hem de "yerel" alt düğümlere sahip olabilir ( MUMPS terminolojisinde alt simge olarak adlandırılır ). Abonelikler sayılarla sınırlı değildir—herhangi bir ASCII karakteri veya karakter grubu bir alt simge tanımlayıcısı olabilir. Bu, Perl veya JavaScript gibi modern diller için alışılmadık bir durum olmasa da, 1970'lerin sonlarında oldukça sıra dışı bir özellikti. Bu yetenek, 1984 ANSI standardından önce MUMPS sistemlerinde evrensel olarak uygulanmadı, çünkü standart tarafından izin verilmesi için yalnızca kanonik sayısal alt simgeler gerekliydi. Böylece, 'Araba' adlı değişken, her biri bir değer içerebilen ve kendi aboneliklerine sahip olan "Kapı", "Direksiyon" ve "Motor" alt simgelerine sahip olabilir. ^Car("Kapı") değişkeni, örneğin iç içe geçmiş bir "Renk" değişken alt indisine sahip olabilir. Böylece, söyleyebilirsin

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

^Car'ın iç içe geçmiş bir alt düğümünü değiştirmek için. MUMPS terimlerinde, "Renk", ^Car değişkeninin 2. alt simgesidir (hem alt düğümlerin adları hem de alt düğümlerin kendilerine aynı şekilde alt simgeler denir). Hiyerarşik değişkenler, birçok nesne yönelimli dilde özelliklere sahip nesnelere benzer . Ek olarak, MUMPS dil tasarımı, değişkenlerin tüm aboneliklerinin otomatik olarak sıralı düzende tutulmasını gerektirir. Sayısal alt simgeler (kayan noktalı sayılar dahil) en düşükten en yükseğe doğru saklanır. Sayısal olmayan tüm alt simgeler, sayıları takip eden alfabetik sırayla saklanır. MUMPS terminolojisinde bu kurallı düzendir . MUMPS programcısı, yalnızca negatif olmayan tamsayı aboneliklerini kullanarak , diğer dillerden dizi veri türünü taklit edebilir . MUMPS, zorunlu şemalar gibi tam bir VTYS özelliklerini yerel olarak sunmasa da, uygulama geliştiricilerine düz dosya, ilişkisel ve ağ veritabanı özellikleri sağlayan birkaç VTYS sistemi bunun üzerine inşa edilmiştir .

Ek olarak, sınırlandırılmış bir dizgiyi (örneğin, virgülle ayrılmış değerler ) bir dizi olarak ele alan yerleşik operatörler vardır . İlk MUMPS programcıları genellikle ilgili bilgilerin bir yapısını sınırlandırılmış bir dizi olarak depolar ve okunduktan sonra ayrıştırır; bu, disk erişim süresinden tasarruf sağladı ve bazı donanımlarda önemli hız avantajları sağladı.

MUMPS'ın veri türü yok. Sayılar basamak dizileri olarak tedavi edilebilir ya da şeritler (sayısal operatörler tarafından numaraları olarak tedavi edilebilir zorla , Kabakulak terminolojide). Bununla birlikte, zorlamanın bazı garip yan etkileri olabilir. Örneğin, bir dize zorlandığında, ayrıştırıcı dizenin (soldan başlayarak) olabildiğince çoğunu bir sayıya çevirir, sonra gerisini atar. Böylece ifade MUMPS'daki IF 20<"30 DUCKS"gibi değerlendirilir TRUE.

Dilin diğer özellikleri, MUMPS uygulamalarının çok kullanıcılı bir ortamda birbirleriyle etkileşime girmesine yardımcı olmayı amaçlamaktadır. Veritabanı kilitleri, süreç tanımlayıcılar ve bölünmezlik veritabanı güncelleme işlemlerinin tüm standart KABAKULAK uygulamalarının gereklidir.

C veya Wirth geleneklerindeki dillerin aksine , MUMPS ifadeleri arasındaki bazı boşluk karakterleri önemlidir. Tek bir boşluk, bir komutu bağımsız değişkeninden ayırır ve bir boşluk veya yeni satır, her bir bağımsız değişkeni bir sonraki MUMPS belirtecinden ayırır. Argüman almayan komutlar (örneğin, ELSE) iki takip eden boşluk gerektirir. Konsept, bir boşluğun komutu (var olmayan) argümandan ayırması, sonrakinin "argümanı" bir sonraki komuttan ayırmasıdır. Yeni satırlar da önemlidir; an IF, ELSEveya FORkomut satırın sonuna kadar diğer her şeyi işler (veya atlar). Bu ifadelerin birden çok satırı kontrol DOetmesini sağlamak için, bir kod bloğu oluşturmak için komutu kullanmanız gerekir .

"Selam Dünya!" örnek

Basit bir "Merhaba, Dünya!" MUMPS'deki program şöyle olabilir:

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

ve MUMPS komut satırından komutla çalıştırılır do ^hello. MUMPS, komutların aynı satırda dizilmesine izin verdiğinden ve komutlar tek bir harfe kısaltılabildiğinden, bu rutin daha kompakt hale getirilebilir:

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

,!Metinden sonraki '' ' yeni bir satır oluşturur.

Tarih

Yaratılış

MUMPS, 1966 ve 1967 yıllarında Boston'daki Massachusetts General Hospital'daki (MGH) Dr. Octo Barnett'in laboratuvarında Neil Pappalardo , Robert Greenes ve Curt Marble tarafından geliştirildi . Daha sonra teknik liderler Dennis "Dan" Brevik ve Paul Stylos tarafından yeniden yazıldı . 1970 ve 1971'de Aralık .

Orijinal MUMPS sistemi, birkaç yıl sonra Unix gibi bir DEC PDP-7 üzerine kurulmuştu . Octo Barnett ve Neil Pappalardo da ile tutulmuştu MGH bir Hastane Bilgi Sistemi için 'ın planlaması, bir elde geriye uyumlu PDP-9 ve kabul döngüsü ve laboratuvar testi raporlama Kabakulak kullanmaya başladı. MUMPS o zamanlar yorumlanmış bir dildi , ancak o zaman bile , verilerle etkileşimi ve soyut disk işlemlerini standart hale getirmek için hiyerarşik bir veritabanı dosya sistemi içeriyordu, böylece yalnızca MUMPS dili tarafından yapıldılar.

Kabakulak bazı yönleri den izlenebilir RAND Corporation'ın 'ın Joss aracılığıyla BBN s' TELCOMP ve STRINGCOMP . MUMPS ekibi, tasarım hedefi olarak makineler arasında taşınabilirliği dahil etmeyi seçti.

MUMPS dilinin , çağın işletim sistemlerinde veya bilgisayar donanımlarında yaygın olarak desteklenmeyen gelişmiş bir özelliği , çoklu görevdi . Ana bilgisayarlarda zaman paylaşımı, Multics gibi sistemlerde giderek yaygınlaşsa da , çoğu mini bilgisayar paralel programlar çalıştırmıyordu ve iş parçacığı hiç mevcut değildi. Ana Bilgisayarlarda bile, bir programın tamamlanıncaya kadar çalıştırıldığı toplu işleme çeşidi, çoklu programlama işletim sistemi için en yaygın uygulamaydı.

Unix geliştirilinceye kadar birkaç yıl geçti. Bellek yönetimi donanımının olmaması, aynı zamanda tüm çoklu işlemlerin, bir bellek işaretçisinin başka bir işlemi değiştirme olasılığıyla dolu olduğu anlamına geliyordu. MUMPS programları, C dilinin aksine, doğrudan belleğe atıfta bulunmak için standart bir yola sahip değildir , bu nedenle çoklu görev, dilde yazılmış herhangi bir program tarafından değil, dil tarafından zorunlu kılındığından, var olan riske sahip olmak imkansızdı. diğer sistemler.

Dan Brevik'in DEC MUMPS-15 sistemi, bir süre yaşadığı DEC PDP-15'e uyarlandı . İlk olarak Mayıs 1971'de Denver'daki Sağlık Veri Yönetim Sistemlerine kuruldu. Taşınabilirliğin faydalı olduğu kanıtlandı ve MUMPS, bir devlet araştırma hibesi aldı ve böylece MUMPS, hibeler için bir gereklilik olan kamuya açık hale getirildi. MUMPS kısa süre sonra popüler DEC PDP-8 , Data General Nova ve DEC PDP-11 ve Artronix PC12 mini bilgisayarı dahil olmak üzere bir dizi başka sisteme taşındı . Kabakulak hakkındaki haberler çoğunlukla tıp camiasında yayıldı ve yaygın olarak kullanıldı, genellikle kendi ihtiyaçları için yerel olarak değiştirildi.

1970'lerin başında, bir dizi donanım platformunda MUMPS'nin çok sayıda ve çeşitli uygulamaları vardı. Bir başka dikkat çekici platformu Paul Stylos' Aralık KABAKULAK-11 PDP-11 ve oldu MEDITECH 'ın MIIS . 1972 sonbaharında, birçok MUMPS kullanıcısı Boston'da o zamanlar parçalanmış dili standartlaştıran bir konferansa katıldı ve bunu yapmak için MUMPS Kullanıcıları Grubu ve MUMPS Geliştirme Komitesi'ni (MDC) kurdu . Bu çabalar başarılı oldu; 1974'te bir standart tamamlanmış ve 15 Eylül 1977'de ANSI standardı X11.1-1977 olarak onaylanmıştır. Aynı zamanda DEC, PDP-11 için DSM-11'i (Dijital Standart MUMPS) başlattı. Bu, piyasaya hızla hakim oldu ve zamanın referans uygulaması haline geldi. Ayrıca InterSystems , PDP-11 için (DSM-11 ile aynı olan) ISM-11 sattı.

1980'ler

1980'lerin başında birkaç satıcı, ANSI standardını karşılayan MUMPS tabanlı platformları piyasaya sürdü. En önemlileri şunlardı:

  • İle Digital Equipment Corporation, DSM (Dijital Standart KABAKULAK). DSM-11'in yerini VAX/VMS işletim sistemi için VAX-11 DSM aldı ve bu, Alpha'ya iki varyantta taşındı : OpenVMS için DSM ve Ultrix için DSM olarak .
  • InterSystems ile ISM VMS (M / VX) ile (InterSystems E), M / MS-DOS, E / DG üzerine, PDP-11 platformu, E / PC 11 + genel bir veri IBM VM / CMS, m / VM, ve çeşitli Unix'lerde M/UX.

Diğer şirketler önemli MUMPS uygulamaları geliştirdi:

  • G.M adlı derlenmiş bir sürümü olan Greystone Technology Corporation .
  • Intel PC tabanlı ürün ile DataTree Inc denilen DTM .
  • UNIX ve Intel PC platformları için MSM adlı bir ürün hattına sahip Micronetics Design Corporation (daha sonra IBM'in VM işletim sistemine , VAX/VMS platformlarına ve OpenVMS Alpha platformlarına taşındı ).
  • (Daha sonra MGlobal değiştirildi) Bilgisayar Danışmanlar, bir Houston şirket ilk olarak oluşturulan tabanlı ccsm sonra 6809 6800, üzerinde ve sonunda sonra faaliyete giren 68000, bir liman MacMUMPS , bir Mac OS ürünü tabanlı. Ayrıca MGM MUMPS uygulaması üzerinde çalıştılar . MGlobal, uygulamalarını DOS platformuna da taşıdı. MGlobal MUMPS, IBM PC için ilk ticari MUMPS ve klasik Mac OS için tek uygulamaydı.
  • Tandem Computers , hataya dayanıklı bilgisayarları için bir uygulama geliştirdi.

Bu dönem ayrıca önemli MDC aktivitesi gördü. ANSI standardının MUMPS (X11.1-1984) için ikinci revizyonu 15 Kasım 1984'te onaylandı.

1990'lar

  • 11 Kasım 1990'da ANSI standardının (X11.1-1990) üçüncü revizyonu onaylandı.
  • 1992'de aynı standart, ISO standardı 11756-1992 olarak da kabul edildi . Kullanımı M dili için alternatif bir isim olarak aynı zamanda etrafında onaylandı.
  • 8 Aralık 1995'te, standardın dördüncü revizyonu ( X11.1-1995 ), ANSI tarafından ve 1999'da ISO tarafından ISO 11756:1999 olarak onaylandı ve bu da ANSI tarafından yayınlandı . MDC, 1998'de standardın daha ileri bir revizyonunu tamamlamıştır, ancak bu, onay için ANSI'ye sunulmamıştır.
  • InterSystems'ın Open M for Windows/NT ve Open M for Alpha/OSF ve Alpha/VMS (64-bit Alpha işlemci için ilk 64-bit uygulamaları) piyasaya sürüldü.
  • 1997'de InterSystems'ın Caché 3.0'ına Unicode desteği eklendi.

2000'ler

  • 2000 yılına gelindiğinde, ara yazılım satıcısı InterSystems, diğer birçok satıcıyı satın alarak MUMPS pazarında baskın oyuncu haline geldi. Başlangıçta, 1990'ların başında DataTree Inc.'i satın aldılar. Ve 30 Aralık 1995'te InterSystems, DEC'den DSM ürün hattını satın aldı. InterSystems, bu ürünleri tek bir ürün hattında birleştirdi ve OpenM olarak çeşitli donanım platformlarında markalaştırdı . 1997'de InterSystems, Cache adlı yeni bir ürün piyasaya sürdü . Bu, ISM ürünlerine dayanıyordu, ancak diğer uygulamalardan da etkileniyordu. Micronetics Design Corporation varlıkları da 21 Haziran 1998'de InterSystems tarafından satın alındı. InterSystems, çeşitli işletim sistemleri için uygulamalar yazan MUMPS geliştiricilerine Cache satan baskın MUMPS satıcısı olmaya devam ediyor.
  • Greystone Technology Corporation'ın G.M uygulaması, 1990'ların ortalarında Sanchez Computer Associates'e (şimdi FIS'in bir parçası ) satıldı . 7 Kasım 2000'de Sanchez, GPL lisansı altında Linux için G.M'yi kullanıma sundu ve 28 Ekim 2005'te OpenVMS için G.M ve Tru64 UNIX de AGPL lisansı altında kullanıma sunuldu. GT.M , geleneksel bir lisans altında diğer UNIX platformlarında mevcut olmaya devam ediyor .
  • 2000 yılında, Ray Newman ve diğerleri, DSM-11'e benzer bir MUMPS uygulaması (başlangıçta FreeBSD'de) MUMPS V1'i yayınladı. MUMPS V1, o zamandan beri Linux , Mac OS X ve Windows'a (cygwin kullanılarak) taşındı . Başlangıçta yalnızca x86 CPU için, MUMPS V1 şimdi Raspberry Pi'ye taşındı.
  • Nisan 2002'de piyasaya sürülen en yeni MUMPS uygulaması , Real Software Company of Rugby, İngiltere'den M21 adlı bir MSM türevidir .
  • Bazı araştırma projeleri de dahil olmak üzere, MUMPS'nin birkaç açık kaynak uygulaması da vardır. Bunlardan en dikkate değer olanı , Dr. Kevin O'Kane'in (Profesör Fahri Profesör, Kuzey Iowa Üniversitesi ) yazdığı Mumps/II ve öğrencilerin projesidir. Dr. O'Kane ayrıca yorumlayıcıyı Mac OS X'e taşıdı.
  • MUMPS dilinin orijinal yaratıcılarından biri olan Neil Pappalardo, MEDITECH adlı bir şirket kurdu . Yeni dili MIIS (ve daha sonra MAGIC adlı başka bir dili) olarak adlandırarak MUMPS dilini genişlettiler ve geliştirdiler. InterSystems'in aksine, MEDITECH artık ara katman yazılımı satmamaktadır, bu nedenle MIIS ve MAGIC artık MEDITECH'te yalnızca dahili olarak kullanılmaktadır.
  • 6 Ocak 2005'te ve daha sonra 25 Haziran 2010'da ISO, MUMPS ile ilgili standartlarını yeniden onayladı: ISO/IEC 11756:1999, dil standardı , ISO/IEC 15851:1999, Open MUMPS Interconnect ve ISO/IEC 15852:1999 , MUMPS Pencereleme Uygulama Programcıları Arayüzü .

MUMPS uygulamalarının mevcut kullanıcıları

Federal sağlık bilgi sistemleri

ABD Gazi İşleri Bakanlığı (eski adıyla Gaziler İdaresi), MUMPS dilini en erken benimseyenlerden biriydi. Geliştirme çalışmaları (ve müteakip ücretsiz MUMPS uygulama kod tabanına katkıları), dünya çapında birçok tıbbi kullanıcı üzerinde bir etki yarattı. 1995 yılında, Gazi İşleri'nin hasta Kabul/Takip/Tahliye sistemi, Merkezi Olmayan Hastane Bilgisayar Programı (DHCP), Tıpta Bilgi Teknolojisinin en iyi kullanımı için Computerworld Smithsonian Ödülü'nü aldı. Temmuz 2006'da, Gazi İşleri Bakanlığı (VA) / Gaziler Sağlık İdaresi (VHA) Amerikan Hükümeti Ödülü Innovations alıcısı Kül Enstitüsü tarafından sunulan oldu Hükümeti, John F. Kennedy School at Harvard Üniversitesi'nden onun uzatılması için Gaziler Sağlık Bilgi Sistemleri ve Teknoloji Mimarisi ( VistA ) içine DHCP . Amerika Birleşik Devletleri'ndeki neredeyse tüm VA hastane sistemi, Hindistan Sağlık Hizmeti ve Savunma Bakanlığı CHCS hastane sisteminin büyük bölümleri, klinik veri takibi için MUMPS veritabanlarını kullanır.

Ticari sağlık bilgi sistemleri

MUMPS kullanan diğer sağlık bilişimi şirketleri şunları içerir:

Referans laboratuvarları

DASA, Quest Diagnostics ve Dynacare gibi birçok referans laboratuvarı, Antrim Corporation kodu tarafından yazılan veya bu kodu temel alan MUMPS yazılımını kullanır. Antrim, 2001 yılında Misys Healthcare (şimdiki Sunquest Information Systems ) tarafından satın alındı .

Çevrimiçi bankacılık ve ticaret sistemleri

MUMPS, finansal uygulamalarda da yaygın olarak kullanılmaktadır. MUMPS, finans sektöründe erken bir takip kazandı ve birçok banka ve kredi birliğinde kullanılmaktadır. Bu tarafından kullanılan TD Ameritrade yanısıra tarafından İngiltere Bankası ve Barclays Bank .

Mevcut uygulamalar

2005 yılından bu yana, MUMPS'ın en popüler uygulamaları, Fidelity National Information Services'tan Greystone Technology MUMPS (GTM) ve Intersystems Corporation'dan Caché olmuştur. Avrupa Uzay Ajansı 13 Mayıs 2010'da Gaia görevini desteklemek için InterSystems Caché veritabanını kullanacağını duyurdu . Bu görev, Samanyolu'nu benzeri görülmemiş bir hassasiyetle haritalamayı amaçlıyor . InterSystems, Cache'yi Iris lehine aşamalı olarak kullanımdan kaldırma sürecindedir.

Diğer mevcut uygulamalar şunları içerir:

  • M21
  • YottaDB
  • miniM
  • Referans Standardı M
  • özgürM

Temel dil özelliklerinin özeti

ANSI X11.1-1995, dilin eksiksiz, resmi bir tanımını verir; bu standardın açıklamalı bir versiyonu çevrimiçi olarak mevcuttur.

Veri türleri : Bağlamın gerektirdiği şekilde dize, tamsayı veya kayan nokta veri türlerine örtük olarak zorlanan bir evrensel veri türü vardır .

Boolean (denilen truthvalues Kabakulak cinsinden): o zaman o true olarak yorumlanır, bir sıfırdan farklı bir değer ise In IF komutları ve koşulları gibi değerlendirilen ifadeler vardır diğer sözdizimi, herhangi bir dize değeri, sayısal bir değer olarak saptanır. a<ba, b'den küçükse 1, aksi takdirde 0 verir.

Beyannameler : Yok. Tüm değişkenler, ilk kez bir değer atandığında dinamik olarak oluşturulur.

Çizgiler : C veya Pascal'da kalıplanmış dillerdeki durumlarından farklı olarak önemli sözdizimsel varlıklardır. Satır başına birden çok ifadeye izin verilir ve yaygındır. Herhangi bir IF, ELSE ve FOR komutunun kapsamı "geçerli satırın geri kalanı"dır.

Büyük/küçük harf duyarlılığı : Komutlar ve içsel işlevler büyük/küçük harfe duyarsızdır. Buna karşılık, değişken adları ve etiketleri büyük/küçük harfe duyarlıdır. Büyük ve küçük harf ve az sayıda yaygın olarak takip edilen kurallar için özel bir anlam yoktur. Yüzde işareti (%), değişkenlerin ve etiketlerin ilk karakteri olarak yasaldır.

Sonkoşullar : hemen hemen her komutun yürütülmesi, iki nokta üst üste ve bir doğruluk değeri ifadesi ile takip edilerek kontrol edilebilir. SET:N<10 A="FOO" N, 10'dan küçükse A'yı "FOO" olarak ayarlar; DO:N>100 PRINTERR,N 100'den büyükse PRINTERR gerçekleştirir. Bu yapı, kapsamı tam satırdan küçük olan bir koşul sağlar.

Kısaltma : Neredeyse tüm komutları ve yerel işlevleri bir, iki veya üç karakterle kısaltabilirsiniz.

Ayrılmış kelimeler : Yok. MUMPS, kaynak kodu bağlama göre yorumladığından, ayrılmış sözcüklere gerek yoktur. Dil komutlarının adlarını değişken olarak kullanabilirsiniz, bu nedenle aşağıdaki tamamen yasal MUMPS kodudur:

GREPTHIS()
       NEW SET,NEW,THEN,IF,KILL,QUIT SET IF="KILL",SET="11",KILL="l1",QUIT="RETURN",THEN="KILL"
       IF IF=THEN DO THEN
       QUIT:$QUIT QUIT QUIT ; (quit)
THEN  IF IF,SET&KILL SET SET=SET+KILL QUIT

Yukarıdaki örnekten türetilen bu kısa örnekte gösterildiği gibi, sözleşmeli operatör sözdizimi kullanılarak MUMPS daha karmaşık hale getirilebilir:

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

Diziler : dinamik olarak oluşturulur, B-ağaçları olarak depolanır , seyrektir (yani eksik düğümler için neredeyse hiç boşluk kullanmaz), herhangi bir sayıda alt simge kullanabilir ve alt simgeler dizeler veya sayısal olabilir (kayan nokta dahil). Diziler her zaman otomatik olarak sıralı düzende saklanır, bu nedenle veritabanını sıralamak, paketlemek, yeniden sıralamak veya başka bir şekilde yeniden düzenlemek için hiçbir zaman yoktur. $DATA, $ORDER, $NEXT(kullanımdan kaldırıldı) ve $QUERY işlevleri gibi yerleşik işlevler, diskte veya bellekte temel dizi yapısının verimli bir şekilde incelenmesini ve geçişini sağlar.

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

Yerel diziler : şapka ile başlamayan değişken adları (yani "^"), işlem tarafından bellekte saklanır, oluşturma işlemine özeldir ve oluşturma işlemi sona erdiğinde sona erer. Kullanılabilir depolama, uygulamaya bağlıdır. Bölümleri kullanan uygulamalar için, bölüm boyutuyla sınırlıdır (küçük bir bölüm 32K olabilir). Diğer uygulamalar için birkaç megabayt olabilir.

Genel diziler : ^abc, ^def. Bunlar diskte depolanır, tüm işlemler tarafından kullanılabilir ve oluşturma işlemi sona erdiğinde kalıcıdır. Çok büyük küreseller (örneğin, yüzlerce gigabayt) çoğu uygulamada pratik ve verimlidir. Bu, MUMPS'ın ana "veritabanı" mekanizmasıdır. Dosyaları oluşturmak, yazmak ve okumak için işletim sistemini çağırmak yerine kullanılır.

Dolaylılık : birçok bağlamda @VBLkullanılabilir ve VBL'nin içeriğini başka bir MUMPS deyimiyle etkili bir şekilde değiştirir. SET XYZ="ABC" SET @XYZ=123ABC değişkenini 123'e ayarlar SET SUBROU="REPORT" DO @SUBROU. REPORT adlı alt yordamı gerçekleştirir. Bu ikame, diğer dillerdeki "işaretçilerin" operasyonel eşdeğerinin yanı sıra tembel değerlendirme ve geç bağlamaya da izin verir .

Parça işlevi : Bu, değişkenleri kullanıcı tarafından belirlenen bir ayırıcı dize (bazen "sınırlayıcı" olarak adlandırılır) tarafından yönlendirilen bölümlere ayrılmış parçalara ayırır. Bilenler awk bu tanıdık bulacaksınız. $PIECE(STRINGVAR,"^",3)"STRINGVAR'ın şapkayla ayrılmış üçüncü parçası" anlamına gelir. Parça işlevi aynı zamanda bir atama (SET komutu) hedefi olarak da görünebilir.

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

Sonrasında

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

SET $P(X,"@",1)="office" X'in "office@world.std.com" olmasına neden olur ($P'nin $PIECE ile eşdeğer olduğunu ve bu şekilde yazılabileceğini unutmayın).

Sıra işlevi : Bu işlev, girdisini bir yapı olarak ele alır ve son alt simge dışında aynı yapıya sahip olan bir sonraki dizini bulur. Girdi olarak verilenden sonra sıralanan değeri döndürür. (Bu, dizi başvurusunu bir değerin adresi yerine içerik adreslenebilir bir veri olarak ele alır.)

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

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

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

Burada, bağımsız değişkensiz For , sonlandırıcı bir Quit tarafından durdurulana kadar tekrar eder . Bu satır, i'nin art arda 6, 10 ve 15 olduğu bir i ve şeyler(i) tablosu yazdırır.

Veritabanını yinelemek için, Sıra işlevi kullanılacak bir sonraki anahtarı döndürür.

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

Çoklu Kullanıcı/Çoklu Görev/Çoklu İşlemci : MUMPS, temel işletim sistemi desteklemediğinde bile (örneğin, MS-DOS) birden çok eşzamanlı kullanıcıyı ve işlemi destekler. Ek olarak, bir değişkende ( 'de olduğu gibi SET ^|"DENVER"|A(1000)="Foo") bir makine adı belirterek , uzak makinelerdeki verilere erişmenizi sağlayan bir değişken için ortam belirtme yeteneği vardır .

eleştiri

MUMPS sözdiziminin bazı yönleri, dilin farklı sürümleri arasında farklılık gösterse de, karışıklığa neden olabilecek daha modern dillerinkinden büyük ölçüde farklıdır. Bazı sürümlerde, ifadelerde boşluk bırakılmasına izin verilmez, çünkü bir ifadeyi bitirir: 2 + 3is bir hatadır ve yazılması gerekir 2+3. Tüm operatörler aynı önceliğe sahiptir ve sol ilişkiseldir ( 2+3*1050 olarak değerlendirilir). "Küçük veya eşit" ve "büyük veya eşittir" operatörleri '>ve '<(yani, boole olumsuzlama operatörü 'artı katı bir karşılaştırma operatörü), ancak bazı sürümler daha standart <=ve >=sırasıyla kullanımına izin verir . Noktalar ( .) bir DO bloğundaki satırları girintilemek için boşluk yerine kullanılır. ELSE komutu, yerleşik sistem değişkenindeki değeri inceleyerek çalıştığı için karşılık gelen bir IF'ye ihtiyaç duymaz $test.

MUMPS kapsam belirleme kuralları, diğer modern dillerden daha serbesttir . Bildirilen yerel değişkenler yığın kullanılarak kapsamlandırılır. Bir rutin, normal olarak, çağrı yığınında altındaki rutinlerin tüm bildirilmiş yerellerini görebilir ve rutinler, çağıran, manuel olarak yeni bir yığın düzeyi ( do) oluşturmadıkça ve istedikleri değişkenlerin her birine takma ad vermedikçe, çağırdıkları rutinlerin bildirilen yerellerini değiştirmesini engelleyemez. korumak için ( . new x,y) herhangi bir çocuk rutini çağırmadan önce. Buna karşılık, bildirilmemiş değişkenler (bildirim yerine bunları kullanarak oluşturulan değişkenler) aynı süreçte çalışan tüm rutinler için kapsamdadır ve program çıkana kadar kapsamda kalır.

MUMPS veritabanı referansları, yalnızca şapka önekindeki dahili değişken referanslarından farklı olduğundan, veritabanını istemeden düzenlemek, hatta bir veritabanı "tablosunu" silmek bile tehlikeli derecede kolaydır.

"MUMPS" ve "M" isimlendirme tartışması

Aşağıdaki pozisyonların tümü, çeşitli zamanlarda bilgili kişiler tarafından desteklenebilir ve desteklenmiştir:

  • Dilin adı 1993 yılında M Technology Association tarafından kabul edildiğinde M oldu.
  • İsim, 8 Aralık 1995'te ANSI X11.1-1995'in onayı ile M oldu.
  • Hem M hem de MUMPS resmi olarak kabul edilen isimlerdir.
  • M, dil için yalnızca bir "alternatif ad" veya "takma addır" ve MUMPS hala resmi addır.

Tartışmaların bir kısmı, CEO'su MUMPS adından hoşlanmayan ve bunun ciddi bir pazarlama engeli oluşturduğunu düşünen InterSystems adlı bir ticari çıkar adına güçlü M savunuculuğuna yanıt olarak ortaya çıktı. Böylece, M'yi bir dereceye kadar tercih etmek, InterSystems ile uyum olarak tanımlandı. Anlaşmazlık, dilin "resmi" adını kimin belirlediği konusunda kuruluşlar (M Teknoloji Derneği, MUMPS Geliştirme Komitesi, ANSI ve ISO Standartları Komiteleri) arasındaki rekabeti de yansıtıyordu. Bazı yazarlar, dile M[UMPS] olarak atıfta bulunarak sorunu çözmeye çalıştılar , köşeli parantezler isteğe bağlı sözdizimi öğeleri için geleneksel gösterimdir. Önde gelen bir otorite ve açık kaynaklı bir MUMPS uygulamasının yazarı olan Profesör Kevin O'Kane, yalnızca 'MUMPS' kullanır.

En son standart (ISO/IEC 11756:1999, 25 Haziran 2010'da yeniden onaylanmıştır), hem M hem de MUMPS'tan resmi olarak kabul edilen isimler olarak bahsetmektedir.

Ticari marka durumu

Massachusetts General Hospital , 28 Kasım 1971'de USPTO ile bir ticari marka olarak "MUMPS" tescil ettirdi ve 16 Kasım 1992'de yeniledi, ancak 30 Ağustos 2003'te sona ermesine izin verdi.

Seçim Karşılaştırması

MUMPS, Pick işletim sistemiyle karşılaştırmaya davet ediyor . Benzerlikler şunları içerir:

  • Her iki sistem de büyük, seyrek, tipsiz, dizi dizinli dizilerin verimli bir şekilde uygulanması üzerine kurulmuştur;
  • Her ikisi de dili ve işletim sistemini tarihsel olarak birleştirdi;
  • Her ikisinin de benzer bir uygulanabilirlik alanı vardır.
  • Her iki ortamın programlama dillerinde, veritabanı kayıtlarını okuma, yazma, oluşturma ve silme işlemleri, değişken referanslarıyla aynı sözdizimini kullanır.

Ayrıca bakınız

Referanslar

daha fazla okuma

  • Walters, Richard (1989). " Kababakların ABC'si. 1989: Butterworth-Heinemann, ISBN  1-55558-017-3 .
  • Walters, Richard (1997). M Programlama: Kapsamlı Bir Kılavuz. Dijital Basın. ISBN  1-55558-167-6 .
  • Lewkowicz, John. Tam MUMPS: MUMPS Programlama Dili için Giriş ve Başvuru Kılavuzu. ISBN  0-13-162125-4
  • Kirsten, Wolfgang, et al. (2003) Cache İlişki Sonrası Veritabanını Kullanarak Nesneye Dayalı Uygulama Geliştirme ISBN  3-540-00960-4
  • Martínez de Carvajal Hedrich, Ernesto (1993). "El Lenguaje Kabakulak". Kabakulak'ı tamamlayın. ISBN  84-477-0125-5 . Distribuido exclusivamente por su yazar (ecarvajal@hedrich.es)
  • O'Kane, KC; Bilgi alma yazılımını uygulamak için bir dil, Çevrimiçi İnceleme, Cilt 16, Sayı 3, sayfa 127–137 (1992).
  • O'Kane, KC; ve McColligan, EE, Mumps intranet hasta kaydının bir vaka çalışması, Journal of the Healthcare Information and Management Systems Society, Cilt 11, Sayı 3, sayfa 81-95 (1997).
  • O'Kane, KC; ve McColligan, EE, Web Tabanlı Kabakulak Sanal Makinesi, Proceedings of the American Medical Informatics Association 1997
  • O'Kane, KC, Mumps Programlama Dili, Createspace, ISBN  1-4382-4338-3 , 120 sayfa (2010).

Dış bağlantılar