التداخل

دون وودز ، أحد مؤلفي كتاب INTERCAL، في عام 2010
جيم ليون، المؤلف الآخر لكتاب INTERCAL، في عام 2005

لغة المترجم بدون اختصار قابل للنطق ( INTERCAL ) هي لغة برمجة غامضة تم إنشاؤها كمحاكاة ساخرة بواسطة دون وودز وجيمس إم ليون ، وهما طالبان من جامعة برينستون ، في عام 1972. وهي تسخر من جوانب لغات البرمجة المختلفة في ذلك الوقت، [ 1 ] بالإضافة إلى انتشار هياكل اللغة المقترحة والرموز في الستينيات.

توجد ثلاث نسخ مُعتمدة من لهجات INTERCAL: C-INTERCAL (التي أُنشئت عام 1990)، والتي يُشرف عليها إريك س. ريموند [ 2 ] وأليكس سميث [ 3 ] ، وCLC-INTERCAL، التي يُشرف عليها كلاوديو كالفيللي [ 4 ] ، وINTERCAL64، التي طوّرها جيسون ويتينغتون وتُشرف عليها الآن منظمة PLEASE ABSTAIN .

تاريخ

وفقًا للدليل الأصلي الذي وضعه المؤلفون، [ 5 ]

الاسم الكامل للمترجم هو "لغة المترجم بدون اختصار قابل للنطق"، والذي يتم اختصاره لأسباب واضحة إلى "INTERCAL".

استخدمت النسخة الأصلية من برينستون البطاقات المثقبة ومجموعة أحرف EBCDIC . ولتمكين تشغيل INTERCAL على أجهزة الكمبيوتر التي تستخدم ASCII ، كان لا بد من استبدال حرفين: $الأول ¢كعامل المزج ، "الذي يمثل التكلفة المتزايدة للبرمجيات مقارنةً بالأجهزة"، والثاني ?كعامل XOR الأحادي ، "للتعبير بدقة عن رد فعل الشخص العادي عند مواجهة XOR لأول مرة". [ 5 ] في الإصدارات الحديثة من C-INTERCAL، تُدعم العوامل القديمة كبدائل؛ ويمكن الآن ترميز برامج INTERCAL باستخدام ASCII أو Latin-1 أو UTF-8 . [ 6 ]

تفاصيل

كان الهدف من لغة إنتركال أن تكون مختلفة تمامًا عن جميع لغات البرمجة الأخرى. وكما جاء في الدليل الأصلي:

إن أي تشابه بين لغة البرمجة المعروضة هنا ولغات البرمجة الأخرى، سواء كانت حية أو ميتة، هو محض صدفة.

تتميز العمليات الشائعة في لغات البرمجة الأخرى ببنية نحوية مبهمة ومتكررة في لغة إنتركال. من دليل مرجع إنتركال: [ 5 ]

من الحقائق المعروفة والمثبتة أن الشخص الذي يصعب فهم عمله يحظى بتقدير كبير. على سبيل المثال، إذا قيل إن أبسط طريقة لتخزين القيمة 65536 في متغير INTERCAL ذي 32 بت هي:

DO : 1 <- # 0 ¢# 256

سيقول أي مبرمج عاقل إن هذا عبث. ولأن هذه هي أبسط طريقة بالفعل، سيبدو المبرمج أحمق أمام مديره، الذي سيحضر بالتأكيد، كما هي عادة المدراء. ولن يكون التأثير أقل كارثية حتى لو كان المبرمج على صواب.

يحتوي مُترجم INTERCAL على العديد من الميزات الأخرى المصممة لجعله أقل جاذبية للمبرمج: فهو يستخدم عبارات مثل "READ OUT" و"IGNORE" و"FORGET"، بالإضافة إلى مُعدِّلات مثل "PLEASE". تُقدِّم هذه الكلمة الأخيرة سببين لرفض المُترجم للبرنامج: إذا لم تظهر "PLEASE" بشكل كافٍ، يُعتبر البرنامج غير مُهذَّب بما فيه الكفاية، وتُشير رسالة الخطأ إلى ذلك؛ أما إذا ظهرت بشكل مُفرط، فقد يُرفض البرنامج لكونه مُهذَّبًا بشكل مُفرط. على الرغم من وجود هذه الميزة في مُترجم INTERCAL الأصلي، إلا أنها لم تكن موثقة. [ 7 ]

