# سنوبول

سنوبول (اللغة الرمزية لمعالجة النصوص String Oriented Symbolic Language) هو اسم لمجموعة من لغات برمجة الحاسوب التي ظهرت بين عامي 1962 و1967 في مختبرات بيل في إيه تي أند تي على يد ديفيد جي. فاربر ورالف إي. جريسولد وإيفان إي. بولونسكي توجتها ـسنوبول 4. كانت سنوبول واحدة من لغات معالجة النصوص التي ظهرت بين الخمسينيات والستينيات التي كان من ضمنها كوميت COMIT وتراك TRAC.
تتميز سنوبول 4 عن معظم لغات البرمجة بوجود الأنماط patterns كنوع بيانات من الدرجة الأولى (نوع بيانات يمكن معالجة محتواه بكل الطرق الممكنة لأنواع البيانات الأخرى) ووجود معاملات operators لربطها والاختيار بينها. يمكن التعامل مع السلاسل النصية التي تنشأ أثناء التنفيذ كبرامج ويمكن تنفيذها أيضا. كانت سنوبول 4 تدرس في العديد من كبرى الجامعات الأمريكية في أواخر الستينيات وأوائل السبعينيات وانتشر استخدامها في السبعينيات والثمانينيات في العلوم الإنسانية كلغة لمعالجة النصوص. ولكنها تراجعت في السنوات الأخيرة أمام اللغات الأحدث مثل أوك AWK وبيرل التي جعلت معالجة النصوص بواسطة التعابير النمطية أكثر رواجا.
تصنف سنوبول 4 ضمن اللغات التي تستخدم قواعدها صيغة باكوس نور –التي تكافئ قواعد اللغات الحرة context-free grammars وتتفوق على التعابير النمطية. تعتبر «التعابير النمطية» في الإصدارات الحالية من لغتي أوك وبيرك امتدادا للتعابير النمطية بالمعنى التقليدي، ولكن التعابير النمطية على عكس أنماط سنوبول4 ليست تكرارية وهو ما يمنح انماط سنوبول 4 ميزة حسابية. إلا أن التعابير النمطية بلغة بيرل أصبحت تكرارية منذ الإصدار 5.1 (الذي صدر في ديسمبر 2007).
قام أحد مصممي سنوبول 4 بتصميم لغات لتخلف سنوبول 4 سماها إس إل5 وأيكون Icon –التي جمعت بين خاصية التعقب في مطابقة الأنماط من سنوبول 4 والهيكلة القياسية من اللغات الخوارزمية – كما تفردت ببعض المزايا الخاصة.

## تطورها

قام أصحاب لغة سنوبل الأصلية بعملها كآداة للتعامل مع السلاسل كثيرة الحدود، كتبوها بلغة التجميع لتعمل على آي بي إم 7090. كانت قواعدها بسيطة، وبها نوع بيانات واحد – السلاسل – ولا تحتوي على دوال أو تعريفات وتحكمها بالخطأ محدود جدا، ولكن على الرغم من بساطتها و«خصوصيتها» فقد بدأت تنتشر إلى مجموعات أخرى، لذلك قرر مؤلفوها تطويرها وتنسيقها، فأعادوا كتابتها وأضافوا بعض الدوال – قياسية أو من تعريف المستخدم – وأصدروها تحت اسم سنوبول3، كان هناك سنوبول2 ولكنها كانت مرحلة وسطية قصيرة العمر لم تدعم دوال المستخدم ولم يتم إصدارها أبدا. لاقت سنوبول3 نجاحا كبيرا وأعيدت كتابتها لحواسيب أخرى غير آي بي إم 7090 على يد مبرمجين آخرين مما أدى إلى وجود عدد من الإصدارات الغير متوافقة. مع ازدياد نجاح سنوبول3 استمر مؤلفوها في تلقي طلبات متزايدة لتطويرها وشكاوي أيضا من عدم توافق وعيوب الإصدارات التي لم يقوموا بكتابتها، ولمعالجة هذا وللاستفادة من الحواسيب الجديدة التي ظهرت في الستينيات قرروا عمل سنوبول4 بإضافة العديد من أنواع البيانات والمزايا ولكن باستخدام آلة افتراضية لتسهيل انتقالها من حاسوب إلى آخر، ظل مترجم سنوبول4 مكتوبا بلغة التجميع، ولكنهم استخدموا مزايا الماكرو في المجمع لتعريف أوامر الآلة الافتراضية للغة تطبيق سنوبول SNOBOL Implementation Language (SIL) وأدى هذا إلى تحسن كبير في قابلية اللغة للانتقال فقد جعل انتقال الآلة الافتراضية التي تستضيف المترجم سهلا عن طريق إعادة بناء أوامرها الافتراضية على أي جهاز عليه مجمع ماكرو أو لغة برمجة عالية المستوى.

