الرهائن كوبول والرياضيات. الجزء 2

ننشر اليوم الجزء الثاني من ترجمة المواد المتعلقة بالرياضيات ، حول COBOL ، ولماذا لا تزال هذه اللغة حية.



الجزء الأول

نسبة تكرار مولر وكوبول


دعونا نلقي نظرة على كيفية تعامل COBOL مع علاقة تكرار مولر. إليكم برنامج COBOL الذي ينفذ علاقة التكرار التي ندرسها.

IDENTIFICATION DIVISION. PROGRAM-ID. muller. AUTHOR. Marianne Bellotti. DATA DIVISION. WORKING-STORAGE SECTION. 01 X1     PIC 9(3)V9(15)  VALUE 4.25. 01 X2     PIC 9(3)V9(15)  VALUE 4. 01 N     PIC 9(2)   VALUE 20. 01 Y     PIC 9(3)V9(15)  VALUE ZEROS. 01 I     PIC 9(2)   VALUES ZEROS. PROCEDURE DIVISION.  PERFORM N TIMES   ADD 1 TO I   DIVIDE X2 INTO 1500 GIVING Y   SUBTRACT Y FROM 815 GIVING Y   DIVIDE X1 INTO Y   MOVE X1 TO X2   SUBTRACT Y FROM 108 GIVING X1   DISPLAY I'|'X1  END-PERFORM.  STOP RUN. 

إذا كانت هذه هي المرة الأولى التي ترى فيها برنامجًا مكتوبًا في COBOL ، فلنوضح بعض الأشياء على الفور. أولاً ، إنه ما يسمى بـ "الشكل الحر" COBOL ، والذي تم تقديمه في عام 2002 من أجل تقريب COBOL من كيفية تنظيم اللغات الحديثة. تقليديًا ، يكون لرمز COBOL عرضًا ثابتًا عند وضع كيانات معينة في أعمدة معينة. قد تبدو فكرة النظر في التعليمات البرمجية في شكل بنية يتم فيها تمييز الصفوف والأعمدة غريبة ، ولكن تم تصميم بنية التعليمات البرمجية هذه لمحاكاة تنسيق بطاقة المثقبة. في أيام COBOL ، تم إنشاء البرامج بهذه الطريقة. تحتوي البطاقة المثقوبة على 80 عمودًا - بعض الأعمدة مخصصة لبيانات معينة. نفس النهج التقليدي ل COBOL.

الشيء الأكثر أهمية في هذا الرمز ، وهو الشيء الذي ربما يجذب الانتباه أكثر ، هو كيف يتم الإعلان عن المتغيرات هنا:

 01 X2     PIC 9(3)V9(15)  VALUE 4. 

يسمى الرمز 01 في بداية السطر برقم المستوى. يخبر كوبول أننا نعلن عن متغير جديد. يسمح لك COBOL بربط المتغيرات أو تجميعها (مثال تقليدي هو عنوان قد يتضمن أسماء الشارع والمدينة والبلد كمتغيرات منفصلة) ، ونتيجة لذلك ، يصبح رقم المستوى مهمًا في هذه الحالة.

X2 هو اسم المتغير - كل شيء بسيط للغاية. في النهاية ، هناك بنية تحدد القيمة الأولية للمتغير ، والتي تبدو مثل " VALUE 4. " النقطة في النهاية ليست خطأ مطبعي. هذه طريقة لإنهاء الخطوط في COBOL.

الآن نحن بحاجة فقط إلى النظر في ما هو في منتصف الخط - بناء PIC 9(3)V9(15) .

PIC قليلاً من المشغل لوصف نوع بيانات الأحرف. يمكن تخزين القيم الأبجدية الرقمية. يمكن حتى تخزين الأرقام العشرية. COBOL هي لغة ذات كتابة ثابتة صارمة ولديها ميزة غير عادية ، وهي أن معظم أنواع COBOL أكثر مرونة من الأنواع في اللغات الأخرى. بالإضافة إلى ذلك ، عند الإعلان عن المتغيرات ، يجب عليك تحديد عدد الأحرف التي يمكن أن تتكون منها. في حالتنا ، هذا هو الرقم بين قوسين. يعني إنشاء PIC 9(3) أنه يمكن للمتغير تخزين ثلاثة أحرف ، وهي أرقام (يشار إليها بالرقم 9 ).

نتيجة لذلك ، يجب قراءة الإنشاء 9(3)V9(15) على النحو التالي: "3 أرقام ، تليها علامة عشرية (v) ، متبوعة بـ 15 رقمًا آخر."

