راكيت
المحتويات

بدايةً، تُعد راكيت لغة برمجة عامة الغرض ومتعددة النماذج. وهي لهجة حديثة من لغة ليسب وسليلة لغة سكيم، وصُمِّمَت لتكون منصة لتصميم لغات البرمجة وتنفيذها. وإلى جانب لغة راكيت الأساسية، يُطلَق اسم «راكيت» كذلك على عائلة لغات البرمجة ومجموعة الأدوات التي تدعم التطوير باستخدامها. وتُستخدَم راكيت كذلك في اللغة الإخطاطية، وتعليم علوم الحاسوب، والبحث العلمي. وتعرض الأقسام التالية جوانب أخرى من الموضوع.
وفي هذا الصدد، تُعرَف لغة راكيت الأساسية بنظام الماكرو الموسع، الذي يتيح إنشاء لغات مدمجة ومخصصة لمجالات معينة، وبنى لغوية مثل الأصناف أو الوحدات، ولهجات منفصلة من راكيت بدلالات برمجية مختلفة.
التاريخ
إضافةً إلى ذلك، تُوزَّع المنصة برمجيات حرة ومفتوحة المصدر بموجب رخصتي أباتشي 2.0 وMIT. ويمكن رفع الامتدادات والحزم التي يكتبها المجتمع إلى دليل حزم راكيت.
كذلك، توفّر منصة راكيت تنفيذًا للغة يشتمل على نظام تنفيذ البرامج، ومكتبات، ومصرف يدعم عدة أنماط للترجمة: لغة الآلة، والبرمجيات متعددة المنصات، والمفسر، والتصريف في أثناء التنفيذ، مضافًا إليها بيئة التطوير المتكاملة DrRacket المكتوبة بلغة راكيت. ويستعمل برنامج التواصل بروغرام باي ديزاين (ProgramByDesign) لغة راكيت، وهو برنامج يهدف إلى جعل علوم الحاسوب جزءًا لا يتجزأ من منهج الفنون الحرة.
تاريخ الإصدارات
إضافةً إلى ذلك، وفي 19 نوفمبر 2019، صدرت راكيت 7.5، واستُخدِمَت فيها رخصة أباتشي 2.0 أو رخصة MIT.
في هذا الإطار، وبحلول الإصدار الرئيسي التالي، انتقل المشروع إلى نظام ترقيم إصدارات متسلسل تقليدي. وقدم الإصدار 4.0 اختصار #lang لتحديد اللغة التي كُتبت بها الوحدة. وعلاوة على ذلك، قدمت المراجعة أزواجًا وقوائم غير قابلة للتغيير، ودعمًا للتوازي الدقيق، ولهجة ساكنة الأنواع.
من جانب آخر، وسُمِّيَت المراجعة الكبرى التالية بالإصدار 200، والتي قدمت نظام وحدات افتراضيًا جديدًا يتعاون مع الماكرو. وبوجه خاص، يضمن نظام الوحدات فصل الحسابات في وقت التشغيل ووقت الترجمة لدعم «برج اللغات». وبخلاف الوحدات السابقة، لا تُعد هذه الوحدات كائنات من الدرجة الأولى.
علاوةً على ذلك، وفي 7 يونيو 2010، سُمِّيَت PLT Scheme باسم راكيت. وتزامن تغيير الاسم مع إطلاق الإصدار 5.0. ولاحقًا، أُعِيدَت كتابة واجهة المستعمل الرسومية بلغة راكيت بدلاً من سي++ في الإصدار 5.1 باستخدام أدوات واجهة المستعمل الأصلية على المنصات كافة. وتضمن الإصدار 5.2 أداة فحص نحوي في الخلفية، ومكتبة رسم بياني جديدة، ومكتبة قواعد بيانات، وحلقة تقييم (REPL) ممتدة. واشتمل الإصدار 5.3 على ميزة الوحدات الفرعية الجديدة للوحدات التي تُحمَّل اختياريًا، وأدوات تحسين جديدة، ومكتبة JSON، وميزات أُخر. وقدم الإصدار 5.3.1 تحسينات كبرى لبيئة DrRacket: حيث فُعِّل فاحص النحو في الخلفية افتراضيًا وأُضيفت أداة معاينة وثائق جديدة.
إضافةً إلى ذلك، وصدر الإصدار 7 من راكيت مع موسع ماكرو جديد كُتب بلغة راكيت كجزء من الاستعدادات لدعم الانتقال إلى نظام وقت التشغيل Chez Scheme ودعم أنظمة تشغيل متعددة.
وعلى صعيد آخر، قدم الجيل الأول من مراجعات PLT Scheme ميزات للبرمجة الضخمة والصغيرة باستخدام الوحدات والأصناف. وقدم الإصدار 42 نظام الوحدات -وهو نظام وحدات من الدرجة الأولى- لتكملة الأصناف في التطوير واسع النطاق. واكتسب نظام الأصناف ميزات (مثل واجهات نمط جافا) وفقد ميزات أُخر (مثل الميراث المتعدد) عبر هذه الإصدارات. وتطورت اللغة عبر سلسلة من الإصدارات المتعاقبة، واكتسبت شهرة في الإصدار 53، مما أدى إلى عمل مكثف وصولاً إلى الإصدار 100، الذي يعادل الإصدار «1.0» في أنظمة الإصدارات الشائعة في الوقت الحالي.
من جانب آخر، وقدم الإصدار 300 دعم الترميز الموحد، ودعم المكتبات الخارجية، وتحسينات في نظام الأصناف. ولاحقًا، حسنت سلسلة الإصدار 300 أداء لغة وقت التنفيذ بإضافة مصرف في أثناء التنفيذ والتحول إلى نظام جمع القمامة المتولد افتراضيًا.
من جانب آخر، وفي الإصدار 6.0، أصدرت راكيت الجيل الثاني من نظام إدارة الحزم. وكجزء من هذا التطوير، أُعِيد تنظيم مستودع DrRacket وRacket الرئيسي وقُسِّم إلى مجموعة كبيرة من الحزم الصغيرة، مما مكن من تثبيت «أقل قدر من راكيت» وتثبيت الحزم المطلوبة فقط.
من جهة ثانية، وفي 13 فبراير 2021، صدرت راكيت 8.0. ويمثل هذا الإصدار أول إصدار تكون فيه راكيت مع نظام وقت التشغيل Chez Scheme -المعروف باسم Racket CS- هي التنفيذ الافتراضي. وتتميز Racket CS بأنها أسرع، وأسهل في الصيانة والتطوير، ومتوافقة مع برامج راكيت الحالية، وتتمتع بنظام أفضل لجمع القمامة المتوازي.
#lang typed/racket
- (: fact (Integer -> Integer))
- (define (fact n)
- (if (zero? n) 1 (* n (fact (- n 1)))))
#lang racket
- "Hello, World!"
- ينتج عن تشغيل هذا البرنامج المخرج التالي:
- وهذا برنامج أقل بساطة قليلاً:
امتدادات اللغة المدمجة والماكرو
في هذا الإطار، وتشمل اللهجات الأُخر FrTime، وScribble، وSlideshow، وعدة لغات للتعليم.
وعلى صعيد آخر، استُخدم نظام الماكرو في راكيت لبناء لهجات لغوية كاملة. ويشمل ذلك Typed Racket، وهي لهجة ذات أنواع متدرجة تسهل الانتقال من الكود غير المكتوب إلى الكود المكتوب، ولغة Lazy Racket وهي لهجة ذات تقييم كسول، ولغة Hackett التي تجمع بين هاسكل وراكيت. كما نُفِّذَت اللغة التعليمية Pyret في الأصل بلغة راكيت.
وفي هذا السياق، تُجمع ميزات التوسع على مستوى الوحدة مع نظام ماكرو صحي يشبه نظام لغة شيم، ويوفر ميزات أكثر من نظام معالجة التعبيرات (s-expression) في لغة ليسب. ويُعد نظام الماكرو واجهة برمجة تطبيقات مصقولة بعناية لامتدادات المترجم. وباستخدام واجهة برمجة المترجم هذه، يمكن للمبرمجين إضافة ميزات ولغات كاملة بطريقة تجعلها لا تختلف عن البنى اللغوية المدمجة.
إضافةً إلى ذلك، الميزات التي تميز راكيت بوضوح عن اللغات الأُخر في عائلة ليسب هي ميزات امتداد اللغة المدمجة التي تدعم بناء لغات جديدة مخصصة لمجالات معينة أو عامة الغرض. وبُنِيَت ميزات التوسع في راكيت داخل نظام الوحدات للسماح بالتحكم في النحو على مستوى الوحدة وسياقها. فمثلاً، يمكن تجاوز الصيغة النحوية #%app لتغيير دلالات تطبيق الدوال. وبما أن أي وحدة يمكن استخدامها لغةً، عبر تدوين #lang، فهذا يعني فعليًا إمكانية برمجة أي جانب من جوانب اللغة والتحكم فيه.
كذلك، يوفر توزيع راكيت الأساسي مكتبات للمساعدة في تطوير لغات البرمجة. ولا تقتصر هذه اللغات على النحو المعتمد على التعبيرات. وإلى جانب امتدادات النحو التقليدية، يتيح التوجيه #lang استدعاء محللات عشوائية، يمكن تنفيذها باستخدام مكتبة أدوات المحلل.
#lang racket
ومن جهة أخرى، باستخدام التوجيه #lang، يمكن كتابة ملف المصدر بلهجات مختلفة من راكيت. وهذا مثال لبرنامج المضروب في Typed Racket:
- (require 2htdp/image)
- (let sierpinski ([n 8])
- (if (zero? n)
- (triangle 2 'solid 'red)
- (let ([t (sierpinski (- n 1))])
- (freeze (above t (beside t t))))))
- هذا البرنامج، المأخوذ من موقع راكيت، يرسم مثلث سيربينسكي متداخلًا إلى العمق 8.
التنفيذات
Pycket: تنفيذ لراكيت أُنشئ باستخدام إطار عمل RPython.
وفضلًا عن ذلك، تُوجَد تطبيقات تجريبية:
وفي السياق ذاته، RacketScript: مترجم تجريبي من راكيت إلى جافا سكريبت (ES6). يتيح للمبرمجين استخدام أنظمة جافا سكريبت وراكيت ويهدف إلى جعل هذا التوافق سلسًا قدر الإمكان.
من جانب آخر، تمتلك راكيت في الوقت الحالي تنفيذين، كلاهما يدعم لينكس وويندوز وماك، وهما مدعومان حتى الإصدار 8.8 (2023). يستعمل التنفيذ الافتراضي مترجم Chez Scheme التزايدي ووقت التنفيذ الخاص به. أما التنفيذ البديل فيولد كودًا ثمانيًا مستقلاً عن المنصة ويستعمل الترجمة في الوقت المناسب لتوليد لغة الآلة عند التحميل.
بيئة البرمجة
في هذا الإطار، توفر منصة اللغة بيئة تطوير متكاملة مستضافة ذاتيًا تسمى DrRacket، وخادم ويب يعتمد على الاستمرارية، وواجهة مستعمل رسومية، وأدوات أُخر. وبوصفها أداة برمجة نصية قابلة للتطبيق، يمكن استخدامها لبرمجة غلاف يونكس، حيث يمكنها تحليل وسائط سطر الأوامر وتنفيذ الأدوات الخارجية.
الميزات
كذلك، تشتمل لغة راكيت الأساسية على الماكرو، والوحدات، والإغلاقات المعجمية، والنداءات الذيلية، والاستمرارات المحددة، والمعاملات (المتغيرات السائلة)، وعقود البرمجيات، والخيوط الخضراء وخيوط نظام التشغيل، وغيرها. وتأتي اللغة كذلك مع أوليات، مثل مساحات الأحداث والحراس، التي تتحكم في إدارة الموارد وتمكن اللغة من العمل مثل نظام تشغيل لتحميل البرامج الأُخر وإدارتها. وتُنشأ امتدادات أخرى للغة بواسطة نظام الماكرو القوي، الذي يمكنه مع نظام الوحدات والمحللات المخصصة التحكم في جوانب اللغة كافة. وأغلب البنى اللغوية في راكيت مُنفذة بوصفها ماكرو في اللغة الأساسية، ويشمل ذلك نظام أصناف المزيج، ونظام مكونات يعادل نظام وحدات ML، ومطابقة الأنماط.
كذلك، ونظام عقود راكيت مستوحى من عمل «التصميم بالعقود» للغة إيفل ويمدده للعمل مع القيم من الدرجة العالية مثل الدوال من الدرجة الأولى، والكائنات، وخلايا المراجع، وغيرها.
كذلك، وفي نهاية عام 2014، نُقل جزء كبير من كود راكيت إلى نظام حزم جديد منفصل عن قاعدة الكود الرئيسية، ويُخدَم هذا النظام بواسطة برنامج عميل يسمى «raco». ويوفر نظام الحزم الجديد ميزات أقل من PLaneT.
وفي هذا السياق، تشتمل راكيت على مترجمات للكود الثماني (bytecode) والترجمة في الوقت المناسب (JIT). ويُنتج مترجم الكود الثماني تنسيقًا داخليًا يشغله جهاز راكيت الافتراضي، ويقوم مترجم JIT بترجمة الكود الثماني إلى لغة الآلة في وقت التشغيل.
وفي السياق ذاته، منذ عام 2004، تُشحن اللغة مع PLaneT، وهو مدير حزم مدمج في نظام الوحدات بحيث يمكن استيراد المكتبات الخارجية واستخدامها بسلاسة. كما يمتلك PLaneT سياسة إصدارات مدمجة لمنع تضارب التبعيات.
علاوةً على ذلك، علاوة على ذلك، تتميز اللغة بأول نظام عقود للغة برمجة من الدرجة العالية.
التطوير
من جانب آخر، وعلى مر السنوات التالية، أضافت PLT لغات تعليمية، ومحلل خطوات جبري، وحلقة «قراءة-تقييم-طباعة» شفافة، وطابعة تعتمد على البناء، وعدة ابتكارات أُخر إلى DrScheme، مما أنتج بيئة تطوير برامج تعليمية عالية الجودة. وبحلول عام 2001، كان الفريق الأساسي قد ألف ونشر كتابه الأول «كيف تصمم البرامج»، استنادًا إلى فلسفتهم التعليمية.
في هذا الإطار، وبالتوازي مع ذلك، بدأ الفريق عقد ورش عمل لمعلمي المدارس الثانوية، لتدريبهم على تصميم البرامج والبرمجة الوظيفية. وقدمت الاختبارات الميدانية مع هؤلاء المعلمين وطلابهم أدلة أساسية لتوجيه عملية التطوير.
علاوةً على ذلك، ويفصل «بيان راكيت» المبادئ التي تقود تطوير راكيت، ويعرض إطار التقييم وراء عملية التصميم، ويوضح فرص التحسين المستقبلي.
وفي السياق ذاته، أسس ماتياس فيليزن شركة PLT في منتصف التسعينيات، بدأت أولًا بوصفها مجموعة بحثية، ثم أصبحت مشروعًا مخصصًا لإنتاج مواد تعليمية للمبرمجين المبتدئين (محاضرات، وتمارين، وبرمجيات). وفي يناير 1995، قررت المجموعة تطوير بيئة برمجة تعليمية تعتمد على لغة سكيم. وجمع ماثيو فلات نظام MrEd -وهو الجهاز الافتراضي الأصلي لراكيت- من مكتبة libscheme، وwxWidgets، وعدة أنظمة حرة أُخر. وفي السنوات التالية، أنتج فريق يضم فلات وروبي فيندلر وشيرام كريشنامورثي وكورماك فلاناغان وآخرين بيئة DrScheme، وهي بيئة برمجة لمبرمجي سكيم المبتدئين وبيئة بحثية للأنواع المتدرجة. وسُمِّيَت لغة التطوير الرئيسية التي دعمها DrScheme باسم PLT Scheme.
أمثلة الكود
هذا برنامج بسيط لطباعة «Hello, World!»:
بيئة DrRacket
ومن ناحية أخرى، تتوفر DrRacket لأنظمة ويندوز، وماك، ويونكس، ولينكس، وتتصرف البرامج بشكل متماثل على هذه المنصات كافة.
من جهة ثانية، تُستخدَم DrRacket (DrScheme سابقًا) على نطاق واسع في دورات علوم الحاسوب التمهيدية التي تدرس لغتي شيم أو راكيت، وتُمدَح لبساطتها. بُنيت بيئة التطوير أصلاً لاستخدامها في مشروع !TeachScheme (المعروف الآن باسم ProgramByDesign)، وهو جهد تواصل من جامعة نورث إيسترن وعدة جامعات تابعة لجذب طلاب المدارس الثانوية إلى دورات علوم الحاسوب في المستوى الجامعي.
من جهة ثانية، يوفر المحرر تمييزًا للنحو وأخطاء وقت التشغيل، ومطابقة الأقواس، ومصحح أخطاء ومحلل خطوات جبري. وتشمل ميزاته الصديقة للطلاب دعم مستويات لغوية متعددة. كما يحتوي على دعم متكامل للمكتبات، وأدوات تحليل متطورة للمبرمجين المتقدمين. وعلاوة على ذلك، تُدعم البرمجة الموجهة نحو الوحدات باستخدام متصفح الوحدات، والاختبار المتكامل وقياسات التغطية، ودعم إعادة الهيكلة. ويوفر وصولاً متكاملاً وسياقيًا إلى نظام مساعدة شامل يسمى «Help Desk».
التطبيقات والاستخدام العملي
المراجع
من جهة ثانية، وتُستعمل راكيت لتعليم الطلاب الجبر عن طريق تصميم الألعاب في منهج بوتستراب.
ومن جهة أخرى، تتمتع راكيت بعدة ميزات مفيدة للغات التجارية، منها القدرة على ترجمة ملفات تنفيذية مستقلة، ومحلل أداء ومصحح أخطاء متضمن في بيئة التطوير، وإطار عمل لاختبار الوحدات.
إضافةً إلى ذلك، بعيدًا عن أساسها في نظرية لغات البرمجة، صُمِّمَت راكيت لتكون لغة عامة الغرض لنظم الإنتاج. وبناءً على ذلك، يتميز توزيع راكيت بمكتبة واسعة تغطي برمجة الأنظمة والشبكات، وتطوير الويب، وواجهة موحدة لنظام التشغيل، وواجهة وظائف خارجية ديناميكية، وعدة نكهات من التعبيرات النمطية، ومولدات المحلل، والبرمجة المنطقية، وإطار عمل كامل لواجهة المستعمل الرسومية.
كذلك، استُخدمت راكيت في مشاريع تجارية وتطبيقات ويب. ومن الأمثلة البارزة موقع هكر نيوز، الذي يعمل على لغة آرك المطورة بلغة راكيت. واستعملت شركة Naughty Dog راكيت لغةً للبرمجة النصية في عدة ألعاب فيديو.
📝 هل في هذه المقالة خطأ؟
إذا وجدت معلومة تحتاج تصحيحاً أو إضافة، أو أردت حذف المقالة، أرسل لنا طلباً وسنراجعه.
ما رأيك في هذه المقالة؟