سوبر باسكال
SuperPascal هي لغة برمجة إجرائية للحوسبة المتزامنة ، طوّرها بير برينش هانسن . [ 1 ] صُممت كلغة نشر : أداة تفكير تُمكّن من التعبير الواضح والموجز عن المفاهيم في البرمجة المتوازية. وهذا على عكس لغات التنفيذ التي غالبًا ما تكون معقدة بتفاصيل الآلة والاصطلاحات التاريخية. وقد أُنشئت لتلبية الحاجة آنذاك إلى لغة نشر متوازية. ويمكن القول إن قليلًا من اللغات اليوم تتمتع بالقدر الكافي من التعبير والاختصار لاستخدامها كأدوات تفكير.
التاريخ والتطور
تعتمد لغة SuperPascal على لغة Pascal التسلسلية التي طورها نيكلاوس ويرث ، مع إضافة ميزات لتحقيق التزامن الآمن والفعال. وقد شاع استخدام لغة Pascal كلغة نشر في سبعينيات القرن الماضي، حيث استُخدمت لتدريس ممارسات البرمجة الهيكلية ، وظهرت في كتب دراسية، على سبيل المثال، في مجال المترجمات [ 2 ] ولغات البرمجة [ 3 ] . وكان هانسن قد طور سابقًا لغة Concurrent Pascal [ 4 ] ، وهي من أوائل لغات البرمجة المتزامنة لتصميم أنظمة التشغيل وأنظمة التحكم في الوقت الحقيقي .
استندت متطلبات لغة SuperPascal إلى الخبرة التي اكتسبها هانسن على مدار ثلاث سنوات في تطوير مجموعة من البرامج المتوازية النموذجية، والتي طبقت أساليب لحل المشكلات الشائعة في علوم الحاسوب . [ 5 ] وقد مكّنته هذه التجربة من التوصل إلى الاستنتاجات التالية حول مستقبل الحوسبة المتوازية العلمية :
- ستكون الحواسيب المتوازية المستقبلية متعددة الأغراض ، مما يسمح للمبرمجين بالتفكير من منظور تكوينات العمليات الموجهة نحو حل المشكلات . وقد استند هذا إلى خبرته في برمجة شبكات المعالجات المتوازية ، وهي معالجات متعددة الأغراض يمكن توصيلها في مصفوفات أو أشجار أو مكعبات فائقة .
- لا تتطلب المشكلات العادية في العلوم الحاسوبية سوى التوازي الحتمي ، أي توقع الاتصال من قناة معينة ، بدلاً من عدة قنوات.
- يمكن تطوير الخوارزميات العلمية المتوازية بلغة نشر أنيقة واختبارها على حاسوب تسلسلي . وعندما يتم التأكد من فعالية الخوارزمية ، يمكن تنفيذها بسهولة بلغة تنفيذ متوازية.
وقد أدى ذلك إلى المتطلبات التالية للغة نشر متوازية:
- ينبغي أن تُوسّع اللغة لغةً قياسيةً شائعة الاستخدام، مع مراعاة التوازي الحتمي والتواصل بين الرسائل . وينبغي أن تكون هذه التوسعات متوافقةً مع روح اللغة القياسية.
- ينبغي أن تُمكّن اللغة من برمجة تكوينات عشوائية للعمليات المتوازية المتصلة بقنوات اتصال. ويمكن تعريف هذه التكوينات بشكل تكراري أو تكراري، وإنشاؤها ديناميكيًا.
- ينبغي أن تُمكّن اللغة مُترجمًا أحادي المرور من التحقق من أن العمليات المتوازية لا تتداخل بطريقة تعتمد على الوقت.
سمات
كانت الأفكار الرئيسية في تصميم لغة SuperPascal هي توفير برمجة آمنة ، مع مفاهيم مجردة للتوازي. [ 6 ] [ 7 ]
حماية
تتميز لغة SuperPascal بأمانها ، إذ تُمكّن مُترجمها ونظام تشغيلها من اكتشاف أكبر عدد ممكن من الحالات التي تتعطل فيها مفاهيم اللغة وتُنتج نتائج غير منطقية. [ 8 ] تفرض SuperPascal قيودًا على استخدام المتغيرات، مما يسمح للمُترجم أحادي المرور بالتحقق من أن العمليات المتوازية منفصلة، حتى لو كانت هذه العمليات تستخدم إجراءات ذات متغيرات عامة، وبالتالي التخلص من الأخطاء المرتبطة بالوقت. كانت العديد من ميزات لغة Pascal غامضة أو غير آمنة، ولذلك تم حذفها من SuperPascal، مثل التسميات والعبارات gotoوالمؤشرات والتصريحات المسبقة. [ 6 ]
التوازي
تُعدّ الميزات المتوازية في SuperPascal مجموعة فرعية من occam 2، مع إضافة خاصية عمومية تتمثل في مصفوفات العمليات الديناميكية والعمليات المتوازية المتكررة. [ 7 ]
تشير العبارة parallelإلى أن العدد الثابت من العبارات التي تحتويها يجب تنفيذها بالتوازي. على سبيل المثال:
موازي المصدر() | حوض() نهاية
يشير مصطلح forall"البيان" إلى التنفيذ المتوازي لبيان ما بواسطة عدد ديناميكي من العمليات، على سبيل المثال:
لكل i من 0 إلى 10 نفّذ شئ ما()
القنوات والاتصالات
تتواصل العمليات المتوازية عن طريق إرسال رسائل مُحددة النوع عبر قنوات يتم إنشاؤها ديناميكيًا. القنوات ليست متغيرات بحد ذاتها، ولكن يتم تعريفها بقيمة فريدة تُعرف باسم مرجع القناة ، والتي يتم الاحتفاظ بها بواسطة متغيرات القناة . يتم تعريف القناة، على سبيل المثال، من خلال التصريح التالي:
نوع القناة = * ( منطقي ، عدد صحيح ) ؛ متغير c : قناة ؛يُعرّف هذا الأمر نوعًا جديدًا (مختلطًا) يُسمى قناة، ومتغيرًا من هذا النوع يُسمى c . تقتصر القناة المختلطة على إرسال الأنواع المحددة فقط، وهي في هذه الحالة القيم المنطقية والعددية. يتم تهيئة القناة copen باستخدام العبارة التالية:
مفتوح (ج)
يتم بعد ذلك تبادل الرسائل باستخدام عبارات send(channel, value)`and` receive(channel, variable). يجب أن يكون كل من التعبير أو المتغير الذي يوفر قيمة ` send، والمتغير الموجود في receive`، من نفس نوع وسيط القناة الأول. يوضح المثال التالي استخدام هذه الدوال في عملية تستقبل قيمة من القناة اليسرى وتُخرجها على القناة اليمنى .
var left , right : channel ; a : number ; receive ( left , a ) ; send ( right , a )sendيمكن للدالتين receiveأن تأخذا وسائط إدخال وإخراج متعددة على التوالي:
أرسل(القناة، e1، e2، ...، en)؛ استقبال(القناة، v1، v2، ...، vn)
قد تحدث أخطاء الاتصال التالية أثناء التشغيل :
- يحدث التنازع على القناة عندما تحاول عمليتان متوازيتان إرسال أو استقبال البيانات على نفس القناة في وقت واحد.
- يحدث خطأ في نوع الرسالة عندما تحاول عمليتان متوازيتان التواصل عبر نفس القناة ويكون تعبير الإخراج ومتغير الإدخال من أنواع مختلفة.
- يحدث التعطل عندما تنتظر عملية الإرسال أو الاستقبال إلى أجل غير مسمى حتى تكتمل.
الاستدعاء الذاتي المتوازي
يمكن دمج الإجراءات المتكررةparallel مع عبارات `and` forallلإنشاء عمليات متكررة متوازية. يوضح المثال التالي كيفية تعريف سلسلةparallel من العمليات بشكل متكرر باستخدام عبارة `and`.
إجراء خط الأنابيب ( الحد الأدنى ، الحد الأقصى : عدد صحيح ؛ اليسار ، اليمين : قناة ) ؛ متغير الوسط : قناة ؛ ابدأ إذا كان الحد الأدنى < الحد الأقصى ، فابدأ افتح ( الوسط ) ؛ بالتوازي عقدة ( الحد الأدنى ، اليسار ، الوسط ) | خط الأنابيب ( الحد الأدنى + 1 ، الحد الأقصى ، الوسط ، اليمين ) نهاية نهاية وإلا عقدة ( الحد الأدنى ، اليسار ، اليمين ) نهاية ؛مثال آخر هو التعريف التكراري لشجرة العمليات :
إجراء شجرة ( العمق : عدد صحيح ، أسفل : قناة ) ؛ متغير يسار ، يمين : قناة ؛ ابدأ إذا كان العمق > 0 ثم ابدأ افتح ( يسار ، يمين ) ؛ شجرة متوازية ( العمق - 1 ، يسار ) | شجرة ( العمق - 1 ، يمين ) | جذر ( أسفل ، يسار ، يمين ) نهاية نهاية وإلا ورقة ( أسفل )التحكم في التداخل
يُعدّ السلوك غير المتوقع أو غير القابل للتكرار الناتج عن الأخطاء المرتبطة بالوقت من أصعب جوانب البرمجة المتزامنة . وتنشأ هذه الأخطاء نتيجةً للتداخل بين العمليات المتوازية، بسبب تحديثات المتغيرات أو تعارضات القنوات. فإذا قامت عمليتان تتشاركان متغيرًا بتحديثه في أوقات غير متوقعة، فإن سلوك البرنامج الناتج يكون مرتبطًا بالوقت. وبالمثل، إذا حاولت عمليتان إرسال أو استقبال البيانات في الوقت نفسه عبر قناة مشتركة، فإن التأثير الناتج يكون مرتبطًا بالوقت أيضًا.
تفرض لغة SuperPascal قيودًا معينة على استخدام المتغيرات والتواصل لتقليل الأخطاء المرتبطة بالوقت أو القضاء عليها. فيما يخص المتغيرات، هناك قاعدة بسيطة: لا يمكن للعمليات المتوازية تحديث سوى مجموعات منفصلة من المتغيرات. [ 1 ] على سبيل المثال، في parallelعبارة برمجية ، لا يمكن تحديث متغير الهدف بواسطة أكثر من عملية واحدة، بينما يمكن استخدام متغير التعبير (الذي لا يمكن تحديثه) بواسطة عمليات متعددة. في بعض الحالات، عندما يكون متغير مثل المصفوفة هدفًا لعمليات متوازية متعددة، ويعلم المبرمج أن استخدامه عنصرًا عنصرًا منفصل ، يمكن تجاوز قيد الانفصال بعبارة برمجية سابقة [sic].
البنية والنحو
SuperPascal هي لغة برمجة ذات بنية كتلية ، ولها نفس البنية الأساسية للغة Pascal. يتكون البرنامج من ملف رأس ، وتعريفات للمتغيرات العامة ، وتعريفات للدوال أو الإجراءات ، وإجراء رئيسي . تتكون الدوال والإجراءات من كتل ، حيث تمثل الكتلة مجموعة من التعليمات . تُفصل التعليمات بفواصل منقوطة، على عكس لغات مثل C أو Java ، حيث تُنهى بفواصل منقوطة.
فيما يلي مثال على برنامج كامل مكتوب بلغة SuperPascal، يقوم بإنشاء بنية اتصال خطية مكونة من 100 عقدة. ترسل العقدة الرئيسية رمزًا صحيحًا إلى العقدة الأولى، ثم يتم تمرير هذا الرمز عبر خط الاتصال وزيادته في كل خطوة، وأخيرًا تستقبله العقدة الرئيسية وتطبعه.
مسار البرنامج ؛const len = 100 ;نوع القناة = * ( عدد صحيح ) ؛var left , right : channel ; value : integer ;إجراء العقدة ( i : عدد صحيح ؛ اليسار ، اليمين : قناة ) ؛ متغير القيمة : عدد صحيح ؛ ابدأ باستقبال ( اليسار ، القيمة ) ؛ إرسال ( اليمين ، القيمة + 1 ) نهاية ؛إجراء إنشاء ( يسار ، يمين : قناة ) ؛ نوع صف = مصفوفة [ 0..الطول ] من القناة ؛ متغير ج : صف ؛ i : عدد صحيح ؛ ابدأ ج [ 0 ] := يسار ؛ ج [ الطول ] : = يمين ؛ من أجل i := 1 إلى الطول - 1 ، افتح ( ج [ i ]) ؛ لكل i := 1 إلى الطول، أنشئ عقدة ( i ، ج [ i - 1 ] ، ج [ i ] ) نهاية ؛ابدأ الفتح ( يسار ، يمين ) ؛إرسال متوازٍ ( يسار ، 0 ) | إنشاء ( يسار ، يمين ) | استقبال ( يمين ، قيمة ) نهاية ؛writeln ( 'القيمة الناتجة هي ' , value ) end .تطبيق
يمكن الوصول إلى برنامج SuperPascal مجانًا من أرشيف Brinch Hansen. [ 9 ] يتألف البرنامج من مُصرّف ومُفسّر، كلاهما مكتوب بلغة باسكال التسلسلية العادية (معيار باسكال من المستوى الأول وفقًا لمعيار ISO). يدعم مُصرّف GNU Pascal والإصدارات الأحدث من مُصرّف Free Pascal (2.7.1+) هذا البرنامج مع -Misoإمكانية التبديل، بالإضافة إلى التعديلات الطفيفة التالية على الكود.
بالنسبة لـ GPC، يستخدم الملف الدالة interpret.pغير القياسية clock(السطر 1786) للحصول على وقت النظام. بدلاً من ذلك، getTimeStampيمكن استخدام دالة Extended Pascal (المدعومة من قِبل مُصرّف GNU Pascal)، وذلك بتعريف متغير من النوع TimeStamp، وتعيين الوقت الحالي له باستخدام getTimeStamp، ثم إسناد Secondحقل TimeStampإلى المتغير t.
يحتاج Free Pascal أيضًا إلى حل لمشكلة "الساعة" المذكورة أعلاه (في نظام ويندوز، يكفي تعريف gettickcount كمتغير خارجي باسم "clock"). علاوة على ذلك، يجب تغيير عمليات إعادة التعيين/إعادة الكتابة المُصنّفة على أنها غير قياسية في الكود المصدري إلى أزواج تعيين/إعادة تعيين (أو إعادة كتابة). (من المحتمل أن يُظهر GPC خطأً في هذا الأمر فقط عند تفعيل الخيارات الصارمة)، ويجب تغيير أوامر معالج C المسبق #include 'xx' إلى {$include 'xx'}.
{ رمز الوقت لوقت القراءة في Freepascal على أنظمة Unix } الدالة FpTime ( var tloc : integer ) : integer ; الاسم الخارجي 'FPC_SYSC_TIME' ;الإجراء readtime ( المتغير t : عدد صحيح ) ؛ ابدأ { دالة غير قياسية تقرأ وقت المعالج بالمللي ثانية } t := fptime ( t ) ؛ نهاية ؛مراجع
- 1 2 هانسن، بير برينش (1993)، سوبر باسكال: لغة نشر للحوسبة العلمية المتوازية
- ↑ ويلش، جيم (1980). برمجة الأنظمة المهيكلة . أبر سادل ريفر، نيوجيرسي، الولايات المتحدة الأمريكية: برنتيس هول. ISBN 0-13-854562-6.
- ↑ تينانت، آر دي (1981). مبادئ لغات البرمجة . أبر سادل ريفر، نيوجيرسي، الولايات المتحدة الأمريكية: برنتيس هول. رقم ISBN 0-13-709873-1.
- ↑ هانسن، برينش (1977). هندسة البرامج المتزامنة . برنتيس هول. ISBN 978-0130446282.
- ↑ هانسن، برينش (مايو 1993) ، "برامج نموذجية لعلوم الحوسبة: منهجية برمجة للحواسيب المتعددة"، التزامن: الممارسة والتجربة ، ص 407-423
- 1 2 هانسن، برينش (1994). "لغة البرمجة سوبر باسكال". البرمجيات: الممارسة والخبرة . 24، 5 : 399-406 .
- 1 2 هانسن، برينش (1977). اختراع البرمجة المتزامنة . نيويورك: سبرينغر-فيرلاغ. رقم ISBN 0-387-95401-5.
- ↑ هوار، سي إيه آر (1974). "تلميحات حول تصميم لغة البرمجة". موثوقية نظام الحاسوب : 505-534 .
- ↑ هايدن، سي سي (11-06-2008). "أرشيف بير برينش هانسن" . تم الاسترجاع في 03-03-2020 .
روابط خارجية
- الموقع الرسمي ، أرشيف برينش هانسن، مجموعة من أوراقه وبرنامج SuperPascal الذي يمكن تنزيله في ملف مضغوط؛ يحتوي على مواصفات اللغة الكاملة والوثائق المفيدة.
- SuperPascal على GitHub ، نسخة معدلة من تطبيق SuperPascal الأصلي من تطوير كريستوفر لونغ؛ يتم تجميعها وتشغيلها على Free Pascal الحديثة؛ تنفيذ البرنامج أسرع من Perl 5 أو 6، وتقريبًا بنفس سرعة Python 3
- لغات البرمجة المتزامنة
- لغات البرمجة الإجرائية
- عائلة لغات البرمجة باسكال
- لغات البرمجة التي تم إنشاؤها في عام 1993