فيما يلي نتائج هذا البرنامج:

 01|004.470588235294118 02|004.644736842105272 03|004.770538243626253 04|004.855700712593068 05|004.910847499165008 06|004.945537405797454 07|004.966962615594416 08|004.980046382396752 09|004.987993122733704 10|004.993044417666328 11|005.001145954388894 12|005.107165361144283 13|007.147823677868234 14|035.069409660592417 15|090.744337001124836 16|099.490073035205414 17|099.974374743980031 18|099.998718461941870 19|099.999935923870551 20|099.999996796239314 

حدث هذا باستخدام الأرقام التي تحتوي على 15 منزلة عشرية. إذا قمنا بتغيير خصائص المتغيرات X1 و X2 و Y إلى PIC9(3)V9(25) ، فيمكننا المضي في:

 01|004.4705882352941176470588236 02|004.6447368421052631578947385 03|004.7705382436260623229462114 04|004.8557007125890736342050246 05|004.9108474990827932004556769 06|004.9455374041239167250872200 07|004.9669625817627006050563544 08|004.9800457013556312889833307 09|004.9879794484783948244551363 10|004.9927702880621195047924520 11|004.9956558915076636302013455 12|004.9973912684019537143684268 13|004.9984339443572195941803341 14|004.9990600802214771851068183 15|004.9994361021888778909361376 16|004.9996648253090127504521620 17|004.9998629291504492286728625 18|005.0011987392925953357360627 19|005.0263326115282889612747162 20|005.5253038494467588243232985 

توفر أجهزة الكمبيوتر المركزية المختلفة حدودًا عليا مختلفة لأنواع بيانات COBOL. في IBM (على الأقل - في حالتي) ، فإنه يتكون من 18 رقمًا. يحتوي MicroFocus على 38 رقمًا.

كم تكلفة الدقة؟


يهدف كل ما تحدثنا عنه للتو إلى إظهار أن COBOL يقوم بإجراء عمليات حسابية ليس أفضل من لغات البرمجة الأخرى الأكثر شيوعًا. نظرًا للقيود المفروضة على حجم أرقام النقاط الثابتة ، يمكن أن يكون COBOL أقل من اللغات التي تمنح المطور مزيدًا من التحكم في ما يحدث.

ولكن هناك ميزة واحدة. الحقيقة هي أن Python (و Java) لا يحتوي على دعم مضمن لأرقام النقاط الثابتة. وفي كوبول هذا الدعم هو.

لإجراء حسابات النقطة الثابتة في Python ، كان عليّ استيراد الوحدة Decimal . إذا كنت قد عملت مع مشروع يحتوي على مجموعة كاملة من أوامر الاستيراد ، فيجب أن تدرك أن كل أمر من هذه الأوامر له "سعر" معين. في لغات مثل Java (أي ، عادةً ما يتم اعتبار هذه اللغة من قبل أولئك الذين سيتخلصون من COBOL) يمكن أن يكون "سعر" المكتبة المناسبة أعلى بكثير . هذا ، في الواقع ، هو بالأحرى مسألة ما إذا كانت "تكلفة" استيراد المكتبات تلعب أي دور في مشروعك. بالنسبة للعديد من المبرمجين ، يعد التفكير في تأثير الأداء الذي تستورده أوامر الاستيراد هو قمة التحسين السابق لأوانه.

لكن عادةً ما يعمل مبرمجو COBOL على الأنظمة التي تحتاج إلى معالجة الملايين ، وربما مليارات العمليات في الثانية ، وذلك بدقة ودقة. ولسوء الحظ ، من الصعب للغاية تقديم حجة مقنعة لكوبول أو ضدها لمثل هذا السيناريو ، لأن هذا ، في الواقع ، مجال للتغيرات لا تعد ولا تحصى. هل دعم النقطة الثابتة المضمّن في COBOL هو عامل حاسم عند اختيار لغة لحل مثل هذه المشكلات؟ أو ربما يمكن حل المشاكل ذات الصلة عن طريق اختيار المزيج الصحيح من المعالج والذاكرة ونظام التشغيل؟ أو ربما لحل مشاكل الحسابات السريعة والدقيقة والموثوقة ، فأنت بحاجة إلى اللجوء إلى "الرقص مع الدف"؟ ربما - سنحد من التفكير؟ سنقللهم من العثور على إجابة لسؤال مثل "أيهما أفضل - COBOL أو Java إذا كنت تستخدم نفس الجهاز؟". ومع ذلك ، سيكون من الصعب علينا تقييم كيف ستؤثر أوجه القصور في كل لغة على الأداء في الوقت الذي يبدأ فيه النظام في تنفيذ المليارات المذكورة أعلاه من العمليات في الثانية. نتيجة لذلك ، يمكننا فقط أن نقول أن نفس COBOL و Java هما مجرد لغات مختلفة تمامًا.

