MUMPS还活着吗?[关闭]


11

在我的第一个工作场所中,我们在PDP 11克隆(TPA 440)上使用了Digital Standard MUMPS,然后在90年代初左右,我们切换到了运行在HP-UX 9惠普机器上的Micronetics Standard MUMPS。

MUMPS还在吗?有没有人使用它?如果是,请写一些有关它的信息:您是否在字符模式下使用它,它是否充当Web服务器?等(我的意思也是Caché。)

如果您曾经使用它,您对此有什么感觉?你喜欢吗?


1
我不认为任何人都喜欢的东西,看起来像这样。至少perl是富有表现力的。
imgx64 2010年

13
“ MUMPS还活着吗?” -是的,但是所有开发人员都在自杀。
史蒂文·埃弗斯

@ imgx64看起来可怕的上帝!
TheLQ 2010年

您不必使用简短的命令形式“ DHSY =%YK%H,%YQ”,您应该编写完整的命令名称(并使用更长的标签/变量名称):“ Do HourCount Set Year =%YearParam Kill%HourParam ,%YearParam退出”。另外,在使用短命令格式多年之后,我编写了一个20行的程序,其中使用了长格式命令和长命名变量。我的同事们被告知:“好吧,这是一个很好的玩笑,但不要再这样做了”,这比短命令难读十倍。
ern0

Answers:


11

Intersystems出售MUMPS衍生产品:http : //www.intersystems.com

MUMPS中一些最有趣的人可能在这里:http ://www.outoftheslipstream.com/

几年前,我开始写有关Cache(MUMPS衍生产品)的博客:http ://cachetastic.blogspot.com/ (但后来换了工作)

离开这个世界已经有两年了,我的想法是NoSQL运动可能是MUMPS发生的最好和最糟糕的事情。最终,它有可能为自己辩护并杀死它。因为某个时候,有人将几乎完全重塑MUMPS的数据库和查询结构,但与MUMPS传统没有任何联系。然后人们会对这个新的存储系统赞不绝口。但是没有人会再次选择MUMPS衍生工具。

例如,一两个月前,我正在与一位同事讨论使用Redis在我们的Django应用程序中缓存某些内容的查询。我们有大量的记录,这些记录由三个键中的三个键来解决,因此需要快速获取与其中一个或两个键匹配的子集(但在不同时间具有不同的组合)。

这是MUMPS早餐吃的东西。但是我们发现很难挤入redis的键值对结构。即使有字典。(memcached等也是如此。)我一生中第一次发现自己实际上后悔自己无法在Cache ObjectScript中编写此模块。

有关Cache的其他一些想法:

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

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


9

有趣的明星应该提到Redis。实际上,我已经使用Mumps(包括Cache和GT.M)对Redis的几乎所有行为进行了反向工程。模拟其简单和基本的键/值对结构和API简直是小菜一碟,而我测试过的Redis客户端甚至都不知道他们是在与Mumps数据库对话,而不是在与正确的Redis对话。

但是,就像interstar所说的那样,Mumps数据库在数据结构方面具有更多的功能(实际上,Mumps数据库可以轻松模拟所有4种NoSQL数据库类型:键/值,表格,文档和图形,还可以进行建模关系数据库和对象数据库-如果需要的话,一次完成),并在内存和磁盘之间进行适当的整理和自动平衡。与已经使用了几年的NoSQL数据库不同,Mumps技术已经成熟,经过尝试,经过测试,得到了良好的支持,并且具有可用的分析和管理软件包,并且具有许多NoSQL数据库(例如CouchDB)将要牺牲的性能。 。

那么,为什么不让Cache和GT.M的供应商大力推动NoSQL市场,而不是像您所说的那样让别人重新发明轮子呢?

关于旧的关于语言的争吵以及维基百科站点上古老而过时的示例的使用:

a)如果您愿意,可以选择您的宠物性感现代语言访问腮腺炎数据库

b)这种编程风格是随方舟而生的,其编写之时就是为了从处理能力比手表中的芯片要低的PDP计算机中获得惊人的性能。实际上,现代Mumps编码的样式与Python非常相似,并且可以保持简洁,可读性和可维护性。

c)像任何语言一样,您可以找到很好的例子,而且很糟糕。不要假设Mumps编码必须像Wikipedia网站上的示例一样不透明且过时。

..和梅森,我的结论是,也许您对数据库的了解不如您想象的那样!:-)如果您一生中曾接受过任何形式的医疗,则您的信息将一直通过众多的Mumps系统进行检查,包括管理请求测试的系统。您日报的内容可能是由Mumps系统管理的,甚至您在网上订购的披萨也可能是通过Mumps系统管理的。您可能已经运往国外的物品的物流可能是通过Mumps系统管理的,如果您碰巧是需要一些高档金属或陶瓷的研究人员,则可能会通过Mumps系统订购它们。

您很少听说实际上是一个令人惊讶的普遍数据库的原因之一是,供应商通常直接与应用程序/系统开发人员打交道,而不是与最终用户打交道,因此数据库通常是在后台嵌入产品中的。


