ممبس
ملخص للميزات الرئيسية للغة

يعمل الملخص التالي على جعل المبرمجين المعتادين على اللغات الأخرى يشعرون بماهية ممبس. وهي ليست خاصية لغوية رسمية، وقد تم محو العديد من المميزات والمؤهلات من أجل الإيجاز. وتقدم ANSI X11.1-1995 وصفا كاملا ورسميا للغة؛ وهناك نسخة مشروحة من هذه المعايرة متاحة على الإنترنت.
أنواع البيانات: هناك نوع بيانات عالمي واحد، وهو ملزم بأن يكون قاعدة بيانات من النوع المسلسل أوالمتكامل أو ذو الفاصلة العائمة وفقما يحتاج السياق إليه.
المنطقيات (وتسمى القيم الموثوق فيها في ممبس): في أوامر IF والبنيات الأخرى التي بها تعبيرات مقيمة كشروط، فإن أي قيمة مسلسلة يتم تقييمها باعتبارها قيمة عددية، وإذا لم تكون ذات قيمة صفرية فإنها تفسر عندئذ على أنها حقيقة a<b yields 1 إذا كانت أقل من b، أو صفر.
إعلانات: لا يوجد أحد. جميع المتغيرات يتم عملها بديناميكية في المرة الأولى من القيمة المحددة.
الخطوط: وهي كيانات بنيوية هامة، ولا تشبه وضعها في اللغات في C أو باسكال. ويسمح بالعديد من البيانات لكل خط وهو أمر شائع. إن نطاق أي IF، و ELSE، وأمر FOR هو "مذكر الخط الحالي".
حساسية الحال: إن الوامر والوظائف الجوهرية تتسم بكونها غير ذات حساسية الحالة. وعلى العكس من ذلك فإن الأسماء والتصانيف المتغيرة تكون ذات حساسية حال. وليس هناك معنى خاص للحالة العليا مقارنة بالدنيا وهناك عدد قليل من الاتفاقات المتبعة. إن علامة النسبة (%) تعتبر قانونية باعتبارها الحرف الأول للمتغيرات والتصانيف.
ما بعد الاشتراطات: إن تنفيذ معظم جميع الأوامر يمكن التحكم فيه بمتابعته بنقطتين وتعبيرا بالقيمة الموثوق فيها: وتضع SET:N<10 A="FOO" الرمز A لـ "FOO" إذا كانت N أقل من 10؛ وتؤدي DO:N>100 PRINTERR وظيفة PRINTERR إذا كانت N أكبر من 100. ويقدم هذا البناء حالة اشتراطية يكون نطاقها أقل من الخط الكامل.
الاختصار: يمكنك اختصار جميع الأوامر تقريبا والوظائف الأصيلة إلى حرف واحد أو اثنين أو ثلاثة.
الكلمات المحجوزة: لا توجد. لأن ممبس تفسر الشيفرة المصدرية من خلال السياق، فإنه ليست هناك حاجة لكلمات محجوزة. ويمكنك استخدام أسماء أوامر اللغات كمتغيرات. وليس هناك مسابقة مثل مسابقة كود سي الدولية the International Obfuscated C Code Contestلممبس، بالرغم من إمكانية الأمثلة كما يلي، وهي قانونية تماما ومتعلقة بشفرة ممبس:
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
ويمكن جعل ممبس أكثر غموضا باستخدام بنية المشغل المتعاقد، كما يتضح في هذا المثال المشتق من المثال السابق:
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
المصفوفات: وتصنع ديناميكيا، وتخزن على أنها بي-تريز، ويتم تحليلها (على سبيل المثال لا يتم في الغالب استخدام فراغ للعقد المفقودة)، ويمكنها استخدام أي رقم من المسجلات، ويمكن أن تكون هذه المسجلات سلاسل أو رقمية (بما فيها النقطة العائمة). وتكون المصفوفات دائما مخزنة آليا في نظام مصنف، لذل لا توجد أية فرصة للتصنيف والتعبئة أو إعادة الطلب أو إعادة تنظيم قاعدة البيانات. إن الوظائف الداخلية مثل $DATA, $ORDER, $NEXT, $QUERY تعتبر وظائف تقدم تناولا كافيا لبنية المصفوفة الأساسية أو القرص أو الذاكرة.
for i=10000:1:12345 set sqtable(i)=i*i
set address("Smith","Daniel")="dpbsmith@world.std.com"
المصفوفات المحلية: إن الأسماء المتغيرة لا تبدأ بقبعة (مثل "^") يتم تخزينها في الذاكرة من خلال العملية، هي أسماء خاصة بعملية التكوين، وتنتهي صلاحيتها عندما تنتهي عملية التكوين. إن التخزين المتاح يعتمد على التطبيق. ومن أجل هذه التطبيقات باستخدام الأقسام، فإنها تكون محدودة بحجم القسم، (القسم الصغير A يمكن أن تكون سعته 32 ك). وبالنسبة للتطبيقات الأخرى فإنها يمكن أن تكون العديد من الميجابايت
المصفوفات العالمية: ^abc, ^def ويتم تخزينها على القرص، وتكون متاحة لجميع العمليات وتكون مستمرة عندما تنتهي عملية التكوين. إن الجلوبالز الكبيرة للغاية (على سبيل المثال مئات الجيجابايت) تكون عملية وكافية في غالبية التطبيقات. وهذه هي آلية «قاعدة بيانات» الرئيسية. وهي مستخدمة بدلا من استدعاء نظام التشغيل لتكوين الملفات وكتابتها وقراءتها.
عدم التوجيه: في العديد من السياقات يمكن استخدام @VBL كما يمكن التخصيص بفاعلية لمحتويات VBL في بيان ممبس آخر. وتضع SET XYZ="ABC" SET @XYZ=123 المتغير ABC لـ 123. ويؤدي SET SUBROU="REPORT" DO @SUBROU النظام الفرعي المعروف باسم REPORT. ويسمح مثل هذا الاستبدال بالتقييم البطئ والإلزام المتأخر وكذلك فاعلية المكافئ التشغيلي «للمؤشرات» في اللغات الأخرى.
وظيفة القطعة: تقسم هذه الوظيفة المتغيرات إلى قطع متفرقة تستدل بسلسلة المشغل المحددة للمستخدم (وتسمى أحيانا «محدد»). وسيجد الذين يعرفون awk أن ذلك أمرا معتادا لديهم. وتعني $PIECE(STRINGVAR,"^",3) أن «قطعة ثالثة من STRINGVAR». ويمكن أن تظهر وظيفة القطعة أيضا بوصفها هدف واجب (أمر SET). بعد
SET X="dpbsmith@world.std.com"
$PIECE("world.std.com",".",2) تحقق yields "std" SET $P(X,"@",1)="office" وتؤدي إلى أن تصبح Xما يلي "office@world.std.com" (لاحظ أن $P تكافئ $PIECE، ويمكن أن تكتب هكذا).
وظيفة الأمر
Set stuff(6)="xyz",stuff(10)=26,stuff(15)=""
$Order(stuff("")) yields 6, $Order(stuff(6)) yields 10, $Order(stuff(8)) yields 10, $Order(stuff(10)) yields 15, $Order(stuff(15)) yields "".
Set i="" For Set i=$O(stuff(i)) Quit:i="" Write !,i,10,stuff(i)
وهنا فإن المعطيات كانت أقل تكرارا حتى توقفها من خلال إنهاء غلق Quit. ويطبع هذا الخط جدول من i وأشياء (i) حيث تكون i هي على التوالي 6، 10، 15.
المستخدمون المتعددون/ المهام المتعدد/ المعالجات المتعددة: تدعم ممبس مستخدمين وعمليات متعددون في وقت واحد حتى عندما لا يكون نظام التشغيل القائم (E.g. MS-DOS).. إضافة إلى ذلك فإنه هناك القدرة على تخصيص البيئة لمتغير ما، مثل من خلال تخصيص اسم الآلة في المتغير (كما في SET ^|"DENVER"|A(1000)="Foo")، والذي يمكن أن يسمح لك بالولوج إلى البيانات من آلات بعيدة.
وبالنسبة للإدراج المتواصل لبقية أوامر، ومشغلو، ووظائف، والمتغيرات الخاصة لممبس، انظر هذه المصادر على الإنترنت:
MUMPS by Example، أو الكتاب (الذي نفدت نسخه) بنفس العنوان من تأليف إد دي مويل. وهناك تفصيل للكثير من بنية اللغة في هذا المصدر، مع أمثلة للاستخدام.
The Annotated MUMPS Language Standard، والذي يظهر ثورة اللغة والاختلافات بين نسخ معايرة ANSI.