إليك ما يكتبون عنه هنا ، واستكشاف أداء شفرة جافا المترجمة من كود كوبول.
COBOL هي لغة مترجمة تستخدم مكدسًا يدعم المؤشرات وينضم. لا يؤدي تحويل النوع إلى إنشاء حمل على النظام أثناء تنفيذ البرنامج. لا توجد تحويلات جدولة أو نوع أثناء تنفيذ البرنامج. كود جافا ، من ناحية أخرى ، يعمل في جهاز افتراضي. يستخدم حفنة ولا يدعم الصلات. تحويل النوع يضع ضغطًا على النظام أثناء تنفيذ البرنامج. يستخدم Java الإرسال الديناميكي ونوع الاستدلال في وقت التشغيل. على الرغم من أنه من الممكن تقليل مقدار استخدام هذه الميزات ، إلا أن هذا يؤدي عادةً إلى حقيقة أن الكود "يشبه" كود Java العادي إلى حد ما. عند دراسة نتائج ترجمة شفرة Java من COBOL ، عادة ما يشكون من أن الرمز غير قابل للقراءة وغير مدعوم. هذا ينفي معظم أهداف الانتقال من COBOL إلى Java.

قبل أن تقرر تجاهل هذه الاعتبارات جانباً بعبارة "نعم ، لكنها جافا ، وجافا ليست أيضًا هدية" - تذكر هذا: معظم لغات البرمجة الحديثة ليس لديها دعم مضمّن على الإطلاق لحسابات النقاط الثابتة. (أعتقد أنه سيكون من الأصح القول أن أيا من اللغات الحديثة تدعم هذا ، لكن لا يمكنني التحقق من ذلك بشكل موثوق.) بالطبع ، يمكنك اختيار لغة أخرى لديها مجموعة من المزايا والعيوب الخاصة بها ، ولكن إذا كنت بحاجة إلى الدقة في العمليات الحسابية بنقطة ثابتة ، وإذا كنت تعتقد أن خسارة صغيرة في الأداء من استيراد مكتبة تنفذ مثل هذه الحسابات يمكن أن تؤذيك ، فهذا يعني أن لديك الخيار الوحيد - COBOL.

هذا هو السبب في أن ما يسمى "التحديث" معقد للغاية: إنه يعتمد على العديد من العوامل. ستحصل بعض المؤسسات على نتائج ملموسة من الاستثمارات في تغيير النظام الأساسي للبرامج ، بينما ستجد منظمات أخرى أنها فقدت شيئًا مهمًا مقابل "التحسينات" التي ، في الواقع ، لا تتحسن كثيرًا. إذا كانت المؤسسة مؤسسة مالية كبيرة تعالج ملايين المعاملات كل ثانية وتحتاج إلى دقة عشرية من العمليات الحسابية ، فسيكون تدريب الأخصائيين في العمل مع COBOL أرخص من دفع الموارد والإنتاجية للانتقال إلى لغة أكثر شيوعًا. بعد كل شيء ، شعبية مؤقتة.

النتائج


نتيجة لذلك ، عند الحديث عن سبب استخدام العديد من المؤسسات COBOL ، يجب أن تفهم أن مهمة معالجة البرامج مختلفة عن مهمة إنشاء البرامج. كان لدى المبرمجين الذين ابتكروا الحل ميزة التنفيذ التدريجي. تسعى التطبيقات عادةً إلى الاقتراب قدر الإمكان من حدود القدرات التي تدعمها تقنياتها. إن المعضلة المتعلقة بالانتقال من COBOL ليست مسألة التبديل من لغة إلى أخرى. هذه هي مهمة الانتقال من نموذج إلى آخر. حدود Java أو Python على نظام Linux ليست على الإطلاق هي حدود COBOL على الحاسوب الرئيسي. في بعض الحالات ، تكون تطبيقات COBOL قادرة على ما لا تستطيع اللغات الحديثة. في مثل هذه الحالات ، سيصبح استخدام COBOL على حاسب مركزي حديث ، في الواقع ، حلاً أرخص ومنتجًا ودقيقًا.

أعزائي القراء! هل تعتقد أن لغة COBOL هي حقًا لغة في بعض الحالات تتحول إلى حقيقة أفضل من اللغات الحديثة؟

Source: https://habr.com/ru/post/ar467253/


All Articles