على الرغم من أن لغة INTERCAL تتميز ببنية نحوية معقدة ومطولة عمدًا، إلا أنها لغة كاملة تورينج : فإذا توفرت لها ذاكرة كافية، تستطيع INTERCAL حل أي مسألة يمكن لآلة تورينج العالمية حلها. مع ذلك، فإن معظم تطبيقات INTERCAL تقوم بذلك ببطء شديد. على سبيل المثال، تم اختبار معيار غربال إراتوستينس ، الذي يحسب جميع الأعداد الأولية الأقل من 65536، على جهاز Sun SPARCstation 1 عام 1992. استغرق الأمر أقل من نصف ثانية بلغة C ، بينما استغرق البرنامج نفسه بلغة INTERCAL أكثر من سبع عشرة ساعة. [ 8 ]

الوثائق

يُزعم أن "الرسم التخطيطي الملتوي" من دليل INTERCAL المرجعي يشرح آلية عمل عامل "الاختيار".

يحتوي دليل INTERCAL المرجعي على العديد من التعليمات المتناقضة أو غير المنطقية أو الفكاهية:

تنبيه! لا تخلط بأي حال من الأحوال بين الشبكة وعامل التداخل، إلا في ظروف مربكة!

يحتوي الدليل أيضًا على " لوزة "، كما هو موضح في هذه الحاشية: "4) نظرًا لأن جميع أدلة المراجع الأخرى تحتوي على ملاحق، فقد تقرر أن يحتوي دليل INTERCAL على نوع آخر من الأعضاء القابلة للإزالة." [ 5 ]

يُطلق دليل لغة INTERCAL أسماءً غير مألوفة على جميع أحرف ASCII غير الأبجدية الرقمية : فعلامات الاقتباس المفردة والمزدوجة تُسمى "شرارات" و"آذان أرنب" على التوالي. (الاستثناء هو علامة العطف "&" : كما جاء في ملف المصطلحات ، "ما الذي يمكن أن يكون أكثر سخافة من ذلك؟"). أما عامل التخصيص، الذي يُمثل بعلامة يساوي (نصف شبكة INTERCAL) في العديد من لغات البرمجة الأخرى، فهو في INTERCAL سهم يساري، <-يتكون من "زاوية" و"دودة"، ويُقرأ بوضوح "gets".

بناء الجملة

لا تستخدم المدخلات (باستخدام WRITE INالتعليمات) والمخرجات (باستخدام التعليمات) التنسيقات المعتادة؛ ففي INTERCAL-72، تُدخل الدالة WRITE IN رقمًا مكتوبًا بالأرقام الإنجليزية (مثل SIX FIVE FIVE THREE FIVE)، بينما تُخرجه الدالة READ OUT بأرقام رومانية مُشوَّهة . [ 5 ] أما الإصدارات الأحدث فلها أنظمة إدخال/إخراج خاصة بها . [ 4 ] [ 7 ]READ OUT

يمكن إضافة التعليقات باستخدام مُعرّفات العبارات المعكوسة التي تتضمن NOT أو N'T؛ حيث تُؤدي هذه المُعرّفات إلى حظر الأسطر مبدئيًا، ما يجعلها بلا تأثير. [ 5 ] (يمكن حظر سطر حتى لو لم يكن له بنية صحيحة؛ إذ تحدث أخطاء البنية أثناء التشغيل، وعندها فقط عند إلغاء حظر السطر.) [ 5 ]

هياكل البيانات

كانت لغة INTERCAL-72 (الإصدار الأصلي من INTERCAL) تحتوي على أربعة أنواع بيانات فقط : العدد الصحيح ذو 16 بت (يُرمز له بـ 16 بت، ويُسمى "نقطة")، والعدد الصحيح ذو 32 بت (يُرمز له بـ "نقطة مزدوجة")، ومصفوفة الأعداد الصحيحة ذات 16 بت ( يُرمز لها بـ "ذيل")، ومصفوفة الأعداد الصحيحة ذات 32 بت ( يُرمز لها بـ "هجين"). يوجد 65535 متغيرًا متاحًا من كل نوع، مرقمة من 16 بت إلى 32 بت، على سبيل المثال. مع ذلك، يمتلك كل متغير من هذه المتغيرات مكدسًا خاصًا به يمكن إضافة عناصر إليه وحذفها منه (يُخزن مؤقتًا ويُسترجع، وفقًا لمصطلحات INTERCAL)، مما يزيد من تعقيد هياكل البيانات. [ 5 ] حافظت الإصدارات الأحدث من INTERCAL، إلى حد كبير، على هياكل البيانات نفسها، مع بعض التعديلات المناسبة. تُتيح لغة TriINTERCAL، التي تُعدّل أساس تمثيل الأرقام، استخدام نوع بيانات 10- trit بدلاً من نوع 16-bit، [ 7 ] وتُنفّذ لغة CLC-INTERCAL العديد من هياكل البيانات الخاصة بها، مثل "الصفوف والمحاضرات"، من خلال جعل أنواع البيانات الأساسية تخزن معلومات أكثر بدلاً من إضافة أنواع جديدة. [ 4 ] تُحدّد أبعاد المصفوفات بتعيين قيم لها كما لو كانت متغيرًا عدديًا . كما يُمكن استخدام الثوابت، ويتم تمثيلها برمز ("mesh") متبوعًا بالثابت نفسه، مكتوبًا كرقم عشري ؛ ولا تُدعم سوى الثوابت الصحيحة من 0 إلى 65535. [ 5 ].:,;.1.65535#

