بي سي بي إل
لغة البرمجة الأساسية المدمجة ( BCPL ) هي لغة برمجة إجرائية ، وحتمية ، وهيكلية . صُممت في الأصل لكتابة مترجمات للغات أخرى، ولم تعد شائعة الاستخدام. مع ذلك، لا يزال تأثيرها ملموسًا، إذ أن نسخة مُبسطة ومُعدلة نحويًا منها، تُسمى B ، كانت اللغة التي بُنيت عليها لغة البرمجة C. أدخلت BCPL العديد من ميزات لغات البرمجة الحديثة، بما في ذلك استخدام الأقواس المعقوفة لتحديد كتل التعليمات البرمجية. [ 2 ] طُبقت BCPL لأول مرة على يد مارتن ريتشاردز من جامعة كامبريدج عام 1967. [ 1 ]
تصميم
صُممت لغة BCPL بحيث يمكن كتابة مُترجمات صغيرة وبسيطة لها؛ ويُقال إن بعض المُترجمات كانت تعمل بحجم 16 كيلوبايت فقط . علاوة على ذلك، كان المُترجم الأصلي، المكتوب بلغة BCPL نفسها، سهل النقل. ولذلك، كانت BCPL خيارًا شائعًا لتهيئة النظام. ويكمن أحد الأسباب الرئيسية لسهولة نقل المُترجم في بنيته. فقد كان مُقسّمًا إلى جزأين: الجزء الأمامي الذي يُحلل الكود المصدري ويُولد لغة وسيطة تُسمى O-code . أما الجزء الخلفي فيأخذ لغة O-code ويُترجمها إلى لغة الآلة للجهاز المُستهدف. لم يكن يلزم إعادة كتابة سوى خُمس كود المُترجم لدعم جهاز جديد، وهي مهمة كانت تستغرق عادةً ما بين شهرين وخمسة أشهر عمل . وقد أصبح هذا النهج ممارسة شائعة فيما بعد (مثل باسكال وجافا ) .
تتميز هذه اللغة بكونها تحتوي على نوع بيانات واحد فقط : كلمة ، وهي عدد ثابت من البتات، يُختار عادةً ليتوافق مع كلمة الجهاز في نفس بنية المنصة، وبسعة كافية لتمثيل أي عنوان تخزين صالح. بالنسبة للعديد من أجهزة ذلك الوقت، كان نوع البيانات هذا كلمة من 16 بت. وقد أثبت هذا الاختيار لاحقًا أنه يمثل مشكلة كبيرة عند استخدام لغة BCPL على أجهزة لم تكن أصغر وحدة قابلة للعنونة فيها كلمة بل بايت، أو على أجهزة ذات أحجام كلمات أكبر مثل 32 بت أو 64 بت.
كان تفسير أي قيمة يُحدد بواسطة المعاملات المستخدمة لمعالجة القيم. (على سبيل المثال، +جمع قيمتين معًا، ومعاملتهما كأعداد صحيحة ؛ !أو تمرير قيمة بشكل غير مباشر، ومعاملتها فعليًا كمؤشر). ولضمان عمل ذلك، لم يتضمن التنفيذ أي فحص لأنواع البيانات .
تمت معالجة عدم التوافق بين اتجاه الكلمات في لغة BCPL والعتاد الموجه نحو البايتات بعدة طرق. إحداها كانت بتوفير إجراءات مكتبة قياسية لتعبئة الكلمات وفكها في سلاسل بايتات. لاحقًا، أُضيفت ميزتان للغة: عامل اختيار حقل البت وعامل توجيه البايت الداخلي (يُشار إليه بـ %). [ 3 ]
تتعامل لغة BCPL مع عمليات الربط بين وحدات التجميع المنفصلة بطريقة فريدة. لا توجد متغيرات عامة يمكن للمستخدم تعريفها؛ بل يوجد متجه عام، مشابه لـ "blank common" في لغة فورتران . تتألف جميع البيانات المشتركة بين وحدات التجميع المختلفة من قيم عددية ومؤشرات إلى متجهات مخزنة في مكان مُحدد مسبقًا في المتجه العام. وبالتالي، تُصبح ملفات الرأس (الملفات المُضمنة أثناء التجميع باستخدام توجيه "GET") الوسيلة الأساسية لمزامنة البيانات العامة بين وحدات التجميع، حيث تحتوي على توجيهات "GLOBAL" التي تُقدم قوائم من الأسماء الرمزية، كل منها مُقترن برقم يربط الاسم بالكلمة المُعنونة رقميًا في المتجه العام. بالإضافة إلى المتغيرات، يحتوي المتجه العام على روابط للإجراءات الخارجية. هذا يجعل التحميل الديناميكي لوحدات التجميع أمرًا بسيطًا للغاية. فبدلاً من الاعتماد على مُحمل الربط الخاص بالتنفيذ الأساسي، تُتيح BCPL للمبرمج التحكم في عملية الربط.
سهّل المتجه العام أيضًا استبدال أو توسيع إجراءات المكتبة القياسية. إذ يمكن للبرنامج تخزين مؤشر إلى إجراء موجود من المتجه العام واستبداله بمؤشر إلى تنفيذ بديل. ويمكن للإجراء البديل، بدوره، استدعاء الإجراء الأصلي كجزء من تنفيذه. يُشابه هذا الاستخدام لمؤشرات الدوال لاعتراض سلوك الإجراءات وتوسيعه التقنيات الموصوفة في اعتراض الدوال وربطها، وقد استُخدم أحيانًا كطريقة تصحيح أخطاء مخصصة .
كانت لغة BCPL أول لغة برمجة تستخدم الأقواس، وقد نجت هذه الأقواس من التغييرات النحوية وأصبحت وسيلة شائعة لتمثيل عبارات شفرة المصدر. عمليًا، على لوحات المفاتيح المحدودة آنذاك، كانت برامج المصدر تستخدم غالبًا التسلسلات ` $(& $)` أو ` [&` ]بدلًا من الرموز `&` {و`& `. ظهرت التعليقات} أحادية السطر في لغة BCPL، والتي لم تعتمدها لغة C ، مجددًا في لغة C++ ولاحقًا في لغة C99 .//
يصف كتاب BCPL: اللغة ومترجمها فلسفة BCPL على النحو التالي:
لا تقوم فلسفة BCPL على مبدأ الاستبداد الذي يظن نفسه أعلم ويفرض قوانينه على المسموح والممنوع؛ بل على العكس، تعمل BCPL كخادم يقدم خدماته بأفضل ما لديه من قدرات دون تذمر، حتى عند مواجهة ما يبدو غير منطقي. يُفترض دائمًا أن المبرمج على دراية بما يفعله، ولا تُقيده قيود تافهة. [ 4 ]
تاريخ
طُبِّقت لغة BCPL لأول مرة على يد مارتن ريتشاردز من جامعة كامبريدج عام 1967. [ 1 ] جاءت BCPL استجابةً للصعوبات التي واجهتها سابقتها، لغة برمجة كامبريدج، والتي أُعيد تسميتها لاحقًا إلى لغة البرمجة المدمجة (CPL)، والتي صُمِّمت خلال أوائل الستينيات. ابتكر ريتشاردز لغة BCPL عن طريق "إزالة خصائص اللغة الكاملة التي تُصعِّب عملية الترجمة". كُتِبَ أول تطبيق للمترجم، لجهاز IBM 7094 ضمن نظام المشاركة الزمنية المتوافق ، أثناء زيارة ريتشاردز لمشروع MAC في معهد ماساتشوستس للتكنولوجيا في ربيع عام 1967. وُصِفت اللغة لأول مرة في ورقة بحثية قُدِّمت في مؤتمر الحاسوب المشترك الربيعي لعام 1969 .
وقد ترددت شائعات بأن BCPL كانت في الأصل تعني "لغة برمجة Bootstrap Cambridge"، ولكن لم يتم إنشاء CPL أبدًا لأن التطوير توقف عند BCPL، وتم إعادة تفسير الاختصار لاحقًا لكتاب BCPL.
لغة BCPL هي اللغة التي كُتب بها برنامج "Hello, World!" الأصلي. [ 5 ] كما كُتبت أول لعبة MUD بلغة BCPL ( MUD1 ).
كُتبت العديد من أنظمة التشغيل جزئيًا أو كليًا بلغة BCPL (على سبيل المثال، TRIPOS والإصدارات الأولى من AmigaDOS ). وكانت BCPL أيضًا اللغة الأولية المستخدمة في مشروع Xerox PARC Alto . ومن بين المشاريع الأخرى، كُتب نظام إعداد المستندات Bravo بلغة BCPL.
استهدف مُترجم مبكر، تم تطويره في عام 1969، بالبدء بشريط ورقي يحتوي على رمز O الخاص بمترجم أطلس 2 لريتشاردز ، سلسلة ICT 1900. كان للجهازين أطوال كلمات مختلفة (48 مقابل 24 بت)، وتشفير أحرف مختلف، وتمثيلات سلاسل مضغوطة مختلفة - وقد زاد نجاح عملية التطوير من الثقة في جدوى هذه الطريقة.
بحلول أواخر عام 1970، كانت هناك تطبيقات متوفرة لأجهزة Honeywell 635 و Honeywell 645 و IBM 360 و PDP-10 و TX-2 و CDC 6400 و UNIVAC 1108 و PDP-9 و KDF 9 و Atlas 2. وفي عام 1974، طُبِّقت لهجة من لغة BCPL في شركة BBN دون استخدام رمز O الوسيط. وكان التطبيق الأولي عبارة عن مُترجم مُتقاطع مُستضاف على أجهزة TENEX PDP-10 التابعة لشركة BBN ، واستهدف مباشرةً أجهزة PDP-11 المُستخدمة في تطبيق BBN للجيل الثاني من معالجات IMP المُستخدمة في شبكة ARPANET .
كما صدرت نسخة من لغة BCPL لجهاز BBC Micro في منتصف ثمانينيات القرن العشرين، من إنتاج شركة Richards Computer Products، التي أسسها جون ريتشاردز، شقيق مارتن ريتشاردز. [ 6 ] وقد استخدم مشروع BBC Domesday هذه اللغة. كما أصدرت شركة البرمجيات البريطانية Arnor Ltd نسخًا من BCPL لأجهزة Amstrad CPC و Amstrad PCW في عام 1986. أما MacBCPL فقد صدرت لجهاز Apple Macintosh في عام 1985 من قِبل شركة Topexpress Ltd، ومقرها كينسينغتون، إنجلترا.
أثّر كلٌّ من تصميم وفلسفة لغة BCPL بشكلٍ كبير على لغة B ، والتي بدورها أثّرت على لغة C. [ 7 ] ناقش المبرمجون آنذاك ما إذا كان سيتم تسمية اللغة التي ستخلف لغة C في المستقبل بـ "D"، وهو الحرف التالي في الأبجدية، أو بـ "P"، وهو الحرف التالي في اسم اللغة الأم. اللغة الأكثر قبولًا كخليفة للغة C هي C++ (حيث يمثل عامل الزيادة++ في C )، [ 8 ] على الرغم من وجود لغة برمجة أخرى تحمل اسم D.
في عام 1979، كانت هناك تطبيقات لـ BCPL لما لا يقل عن 25 بنية؛ وقد فقدت اللغة شعبيتها تدريجياً مع ازدياد شعبية لغة C على الأنظمة غير Unix.
يُدير مارتن ريتشاردز نسخةً حديثةً من برنامج BCPL على موقعه الإلكتروني، وقد تم تحديثها آخر مرة عام 2023. [ 9 ] يُمكن تثبيت هذه النسخة للعمل على أنظمة تشغيل مُختلفة، بما في ذلك لينكس، وفري بي إس دي، وماك أو إس إكس. تتضمن أحدث نسخة مكتبات رسومية وصوتية، بالإضافة إلى دليل استخدام شامل. ويستمر ريتشاردز في البرمجة باستخدام هذا البرنامج، بما في ذلك لأغراض بحثه حول تتبع النوتات الموسيقية الآلية .
يُعد نوع MIME غير الرسمي الشائع لـ BCPL هو text/x-bcpl .
أمثلة
مرحبا بالعالم
يقدم ريتشاردز وويتبي-ستريفنز [ 10 ] مثالاً على برنامج "Hello, World!" لـ BCPL باستخدام رأس النظام القياسي 'LIBHDR':
احصل على "LIBHDR" ليكن START() يكتب("Hello, World") أمثلة أخرى
إذا تم تشغيل هذه البرامج باستخدام الإصدار الحالي من Cintsys الخاص بـ Richards (ديسمبر 2018)، فيجب تغيير LIBHDR وSTART وWRITEF إلى أحرف صغيرة لتجنب الأخطاء.
اطبع المضروب:
احصل على "LIBHDR" ليكن START() = VALOF $( من أجل I = 1 إلى 5 كرر WRITEF("%N! = %I4*N", I, FACT(I)) النتائج 0 دولار) AND FACT(N) = N = 0 -> 1, N * FACT(N - 1) عدد حلول مسألة الملكات N :
احصل على "LIBHDR" عالمي $( العدد: 200 الجميع: 201 دولار) ليكن TRY(LD, ROW, RD) BE صف الاختبار = الكل ثم العدد := العدد + 1 وإلا $( ليكن POSS = ALL & ~(LD | ROW | RD) حتى يصبح الاحتمال = 0، نفّذ $( ليكن P = POSS & -POSS الاستحواذ := الاستحواذ - موقف TRY(LD + P << 1, ROW + P, RD + P >> 1) دولار) دولار) ليكن START() = VALOF $( الكل := 1 FOR I = 1 TO 12 DO $( العدد := 0 حاول(0، 0، 0) WRITEF("%I2-QUEENS PROPLEM HAS %I5 SOLUTIONS*N", I, COUNT) الكل := 2 * الكل + 1 دولار) النتائج 0 دولار) مراجع
- 1 2 3 "مارتن ريتشاردز (جائزة رائد الحوسبة لعام 2003)" . جمعية مهندسي الكهرباء والإلكترونيات (IEEE ). تم الاطلاع عليه بتاريخ 24 نوفمبر 2017 .
{{cite web}}: CS1 maint: deprecated archiveal service ( link ) - ↑ https://www.cl.cam.ac.uk/~mr10/bcplman.pdf دليل مستخدم BCPL Cintsys و Cintpos، 2.1.4 أقواس القسم
- ↑ "كلايف فيذر يتحدث عن CPL وBCPL" . www.lysator.liu.se . تم الاطلاع عليه في 1 مارس 2024 .
- ↑ ريتشاردز، مارتن؛ ويتبي-ستريفنز، كولين (1980). BCPL: اللغة ومترجمها . مطبعة جامعة كامبريدج. ص 5. ISBN 978-0521785433.
- ↑ مكتبة مقاطعة كولومبيا البريطانية العامة ، ملف المصطلحات
- ↑ "التطوير التقني لرويترز: مسرد المصطلحات - ذا بارون" . www.thebaron.info .
- ↑ كيرنيغان، برايان دبليو؛ دينيس إم. ريتشي (1978). لغة البرمجة سي . مختبرات بيل للهواتف. ص 2. ISBN 0-13-110163-3.
- ↑ تاريخ لغة C++ ، تم الاطلاع عليه بتاريخ 12 ديسمبر 2017
- ↑ مارتن ريتشاردز. "BCPL/README (توزيعة BCPL Cintcode)" .
- ↑ ريتشاردز، مارتن؛ ويتبي-ستريفنز، كولين (1980). BCPL: اللغة ومترجمها . مطبعة جامعة كامبريدج. ص 8. ISBN 978-0521785433.
للمزيد من القراءة
- مارتن ريتشاردز، دليل مرجعي لمكتبة مقاطعة كولومبيا البريطانية، مؤرشف في 11 يونيو 2015 في آلة Wayback (مذكرة M-352، مشروع MAC ، كامبريدج، ماساتشوستس، الولايات المتحدة الأمريكية، يوليو 1967)
- مارتن ريتشاردز، BCPL - أداة لكتابة المترجمات وبرمجة الأنظمة ( وقائع المؤتمر المشترك للحاسوب الربيعي ، المجلد 34، الصفحات 557-566، 1969)
- مارتن ريتشاردز، آرثر إيفانز، روبرت ف. مابي، دليل مرجع BCPL (MAC TR-141، مشروع MAC ، كامبريدج، ماساتشوستس، الولايات المتحدة الأمريكية، 1974)
- مارتن ريتشاردز، كولين ويتبي-ستريفنز، لغة BCPL ومترجمها (مطبعة جامعة كامبريدج، 1980) ISBN 0-521-28681-6
روابط خارجية
- توزيع مارتن ريتشاردز في مكتبات مقاطعة كولومبيا البريطانية
- دليل مرجعي لمكتبة مقاطعة كولومبيا البريطانية (BCPL) لمارتن ريتشاردز، ١٩٦٧. مؤرشف بتاريخ ١١ يونيو ٢٠١٥ في أرشيف الإنترنت (Wayback Machine) بواسطة دينيس إم. ريتشي.
- مدخل BCPL في ملف المصطلحات
- منفذ Nordier & Associates x86
- دليل ArnorBCPL (1986، Amstrad PCW / CPC )
- كيف تطورت بطولة الدوري الإنجليزي الممتاز للكريكيت (BCPL) من بطولة الدوري الكندي الممتاز للكريكيت (CPL)، بقلم مارتن ريتشاردز
- يتضمن كتاب ريتشي " تطور لغة C" تعليقًا حول تأثير مكتبة BCPL على لغة C
- دليل مستخدم BCPL Cintsys و Cintpos
- دليل مرجعي لمكتبة مقاطعة بالو ألتو العامة، 1975، مركز أبحاث زيروكس بالو ألتو
- تاريخ الحوسبة في المملكة المتحدة
- لغات البرمجة الإجرائية
- لغات البرمجة التي تم إنشاؤها عام 1967
- لغات البرمجة الهيكلية
- لغات برمجة الأنظمة
- مختبر الحاسوب بجامعة كامبريدج