## المزايا

سنوبول4 هي المثال الرابع والأخير في سلسلة من لغات البرمجة المختصة لمعالجة النصوص. قدم إصدار سنوبول4 عددا من أنواع البيانات الجاهزة مثل الأعداد الصحيحة والأعداد الحقيقية محدودة الدقة والسلاسل والأنماط والمصفوفات Arrays والجداول (المصفوفات المرتبطة associative arrays)، كما أن سنوبول4 مكنت المستخدم من تعريف أنواع بيانات ودوال جديدة. كانت إمكانية تعريف أنواع بيانات خاصة بالمبرمج خاصية متقدمة في هذا وقتها، كانت مشابهة لخاصية السجلات records التي ظهرت أولا في كوبول أخيرا في باسكال (لغة برمجة)). كل سطور أوامر Command line سنوبول بهذه الصياغة Label1 Subject Pattern = Object :(Goto Label2)، كل الخانات الخمس اختيارية. بشكل عام يتم مطابقة subject بـالنمط pattern وإذا وجدت خانة object كان يتم استبدال الأجزاء التي تمت مطابقتها بـobject طبقا لقواعد معينة للاستبدال، goto يمكن أن يكون أمر تفرع فوري أو مشروط بنجاح أو فشل عملية مطابقة النمط. يمكن ان يكون نمط سنوبول شديد البساطة أو بالغ التعقيد، فالنمط البسيط يمكن ان يكون عبارة عن سلسلة نصية ("ABCD") أما المعقد فيمكن أن يكون منظومة ضخمة تصف مثلا قواعد لغة برمجة بأكملها. يمكن كتابة مفسر لغة interpreter بسنوبول تقريبا بالكامل باستخدام التعبير الذي يمثله بصيغة باكوس نور مع بعض التغييرات، ويمكن ألا يزيد كود مجمع ماكرو ومفسر لعتاد نظري تماما عن بضع مئات من السطور وإضافة أمر جديد بسطر واحد. يمكن أن تؤدي أنماط سنوبول المعقدة ما يعتبر آداؤه غير عملي أو مستحيل عن طريق التعابير النمطية الأقل تعقيدا المستخدمة في أغلب لغات مطابقة الأنماط الأخرى. تأتي بعض هذه القوة مما يسمى بإضافات سبيتبول “SBITBOL extensions” (التي تستخدم من وقتها في كل تطبيقات لغة سنوبول4 الأصلية) رغم أنه يمكن الوصول لنفس الآداء بدونها. بعض هذه القوة مصدرها الآثار الجانبية التي يمكن أن إحداثها أثناء عملية مطابقة النمط ومن ضمنها الاحتفاظ بالكثير من النتائج المؤقتة للمطابقة وإمكانية تنفيذ أي دالة من تعريف المبرمج لتقوم بأي معالجة مطلوبة وإمكانية التأثير في اتجاه عملية المطابقة الجارية أو حتى تغيير النمط نفسه أثناء العملية. يمكن حفظ الأنماط كأي نوع بيانات من الدرجة الأولى ويمكن ربطها واستخدامها بداخل أنماط أخرى واستخدامها بناء تعابير شديدة التعقيد، فيمكن مثلا كتابة نمط سنوبول4 لمطابقة «اسم كامل وعنوان بريدي دولي» وهو ما يستحيل تقريبا باستخدام التعابير النمطية. تستخدم عملية مطابقة النمط في سنوبول4 خوارزمية التعقب التي تشابه تلك المستخدمة في لغة البرمجة المنطقية برولوغ – التي تستخدم بنية مشابهة للنمط من خلال دي سي جي. تجعل هذه الخوارزمية استخدام سنوبول كلغة برمجة منطقية أسهل من أغلب اللغات الأخرى. تحتفظ سنوبول بالسلاسل في الكوم heap الذي يخضع لعملية جمع القمامة. تنافس سنوبول لغة إيه بي إل APL في تميزها في الصياغة وأسلوب البرمجة فكلاهما يختلف جذريا عن لغات البرمجة الإجرائية procedural languages «القياسية» مثل بيسيك وفورتران وسي (لغة برمجة)|سي]].

## التطبيقات