المشغلون

لا يوجد سوى خمسة عوامل تشغيل في INTERCAL-72. تختلف التطبيقات في الأحرف التي تمثل كل عملية، ويقبل العديد منها أكثر من حرف واحد، لذلك يتم إعطاء أكثر من احتمال واحد للعديد من عوامل التشغيل.

عوامل INTERCAL [ 4 ] [ 5 ] [ 7 ]
المشغلإنتركال - 72 حرفًاأحرف C-INTERCALخصائص CLC-INTERCAL
تداخل / مزجcمسافة للخلف/¢، $، cمسافة للخلف/¢
يختار~~~
و&&&
أوVVV
XORVمسافة للخلف-Vمسافة للخلف -، ?،Vمسافة للخلف -،¥

على عكس معظم اللغات الأخرى، تُعدّ AND وOR وXOR عوامل أحادية ، تعمل على بتات متتالية من وسيطها؛ حيث يُطبّق العامل على البت الأقل أهمية والبت الأكثر أهمية في المدخلات، ويُطبّق العامل على البت الأكثر أهمية والبت الثاني الأكثر أهمية، ويُطبّق العامل على البت الثاني الأكثر أهمية، ويُطبّق العامل على البت الثاني الأكثر أهمية والبت الثالث الأكثر أهمية، وهكذا. يُوضع العامل بين علامة الترقيم التي تُحدّد اسم متغير أو ثابت والرقم الذي يُحدّد هذا المتغير، أو داخل علامات التجميع مباشرةً (أي بعد حرف واحد مما هو عليه في لغات البرمجة مثل C ).

تُعدّ عمليتا SELECT و INTERLEAVE (المعروفة أيضًا باسم MINGLE) من عوامل التشغيل الثنائية ذات التنسيق الوسطي. تأخذ عملية SELECT البتات من المعامل الأول التي تُقابل البتات "1" من المعامل الثاني، وتزيل البتات التي تُقابل البتات "0"، مع إزاحة البت نحو البت الأقل أهمية، ثم إضافة أصفار: 51 (1 1 0 0 1 1 بالثنائي) SELECT 21 (10101 بالثنائي) هي 5 ( 101 بالثنائي). أما عملية MINGLE، فتُبدّل البتات من المعاملين الأول والثاني (بحيث يكون البت الأقل أهمية من المعامل الثاني هو البت الأقل أهمية من النتيجة).