1
我认为语言还不错。我没有尝试过,但是在现代硬件上必须很快。MSM的最新版本支持结构化编程:局部变量(新命令),函数参数,多行的内联子例程。我们对这些功能非常满意,并创建了许多实用程序:列表查看器,菜单等。最后,我们用完了堆栈,因此我们要求Micronetics增大堆栈大小。他们为我们编译了一个32深度堆栈自定义版本的MSM,而不是默认的16深度堆栈。
ern0 2010年

1
稍微回退一下Rob,虽然我认为MUMPS数据库值得关注,但我想知道是否只是从另一种语言访问的数据库仍可以称为MUMPS。选择MUMPS的任何人都希望能够运行遗留代码。因此,无论是否喜欢,MUMPS都等于db +语言。
际星际2010年

2
正如我在其他地方提到的那样,该语言的真正灾难/破坏因素是动态范围。我认为,今天没有任何工程师能够证明选择一种语言而没有将局部变量保持在局部状态的理由。因此,请务必将MUMPS db用作黑匣子组件,但是该语言无法挽救,应该停止使用。

1
流行性腮腺炎具有完整的变量词法作用域-它已经做了很多年,但是很多人似乎没有注意到!流行性腮腺炎代码可以像任何其他语言一样干净,表现良好。实际上,在变量范围方面,Mumps与Java有很多相似之处。例如,Mumps中的New实际上与Javascript中的var相同。但是,默认情况下,变量在两种语言中都具有全局范围。
罗布2010年

1
抢。我当然没有注意到Cache中变量的词汇范围。那我在cachetastic.blogspot.com/2008/07/…中的示例呢?该关键字使用“ new”关键字,但绝对不是您想要的作用域规则。f中的x和g中的x不应是相同的变量,而g必须显式隐藏堆栈中恰好存在的所有x。转换成javascript的同一件事,正确地将COS的“ new”替换为“ var”,将f中的x定义为未定义。
星际

6

MUMPS非常活跃。它一直是最值得信赖的系统之一。编程人员通常很少,而且正常运行时间令人印象深刻。MUMPS似乎很笨拙,但可能只需很少的按键就可以编写非常清晰和功能强大的代码,而MUMPS支持的数据结构使其在各种不同的体系结构中都非常强大和可移植。所有弗吉尼亚州的医院都在使用MUMPS,在大多数情况下,平均修复时间非常快。可以从Source Forge轻松下载用MUMPS编写的VistA系统,并且提供了VistA和MUMPS的多模式性质(可以通过多种方式访问​​数据库,包括滚动和滚动,瘦客户端,浏览器或RPC或其他程序接口)。通过许多研究它的人。MUMPS是一种简单的语言,具有很少的命令和一种数据类型。它很容易学习,因为它是一种解释语言,可以使堆栈和符号表保持完整,以准确查看应用程序停止调试时的情况。VistA已用于运营国防部医院(综合医疗体系,CHCS)以及印度卫生局(IHS RPMS),并且曾经由美国公共卫生局使用。它为该国节省了数百万美元的运营成本。MUMPS几乎可以在任何设备上运行。它可以轻松地对几乎任何其他数据库模型进行建模,并提供令人惊讶的快速访问数据库。MUMPS模型实际上可以在系统上有更多用户时获得更快的性能(在某些情况下,由于MUMPS的缓存方面,查找数据块所需的指针块已经在内存中,并且不需要再次获取它们,顺便说一句,MUMPS的指针开销仅运行大约2%,因此大多数数据库是实际的用户数据)。MUMPS最初被编写为在2K机器上运行。新技术的冲击只是将MUMPS环境的全部功能扩展到了一个领域,整个医院现在都在低成本的商品服务器上运行。早期,MUMPS脱离了硬件,并从该决定中受益匪浅。我们不用担心字的大小或精度,或多少或多少。数据库的绑定较晚,并且会随着特定记录的需要而增长。任何数据库中的记录都不会超过所需的大小。可以根据记录的一部分或整个记录来扩展或修剪数据库。MUMPS还在吗?不用在PDP-11 / 34上获得8个用户,而是可以在办公桌下面的台式PC上获得数百个用户。它被用于银行,欧洲证券交易所,旅游业(酒店和预订代理商),一些汽车配件厂以及大多数成功的医院(商业,私人或社区)以某种形式运行MUMPS。弗吉尼亚州目前有超过30亿的患者超过30年的病史。除了波士顿的贝丝以色列/女执事医院在其自己的MUMPS系统中拥有超过35年的治疗成果外,这本身就是其他医疗保健系统无法实现的。完全正确?不用在PDP-11 / 34上获得8个用户,而是可以在办公桌下面的台式PC上获得数百个用户。它被用于银行,欧洲证券交易所,旅游业(酒店和预订代理商),一些汽车配件厂以及大多数成功的医院(商业,私人或社区)以某种形式运行MUMPS。弗吉尼亚州目前有超过30亿的患者超过30年的病史。除了波士顿的贝丝以色列/女执事医院在其自己的MUMPS系统中拥有超过35年的治疗成果外,这本身就是其他医疗保健系统无法实现的。完全正确?不用在PDP-11 / 34上获得8个用户,而是可以在办公桌下面的台式PC上获得数百个用户。它被用于银行,欧洲证券交易所,旅游业(酒店和预订代理商),一些汽车配件公司以及大多数成功的医院(商业,私人或社区)以某种形式运行MUMPS。弗吉尼亚州目前有超过30亿的患者超过30年的病史。除了波士顿的贝丝以色列/女执事医院在其自己的MUMPS系统中拥有超过35年的治疗成果外,这本身就是其他医疗保健系统无法实现的。旅游行业(酒店和预订代理商),一些汽车配件公司以及大多数成功的医院(商业,私人或社区)都以某种形式运行MUMPS。弗吉尼亚州目前有超过30亿的患者超过30年的病史。除了波士顿的贝丝以色列/女执事医院在其自己的MUMPS系统中拥有超过35年的治疗成果外,这本身就是其他医疗保健系统无法实现的。旅游行业(酒店和预订代理商),一些汽车配件公司以及大多数成功的医院(商业,私人或社区)都以某种形式运行MUMPS。弗吉尼亚州目前有超过30亿的患者超过30年的病史。除了波士顿的贝丝以色列/女执事医院在其自己的MUMPS系统中拥有超过35年的治疗成果外,这本身就是其他医疗保健系统无法实现的。





