لغات البرمجة

STELLA: لغة برمجة Lisp-like للذكاء الاصطناعي

STELLA هي لغة برمجة قوية المحتوى نوعيًا وموجهة نحو الكائنات، وتشبه اللغة Lisp، وتم تصميمها لتيسير المهام البرمجية الرمزية في تطبيقات الذكاء الاصطناعي. تحافظ STELLA على تلك السمات من Common Lisp التي يُعتبر أنها أساسية للبرمجة الرمزية مثل الدعم المدمج للهياكل الديناميكية للبيانات، والمجموعات الغير متجانسة، والرموز من الدرجة الأولى، وهياكل التكرار القوية، ومساحات الأسماء، ونظام الأنواع الموجه نحو الكائنات مع بروتوكول الكائن الفعَّال، ومعالجة الاستثناءات، وقابلية توسيع اللغة من خلال الماكروهات، ولكن دون المساس بسرعة التنفيذ، والتشغيل المشترك مع البرامج غير STELLA، والاستقلالية عن المنصة. تُترجم برامج STELLA إلى لغة هدفية مثل C++، أو Common Lisp، أو Java، ثم يتم تجميعها باستخدام مُجمِّع اللغة الهدف الأصلي لتوليد رمز قابل للتنفيذ. تقتصر بنية STELLA على تلك التي يمكن ترجمتها مباشرة إلى تنظيمات أصلية من اللغات المستهدفة المعنية، مما يُمكِّن من توليد رمز فعَّال للغاية وسهل القراءة. منذ خريف عام 2000، قمنا ببرمجة حوالي 100,000 سطر من كود STELLA – حوالي 50% لنواة STELLA ذاتها والنسبة الأخرى لنظام تمثيل المعرفة PowerLoom والأنظمة ذات الصلة. كانت تجربتنا الشخصية أنه ليس من الصعب كثيرًا كتابة برنامج STELLA وتصحيحه مقارنة ببرنامج Lisp، وأن الإزعاج من الحاجة إلى توفير بعض معلومات النوع يفوق بكثير الفوائد مثل اكتشاف العديد من الأخطاء أثناء وقت الترجمة بدلاً من وقت التشغيل. ومع ذلك، يبدو أن أكبر فائدة تكمن في أنه يمكننا لا تزال استغلال جميع فوائد التطوير التدريجي للكود في Lisp، حيث نستخدم الإصدار المعتمد على Common Lisp من STELLA للنمذجة الأولية. هذا يسمح لنا بتعريف وإعادة تعريف الدوال والطرق والفئات تدريجيًا وفحص وتصحيح الكود غير الصحيح على الطاير. حتى أن أكثر بيئات تطوير C++ أو Java تقدمية لا تبدو تدعم هذا النمط الكامل للتطوير التدريجي، أي تغيير في فئة (كل تغيير في Java هو تغيير في فئة) لا يزال يتطلب إعادة التجميع وإعادة بدء التشغيل للتطبيق، ومن الممكن أن يكون إعادة البدء في التطبيق هو الأكثر استهلاكًا للوقت إذا كان المستخدم يصحح تطبيقًا معقدًا يستغرق وقتًا كبيرًا للوصول إلى حالة معينة.