لا توجد أسبقية للمُعاملات؛ يجب استخدام علامات التجميع لإزالة الغموض عن الأسبقية حيثما تكون غامضة (علامات التجميع المتاحة هي '("spark")، والتي تُطابق علامة spark أخرى، و "("rabbit ears")، والتي تُطابق علامة rabbit ears أخرى؛ المبرمج مسؤول عن استخدامها بطريقة تجعل التعبير غير غامض). [ 5 ]

هياكل التحكم

تبدأ جميع عبارات INTERCAL بـ "معرّف العبارة"؛ في INTERCAL-72، يمكن أن يكون هذا المعرّف `<p>` DOأو PLEASE`<p>` أو `<p> PLEASE DO`، وكلها تعني الشيء نفسه للبرنامج (لكن الإفراط في استخدام أحدها يؤدي إلى رفض البرنامج، وهي ميزة غير موثقة في INTERCAL-72 ذُكرت في دليل C-INTERCAL)، [ 7 ] أو بصيغة معكوسة (مع إضافة `<p>` NOTأو N'T`<p>` إلى المعرّف). [ 5 ] يسمح التراجع في INTERCAL، وهو إصدار حديث، باستخدام متغيرات تستخدم MAYBE`<p>` (ربما مع `<p>` أو `<p>`) كمعرّف للعبارة، مما يُضيف نقطة اختيار. [ 9 ] قبل المعرّف، يمكن كتابة رقم سطر اختياري (عدد صحيح بين قوسين)؛ بعد المعرّف، يمكن كتابة نسبة احتمال تنفيذ السطر بالصيغة `<p>` %50، والتي تكون قيمتها الافتراضية 100%. [ 5 ]

في لغة INTERCAL-72، تتمثل هياكل التحكم الرئيسية في NEXT وRESUME وFORGET. ينتقل NEXT إلى السطر المحدد، متذكرًا السطر التالي الذي كان سيتم تنفيذه لولا وجود NEXT في مكدس الاستدعاءات (يمكن استخدام معرّفات أخرى غير DO في أي عبارة، وDO مُعطى كمثال). يزيل NEXT إدخالات التعبير من أعلى مكدس الاستدعاءات (وهذا مفيد لتجنب الخطأ الذي يحدث عند وجود أكثر من 80 إدخالًا)، ويزيل إدخالات التعبير من مكدس الاستدعاءات وينتقل إلى آخر سطر تم تذكره. [ 5 ]DO (line) NEXTDO FORGET expressionDO RESUME expression

توفر لغة C-INTERCAL أيضًا تعليمة COME FROM المكتوبة ؛ كما توفر لغة CLC-INTERCAL وأحدث إصدارات C-INTERCAL تعليمة COME FROM المحسوبة ( و NEXT FROM، وهي تشبه COME FROM ولكنها تحفظ أيضًا عنوان العودة على مكدس NEXT. [ 4 ]DO COME FROM (line)DO COME FROM expression)

تتمثل الطرق البديلة للتأثير على تدفق البرنامج، والمتاحة أصلاً في لغة INTERCAL-72، في استخدام تعليمات IGNORE وREMEMBER على المتغيرات (والتي تتسبب في تجاهل عمليات الكتابة إلى المتغير بصمت ثم إعادة تفعيلها، بحيث يمكن تعطيل التعليمات بجعلها بلا تأثير)، وتعليمات ABSTAIN وREINSTATE على الأسطر أو على أنواع العبارات، مما يتسبب في عدم تأثير الأسطر أو إعادة تفعيلها على التوالي. [ 5 ]

مرحبا بالعالم

فيما يلي برنامج "مرحباً بالعالم!" بلغة إنتركال.

DO , 1 < - 13 الرجاء القيام ، 1 استبدال 1 < - 238 القيام ، 1 استبدال 2 < - 108 القيام ، 1 استبدال 3 < - 112 القيام ، 1 استبدال 4 < - 0 القيام ، 1 استبدال 5 < - 64 القيام ، 1 استبدال 6 < - 194 القيام ، 1 استبدال 7 < - 48 الرجاء القيام ، 1 استبدال 8 < - 22 القيام ، 1 استبدال 9 < - 248 القيام ، 1 استبدال 10 < - 168 القيام ، 1 استبدال 11 < - 24 القيام ، 1 استبدال 12 < - 16 القيام ، 1 استبدال 13 < -162 الرجاء القراءة بصوت عالٍ ، 1 الرجاء الاستسلام

اللهجات

كانت إمكانيات الإدخال/الإخراج الأصلية لـ Woods–Lyon INTERCAL محدودة للغاية : المدخلات المقبولة الوحيدة كانت أرقامًا مكتوبة بالأرقام، والمخرجات الوحيدة كانت نسخة موسعة من الأرقام الرومانية .

ساهمت إعادة برمجة لغة C-INTERCAL، المتاحة على الإنترنت، في زيادة شعبيتها بين مُحبي لغات البرمجة المتخصصة. [ 10 ] تتميز لهجة C-INTERCAL ببعض الاختلافات عن لغة INTERCAL الأصلية، وقد أضافت بعض الميزات الجديدة، مثل عبارة COME FROM وطريقة لإجراء عمليات الإدخال والإخراج النصية استنادًا إلى نموذج تورينج النصي. [ 7 ]

قام مؤلفو C-INTERCAL أيضًا بإنشاء متغير TriINTERCAL، استنادًا إلى نظام الأرقام الثلاثي وتعميم مجموعة عوامل التشغيل الخاصة بـ INTERCAL. [ 7 ]

وهناك نسخة أحدث تسمى Threaded Intercal، والتي توسع وظائف COME FROM لدعم تعدد الخيوط . [ 11 ]

يحتوي CLC-INTERCAL على مكتبة تسمى INTERNET لوظائف الشبكات بما في ذلك كونه خادم INTERCAL، ويتضمن ميزات مثل Quantum Intercal، والتي تتيح إجراء حسابات متعددة القيم بطريقة يُزعم أنها جاهزة لأجهزة الكمبيوتر الكمومية الأولى .

في أوائل عام 2017، ظهرت على منصة GitHub نسخةٌ من تطبيق .NET تستهدف إطار عمل .NET . يدعم هذا التطبيق إنشاء مكتبات ثنائية مستقلة والتوافق مع لغات برمجة أخرى. تُعتبر هذه النسخة الآن قديمة ولم تعد تُحدَّث. [ 12 ]

أُعلن عن INTERCAL64 في 1 أبريل 2026. تُوسّع هذه اللهجة اللغة لتشمل دعم 64 بت، كما تُوفّر بيئة تطوير متكاملة (IDE) كاملة لبرنامج Visual Studio Code . نُقل هذا الكود لاحقًا إلى مجموعة PLEASE ABSTAIN لإدارته وتطويره مستقبلًا. [ 13 ]

التأثير والنقاش

في مقال "صندوقٌ مُظلم: التعتيم، واللغات الغريبة، وجماليات البرمجة" [ 10 ] ، وُصفت لغة INTERCAL تحت عنوان "تخلَّ عن كل منطق يا من تدخل هنا: INTERCAL". ومن بين الميزات "الغريبة" الموصوفة: المُصرِّف واستراتيجية التعليقات.

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

في كتاب "الماسوشية التقنية"، [ 14 ] يصف ليف براتيشينكو مترجم INTERCAL بأنه سادية:

إذا لم يُصادف الأمر PLEASE بالقدر الكافي، سيُرفض البرنامج؛ أي سيتجاهله المُصرّف دون تفسير. وإذا تكرر كثيرًا، فسيُرفض أيضًا، هذه المرة بسبب التذمّر. وعند دمجه مع كلمات أخرى نادرة الاستخدام في لغات البرمجة، ولكنها تظهر كعبارات في INTERCAL، يبدو الكود وكأنه شخص يتوسل.

مراجع

  1. "دليل لغات البرمجة من الألف إلى الياء: إنتركال" . تيك وورلد. 4 يوليو 2008. تم الاطلاع عليه بتاريخ 10 مارس 2012 .
  2. "صفحة موارد INTERCAL" . Catb.org . تم الاطلاع عليه بتاريخ 10-03-2012 .
  3. "سيرة أليكس سميث" . wolframscience.com .
  4. 1 2 3 4 5 "Clc-Intercal" . Clc-Intercal. 2010-04-01 . تم الاسترجاع في 2012-03-10 .{{cite web}}: CS1 maint: deprecated archiveal service ( link )
  5. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 "دليل مرجعي لبرنامج إنتركال" . مؤرشف من الأصل بتاريخ 16 يوليو 2011. تم الاطلاع عليه بتاريخ 10 مارس 2012 .
  6. "دليل تعليمات مُحسّن لبرنامج C-INTERCAL 0.27 من برينستون وأتاري سينتاكس" . تم الاطلاع عليه بتاريخ 12-11-2012 .{{cite web}}: CS1 maint: deprecated archiveal service ( link )
  7. 1 2 3 4 5 6 7 "دليل مرجعي تكميلي لـ C-INTERCAL" . مؤرشف من الأصل بتاريخ 23-02-2008.
  8. ^ ستروس ، تشارلز (سبتمبر 1992). "إنتركال - لغة من الجحيم" . متسوق الكمبيوتر (المملكة المتحدة) .
  9. "التراجع في التقسيم البينيّ" . Cse.unsw.edu.au. 2006-04-11 . تم الاطلاع عليه بتاريخ 2012-03-10 .
  10. 1 2 ماتياس، مايكل؛ نيك مونتفورت. "صندوق، مظلم: التعتيم، واللغات الغريبة، وجماليات الشفرة" (ملف PDF) . وقائع المؤتمر السادس للفنون والثقافة الرقمية، جامعة كوبنهاغن لتكنولوجيا المعلومات، 1-3 ديسمبر 2005. الصفحات 144-153 . 
  11. "Threaded Intercal" . Cse.unsw.edu.au. 2004-06-09 . تم الاطلاع عليه بتاريخ 2012-03-10 .
  12. "الموقع الرسمي لـ Simple Component INTERCAL لـ .NET" . GitHub . 30 سبتمبر 2021.
  13. "يرجى الامتناع - المنظمون الرسميون لمؤتمر إنتركال 64" . يرجى الامتناع . 6 يوليو 2026.
  14. براتيشينكو، ليف (شتاء 2009). "الماسوشية التكنولوجية" . مجلة كابينت (36) . تاريخ الاسترجاع: 27-05-2014 .