3

我也是g.tm的新手,但我可以回答这个问题:

是的,腮腺炎还活着。仍然有人在努力。这里有些例子 :

http://georgejames.com/,谁在gt.m中编写了Openstreetmap api服务器,现在我正在学习。

现在也有适用于g.tm的现代企业网络工具 http://gradvs1.mgateway.com/main/

最后一个证明它还存在的证据是它已经移植到最新的GNU / linux和云平台上。

麦克风




1

好吧,除了《每日WTF》之外,我从未听说过有人以任何方式或出于任何原因使用它。从中可以得出什么结论取决于读者。;)


1

Interstar的示例正确编写为使用功能:

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

g()  
  new x  
  set x = 5  
  quit x  

do f  

f是用do调用的过程。在这种情况下,如果它没有形式参数,则不需要()。一个过程只是退出而不会返回任何东西。

g()另一方面是一种功能。新产品x对于正确确定范围至关重要x。通过在函数名称之前添加函数,$$然后在QUIT后面添加返回值来调用函数。函数必须声明一个正式的参数列表,即使它在这里是空的也是如此。实际上,您可以这样编写以下实例g()

g()  
 quit 5

现在一切都将正常运行。由于某些原因,许多Mumps开发人员似乎并未注意到或理解功能的存在,也不了解它们与过程之间的区别。我认为这就是为什么刚接触腮腺炎的人大惊小怪的原因之一(不足为奇)-那里有很多可怕的代码。

如上所示,它们都是非常干净且受人尊敬的东西。但是,由程序员来明确在函数和过程中定义变量的范围。忽略它们,它们将是全球性的并且无处不在。诀窍是在隔离运行时构建和测试每个功能,并确保它们仅依赖于形式参数,并且仅依赖它们的形式参数,并且在完成后不留下任何东西。


现在,您看到Mumps代码不使用新命令并且依赖于全局变量的原因之一(因此,如果您使用New变量,则会中断)是因为它是在过去一次写在函数和词汇范围已添加到该语言。不幸的是,那里有很多遗留代码,是的,它最终成为维护的噩梦,但这对您来说是遗留的。另一方面,如果您从头开始编写新的东西而无需担心任何旧的东西,那么编写干净,现代,行为良好的Mumps代码很有可能。
罗布

看您原始的示例,过程f中的新值x会自动提供给g-这就是腮腺炎的方法。同样,习惯于C语法语言的人发现Javascript的作用域仅应用于函数,而不应用于例如函数内部的循环或块时,会感到惊讶。就是这样-一旦知道了,就进行相应处理。这样的特质并没有阻止人们接受和采用Javascript。
罗布

Rob:“看看原始示例,值f在过程f中自动为g可用时,这就是Mumps的方式。” 确实!这就是说MUMPS具有动态范围而不是词法范围的意思。在词法范围的语言中,您不需要在函数g中使用“ new x”,因为程序的词法结构(即g在f的定义之外定义的事实)足以保证g和f中提到的xs是两个完全不同的变量。
星际

抢。从广义上讲,训练有素的MUMPS程序员团队从头开始编写,并仔细使用“新”来确保所有变量都是本地的,可以避免动态范围界定的麻烦。当然可以,我同意。但是,为什么我们需要铁律和数百行额外的代码行来复制其他每种现代语言免费提供给您的内容呢?另外,如果您遇到的不是该学科编写的遗留代码,以后几乎不可能放进去,因为您无法确定系统是否依赖这些非本地语言之一来传递信息。
星际

还有其他(较旧的)方法可以分隔子例程变量:系统实用程序的所有变量名称都以'%'符号开头,因此它们位于“系统名称空间”中。同样,在New中为变量命名与速度有关:如果使用显式命令将重用的变量推入堆栈,则解释器在进入例程时无需执行任何操作。另外,您可以使用不带参数的“新建”,它会隐藏所有当前变量。
ern0
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.