التطبيق النموذجي كان على بي دي بي – 10 PDP-10، واستخدم لدراسة المصرفات والقواعد الشكلية والذكاء الاصطناعي خاصة الترجمة الآلية والفهم الآلي للغات طبيعية. كان التطبيق الأصلي على آي بي إم 7090 IBM 7090 في مختبرات بيل. صممت سنوبول4 في الأساس بهدف سهولة الانتقال، التطبيق الأول بدأ على آي بي إم 7094 ثم اكتمل على آي بي إم 360 عام 1967. تنقلت اللغة باستمرار بين العديد من المنصات.
تطبق اللغة عادة كمفسر نظرا لصعوبة تطبيق بعض مزاياها عالية المستوى، ولكن هناك مصرف وهو مصرف سبيتبول وبه كل إمكانيات المفسر تقريبا. يأتي مصرف جنات للغة أيدا مع حزمة (GNAT.Spitbol) التي تطبق كل قواعد معالجة السلاسل في سبيتبول، ويمكن مناداتها بداخل أي برنامج أيدا.
استخدم محرر الملفات بنظام ميتشيجان الطرفي لغة معالجة أنماط مستمدة من سنوبول4.
هناك العديد من التطبيقات المتوفرة، ماكرو سنوبول4 هو تطبيق مفتوح المصدر كتبه فيل بودن يلغة السي وهو قادر على العمل على أي منصة تقريبا، وهو متاح على http://www.snobol4.org/. شركة كاتسبو Catspaw, Inc. تقدم تطبيق تجاري للغة سنوبول4 يعمل مع العديد من المنصات مثل الدوس وماكنتوش وصن وآر إس\6000 وغيرها على http://www.snobol4.org/. أحد الإصدارات القديمة سنوبول4+ متوفر الآن مجانا من كاتسبو. سنوبول4 مينيسوتا سنوبول4 Minnesota SNOBOL4 الذي كتبه فيكتورز بيرستيس هو تطبيق الحاسوب الشخصي الأقرب للإصدار الذي كان مستخدما على حاسب آي بي إم المركزي IBM mainframe (ويدعم حتى أمر FORMAT المستوحى من فورتران) وهو متاح مجانا أيضا على http://www.berstis.com/snobol4.htm.
برغم أن سنوبول نفسها تفتقر لمزايا البرمجة المهيكلة يوجد أحد إصداراتها الذي يحتوي على هذه المزايا وهو سنوستورم Snostorm وظهر في كلية لندن الجامعية (UCL) بين 1982 و1984 وإصدار آخر كتبه أندرو كوينيج اسمه سنوكون Snocone.
أضاف تطبيق سبيتبول أيضا عددا من المزايا - رغم عدم استخدام مصطلحات البرمجة المهيكلة التقليدية – التي يمكن استخدامها لتقديم العديد من الإمكانيات التي تعتبر من إمكانيات «البرمجة المهيكلة»، أبرزها البنية المتداخلة if/then/else. أصبحت هذه المزايا من وقتها متوفرة في معظم تطبيقات سنوبول4 الأخيرة. بعد أن ظل سبيتبول منتجا تجاريا لأعوام أصبح أخيرا مجانيا في أبريل 2009 ويخضع لرخصة جنو العمومية.

## التسمية

حسب كلام ديف فاربر، فقد «قرر هو وجريزولد وبولونسكي تسميتها Symbolic EXpression Interpreter SEXI» كانت الأمور مستقرة حتى بدأت في إرسال أحد دفعات المهام لتجميع النظام كالعادة على بطاقة مهامي – التي كانت تسمى قياسيا بعملي واسمي - Sexi Farber فنظرت إحدى الفتيات إليها وقالت «هذا ما تظنه أنت» بطريقة مضحكة. وهذا بين أننا نحتاج لاسم آخر فجلسنا وتحدثنا وشربنا القهوة وبعد وقت طويل قال أحدهم – غالبا رالف – "فرصنا في إيجاد اسم معدومة we don’t have a Snowball chance in hell of finding a name” فصحنا جميعا "وجدناها سنوبول" ثم بدأنا في التفكير فيما يمكن أن تشير إليه. بعض التفاسير للفظ سنوبول “SNOBOL” ‘String Oriented Symbolic Language’ أو (على طريقة إنسيالسم) ‘StriNg Oriented symBOLic Language’.

## سنوبول وبايثون

بعد أن وجد بعض مستخدمي لغة بايثون أن استخدام التعابير النمطية مقيد تم عمل إضافة لبايثون تسمح باستخدام مطابقة النمط من سنوبول في برامج بايثون. الإضافة اسمها سنوبي SnoPy وكتبها دون روزنبرج.