جنو غايل

لغة جنو الذكية الشاملة للإضافات [ 3 ] ( جنو غايل ) هي نظام لغة الإضافات المفضل لمشروع جنو [ 4 ] ، وتتميز بتطبيق للغة البرمجة سكيم . صدرت نسختها الأولى عام 1993. [ 1 ] بالإضافة إلى أجزاء كبيرة من معايير سكيم، تتضمن غايل سكيم إضافات معيارية للعديد من مهام البرمجة المختلفة. [ 5 ] [ 6 ]

لتوسيع البرامج، توفر لغة Guile مكتبة libguile التي تسمح بتضمين اللغة في برامج أخرى، ودمجها بشكل وثيق من خلال واجهة برمجة التطبيقات (API) للغة C ؛ وبالمثل، يمكن إتاحة أنواع البيانات الجديدة والإجراءات الفرعية المعرفة من خلال واجهة برمجة التطبيقات C كامتدادات للغة Guile. [ 7 ]

تُستخدم لغة Guile في العديد من البرامج تحت مظلة مشروع GNU ( GDB ، Make ، Guix ، GNU TeXmacs ، GnuCash ، LilyPond ، Lepton-EDA ...) [ 8 ] ولكنها تُستخدم أيضًا خارج ذلك، على سبيل المثال في انشقاق جوجل .

خطة ماكرة

لغة Guile Scheme هي لغة برمجة عامة الأغراض وعالية المستوى ، تتميز بمرونتها التي تسمح بالتعبير عن المفاهيم بعدد أقل من أسطر البرمجة مقارنةً بلغات مثل C. فعلى سبيل المثال، يتيح نظام الماكرو المُحسّن فيها إضافة عناصر نحوية خاصة بالمجال دون تعديل Guile. تُطبّق Guile معيار Scheme R5RS، ومعظم معايير R6RS وR7RS، [ 9 ] والعديد من طلبات تنفيذ Scheme (SRFI)، بالإضافة إلى العديد من الإضافات الخاصة بها.

تتلخص الفكرة الأساسية لـ Guile Scheme في أن "المطور يُنفذ الخوارزميات وهياكل البيانات الأساسية بلغة C أو C++، ويُصدّر الدوال والأنواع لاستخدامها في الكود المُفسَّر. يصبح التطبيق مكتبة من العناصر الأساسية يُديرها المُفسِّر، جامعًا بين كفاءة الكود المُجمَّع ومرونة التفسير." [ 10 ] وبالتالي، يُمكن توسيع Guile Scheme (وغيرها من اللغات المُنفَّذة بواسطة Guile) بأنواع بيانات وروتينات فرعية جديدة مُنفَّذة عبر واجهة برمجة تطبيقات C.

توفر التوزيعة القياسية وحداتٍ لاستدعاءات نظام واجهة نظام التشغيل المحمولة ( POSIXوجدولة المهام ، وواجهة وظائف خارجية ، ومعالجة XML باستخدام تعابير S عبر SXML وSXPath وSXSLT، و HTTP وواجهات برمجة تطبيقات الويب الأخرى ، والاستمراريات المحددة ، وبرمجة المصفوفات ، [ 11 ] ووظائف أخرى. [ 5 ] [ 6 ] يمكن لبرامج Guile استخدام إمكانيات SLIB ، مكتبة Scheme المحمولة. [ 12 ]

تفاصيل التنفيذ

عند استخدام الاستمراريات مع call/cc ، وهو شرط من شروط معيار Scheme، يقوم Guile بنسخ مكدس التنفيذ إلى الكومة ثم إعادته. [ 13 ] ويقترح دليل المستخدم استخدام الاستمراريات المحددة بدلاً من ذلك، لأنها تتميز بتنفيذ أكثر كفاءة. [ 14 ]

نظرًا لأن التعليمات البرمجية الأجنبية قد تحتوي على مؤشرات إلى كائنات Scheme، فإن Guile يستخدم جامع القمامة المحافظ Boehm–Demers–Weiser (BDW) . [ 15 ]

تاريخ

يُقدّم دليل لغة غايل تفاصيل عن نشأة اللغة وتاريخها المبكر. [ 16 ] وفيما يلي ملخص موجز:

بعد نجاح إيماكس في مجتمع البرمجيات الحرة ، كتطبيق قابل للتوسيع والتخصيص بدرجة عالية عبر لغة الامتداد (والتنفيذ الجزئي) إيماكس ليسب ، بدأ المجتمع بالتفكير في كيفية تطبيق استراتيجية التصميم هذه على بقية نظام جنو. بدأ توم لورد العمل مبدئيًا على بيئة تشغيل لغة قابلة للتضمين تُسمى لغة امتداد جنو (GEL)، والتي استندت إلى تطبيق أوبراي جافر للغة سكيم SCM (والذي بدوره استند إلى SIOD لجورج كاريت ). [ 17 ] [ 18 ] أقنع لورد ريتشارد ستالمان بجعل GEL لغة الامتداد الرسمية لمشروع جنو، استنادًا إلى حجة أن سكيم هي لهجة ليسب أنظف من إيماكس ليسب، وأن GEL يمكن تطويرها لتنفيذ لغات أخرى على نفس بيئة التشغيل، وتحديدًا إيماكس ليسب. بعد أن اكتشف لورد وجود تعارض في التسمية بين GEL ولغة برمجة أخرى، طلب اقتراحات لاسم جديد. من بين عدة مشاركات في مجموعات أخبار يوزنت ، اختار لورد اسم غايل بشكل مثير للجدل بناءً على اقتراح من لي توماس. [ 19 ] [ 20 ] [ 21 ] [ 22 ]

خلال تطوير لغة Guile (التي كانت تُعرف آنذاك باسم GEL) وقبل إطلاقها للجمهور، كانت لغة Tcl، وهي لغة امتداد، تكتسب شعبية متزايدة ويتم الترويج لها كلغة امتداد عالمية. رأى ستالمان أن Tcl تفتقر إلى الإمكانيات كلغة امتداد، ونشر نقدًا لها في مجموعة أخبار comp.lang.tcl، مما أشعل جدلًا حادًا عُرف باسم "حرب Tcl". [ 23 ] ولأن الإعلان الرسمي عن مشروع Guile تزامن مع نقاش Tcl، فقد شاع اعتقاد خاطئ بأن Guile نشأت كرد فعل على ذلك.

بعد الإصدار الأولي لبرنامج Guile، تراجع تطويره لسنوات عديدة، لكن شهد عامي 2009-2010 تحسينات كبيرة، [ 24 ] وتم إصدار Guile 2.0 في عام 2011 مع بنية تحتية جديدة للمترجم ، وتنفيذ آلة افتراضية ، والتحول إلى جامع القمامة Boehm–Demers–Weiser ، والعديد من التحسينات على لغة Guile Scheme، وتغييرات رئيسية أخرى. [ 25 ]

يتمثل أحد أهداف Guile في تمكين استخدام لغات أخرى إلى جانب Scheme، بحيث يصبح Guile بيئة تشغيل محايدة للغة. وقد بُذلت محاولات عديدة لتحقيق ذلك في الإصدارات السابقة: لهجة من Scheme تختلف عنها فقط في تركيبها الشبيه بلغة C، وترجمة من Emacs Lisp ، ومحول Tcl مستوحى من tkWWW ، ولغة تُشبه إلى حد كبير لغة Logo . [ 26 ] مع الإصدار 2.0، انتقل المشروع بنجاح إلى منهجية بناء المترجمات ، مما يسمح بتعريف المترجمات من لغة إلى أخرى، عادةً من لغة عالية المستوى إلى تمثيل وسيط منخفض المستوى ، وصولًا إلى بايت كود الآلة الافتراضية أو كود الآلة الأصلي . [ 27 ] [ 28 ]

في 16 مارس 2017، تم إصدار Guile 2.2.0 مع مُصرّف مُحسِّن جديد وآلة افتراضية عالية الأداء للسجلات. ووفقًا لإعلان الإصدار الذي قدّمه آندي وينغو، أظهرت البرامج العملية غالبًا تسارعًا بنسبة 30% أو أكثر مع Guile 2.2 مقارنةً بسلسلة 2.0 السابقة. كما خفّض Guile 2.2.0 من استهلاك الذاكرة، وسرّع مُفسّر "eval"، وقدّم دعمًا أفضل للبرمجة متعددة النوى، وأزال أي حد ثابت على استدعاءات الدوال التكرارية. ودعم أيضًا إنشاء مرافق التزامن في مساحة المستخدم التي تُتيح مُضاعفة ملايين "الألياف" الخفيفة المتزامنة، وقدّم تطبيقًا كاملًا للغة Elisp متوافقًا مع Emacs، حيث يُنفّذ جميع ميزات Elisp وخصائصها بنفس طريقة Emacs. [ 29 ]

في 16 يناير 2020، تم إصدار Guile 3.0.0 مع خاصية توليد الكود الأصلي في الوقت المناسب ( JIT ) لتحسين الأداء بشكل ملحوظ. بالمقارنة مع الإصدار 2.2، تحسن أداء الاختبارات المعيارية الدقيقة بمقدار الضعف تقريبًا بشكل عام، بينما وصلت سرعة بعض الاختبارات المعيارية الفردية إلى 32 ضعفًا. كما تضمن الإصدار دعمًا للتعريفات والتعبيرات المتداخلة في السياقات المعجمية، ودعمًا أصليًا للاستثناءات المهيكلة، ودعمًا أفضل لمعايير R6RS وR7RS Scheme، بالإضافة إلى العديد من التحسينات. [ 30 ] [ 31 ]

19581960196519701975198019851990199520002005201020152020
 LISP 1، 1.5، LISP 2 (مهجورة)
 ماكليس
 تداخل
 MDL
 آلة التأتأة
 مخطط R5RS R6RS R7RS صغير
 لا شيء
 ZIL (لغة تنفيذ Zork)
 فرانز ليسب
 muLisp
 لغة الشفرة الشائعة معيار ANSI
 لي لِسْب
 مخطط معهد ماساتشوستس للتكنولوجيا
 XLISP
 تي
 شيز سكيم
 إيماكس ليسب
 أوتو ليسب
 PicoLi sp
 غامبيت
 EuLisp
 لغة ISLISP
 أوبن ليسب
 مخطط PLT مضرب
 لغة نيو ليسب
 جنو غايل
 لغة ليسب المرئية
 كلوجر
 قوس
 LFE
 هي

تكامل إيماكس

كانت هناك عدة محاولات سابقة غير مكتملة لاستبدال أو استكمال لغة Emacs Lisp الإضافية بلغة Guile، بالتوازي مع الجهود المبذولة لدعم لغات أخرى في Guile.

مع الإصدار 2.0 من Guile، بدأت محاولة جديدة لتطبيق لغة Elisp على منصة Guile البرمجية واستبدال تطبيق Elisp الخاص بـ Emacs بتطبيق libguile، وقد حققت هذه المحاولة تقدمًا ملحوظًا من خلال مشاريع برنامج Google Summer of Code . [ 32 ] يمكن لـ Emacs المبني على Guile أن يوفر أداءً أفضل لتنفيذ Emacs Lisp، ويدعم ميزات لغة Emacs Lisp الجديدة بسهولة أكبر، ويجعل مكتبات Guile المكتوبة بلغات برمجة أخرى متاحة لرمز Emacs Lisp، ويسمح بكتابة إضافات Emacs بلغات برمجة أخرى يدعمها Guile، كل ذلك مع الحفاظ على التوافق التام مع قواعد بيانات رمز Emacs Lisp الحالية.

اعتبارًا من أكتوبر 2014 وصل تطبيق Guile Emacs إلى مرحلةٍ تمكّنه من تشغيل معظم أكواد Emacs Lisp بكفاءة. وتشمل المشاكل المتبقية أو المحتملة اختلاف التمثيل الداخلي لسلاسل Emacs Lisp عن سلاسل Scheme، واختلاف طريقة تعامل Emacs Lisp وScheme مع القيم المنطقية false وقوائم فارغة، وعدم تكامل وحدات Emacs Lisp البرمجية مع Scheme، وعدم تصميم Emacs Lisp للتزامن، وقابلية نقل Guile إلى المنصات التي يدعمها Emacs. وتشمل المخاوف الأخرى التي أثارها مجتمع Emacs الحجم النسبي لمجتمعي Emacs وGuile، وما إذا كان توسيع Emacs ليشمل لغات برمجة أخرى غير Emacs Lisp سيؤدي إلى انقسام في المجتمع. [ 33 ]

أُعلن في مؤتمر EmacsConf 2024 عن إعادة إطلاق Guile-Emacs. [ 34 ] [ 35 ]

تكامل GNU make

يمكن بناء GNU make مع دعم GNU Guile كلغة امتداد مضمنة. [ 36 ]

مراجع

  1. 1 2 بلاندي 1997، ص. 102.
  2. "تم إصدار GNU Guile 3.0.11" . تم الاطلاع عليه بتاريخ 2 ديسمبر 2025 .
  3. "GNU Guile (حول Guile)" . مشروع GNU. Guile هي لغة GNU الذكية الشاملة للإضافات، وهي لغة الإضافات الرسمية لنظام تشغيل GNU.
  4. "معايير برمجة جنو، أي اللغات يجب استخدامها" . مشروع جنو.
  5. 1 2 "دليل Guile، مرجع واجهة برمجة التطبيقات" . مشروع GNU.
  6. 1 2 "دليل Guile، وحدات Guile" . مشروع GNU.
  7. "لتشجيع التخصيص، توفر Guile واجهات واسعة النطاق، مما يسمح لرمز C بالتفاعل مع بيئة Scheme. يمكن لرمز C إنشاء كائنات Scheme والوصول إليها وتعديلها بحرية؛ ويمكن لدوال C استدعاء دوال Scheme والعكس صحيح؛ ويمكن لرمز C إضافة أنواع جديدة إلى بيئة Scheme والاستفادة من خاصية جمع البيانات المهملة في Guile... يتم تنفيذ معظم إجراءات Scheme القياسية بواسطة دوال C، وهي مرئية لعملاء Guile؛ على سبيل المثال، يمكن للتطبيقات استدعاء دالة Cscm_cons، وهي التنفيذ الأساسي لإجراءات Schemecons." بلاندي 1997، ص 94، 96.
  8. "تطبيقات باستخدام Guile" . مشروع جنو. مؤرشف من الأصل بتاريخ 24-11-2017.
  9. "عدم توافق R7RS (دليل مرجعي لـ Guile)" . مشروع جنو . تم الاسترجاع في 2020-01-20 .
  10. بلاندي 1997، ص 87.
  11. "دليل Guile، المصفوفات" . مشروع GNU.
  12. "دليل Guile، مكتبة SLIB" . مشروع GNU. لا يتم تضمين مكتبة SLIB في توزيعة Guile، ولكن يمكن تثبيتها بشكل منفصل.
  13. "نظرًا لأن لغة Guile تسمح للدوال الخارجية ودوال Scheme باستدعاء بعضها البعض بحرية، فقد يتضمن استمرار Guile إطارات مكدس C وScheme. ولتبسيط الأمر، يقوم تطبيق Guilecall/ccبنسخ مكدس C بالكامل إلى الكومة؛ بينما يؤدي استدعاء الاستمرار إلى نسخ المكدس مرة أخرى من الكومة واستخدام الدالةlongjmpلإعادة تنشيطه. لهذا التطبيق عدد من العيوب..."، بلاندي 1997، ص 99.
  14. "دليل غايل، التكملات" . مشروع جنو.
  15. "دليل غايل، المحافظ العام" . مشروع جنو.
  16. "دليل غايل، التاريخ" .
  17. «من الصعب تحديد مصمم لغة Guile بدقة. لكنّ جزءًا كبيرًا من الفضل يعود بالتأكيد إلى أوبراي جافر، الذي يُشكّل مُفسّر لغة Scheme الممتاز، SCM، جوهر التطبيق. وقد صمّم مايلز بدر نظام الوحدات النمطية وبناه...» «تشريح لغة Guile، واجهة Tcl/Tk»، 1995
  18. إليكم نبذة تاريخية موجزة جدًا عن هذا المترجم. آمل أن يُساهم الأشخاص الذين شاركوا في تطويره سابقًا بمزيد من المعلومات في هذه الوثيقة. SIOD: كتب جورج كاريت النسخة الأولى من SIOD. على الرغم من إعادة كتابة أو استبدال معظم هذا الكود بمرور الوقت، إلا أن مُجمِّع البيانات المهملة من SIOD لا يزال جزءًا مهمًا من Guile. لا يزال SIOD قيد التطوير النشط ومتاحًا مجانًا. حجمه صغير جدًا. (Guile Scheme 1995)
  19. "تم اقتراح اسم Guile لأول مرة في مناقشة على Usenet بواسطة Lee Thomas." Guile Scheme 1995.
  20. لي توماس (1994-11-04). "اسم الوردة" . مجموعة الأخبار : gnu.misc.discuss . 
  21. "المكر - سببان إضافيان لتفضيله" .
  22. "GEL: تغيير هام في الاسم" .
  23. أرشيف حرب Tcl
  24. وينغو، آندي (16 يوليو 2023). "تدوينات قديمة لوينغو (بدءًا من رقم 328)" . أدفوغاتو.
  25. "أخبار غايل" . مشروع جنو. مؤرشف من الأصل بتاريخ 28-03-2014.
  26. لورد، توماس (يوليو 1995). "تشريح غايل: واجهة Tcl/Tk" ( PostScript ) . ورشة عمل Tcl/Tk السنوية الثالثة . تورنتو، أونتاريو، كندا: Usenix . تاريخ الاسترجاع: 23 نوفمبر 2010 .
  27. "دليل Guile، لغات أخرى" . مشروع GNU. لا يزال Guile في الأساس Scheme، ولكنه يحاول دعم مجموعة واسعة من لبنات بناء اللغات، بحيث يمكن تنفيذ لغات أخرى فوق Guile.
  28. "دليل Guile، برج المترجم" . مشروع GNU. يُعرّف Guile برجًا من اللغات، بدءًا من Scheme وتبسيطها تدريجيًا إلى لغات تُشبه مجموعة تعليمات الآلة الافتراضية.
  29. "إصدار GNU Guile 2.2.0" . 16-03-2017 . تم الاطلاع عليه بتاريخ 20-01-2020 .
  30. "إصدار GNU Guile 3.0.0" . 16 يناير 2020. تاريخ الاطلاع: 20 يناير 2020 .
  31. "إصدار GNU Guile 3.0.0" . 16 يناير 2020. تاريخ الاطلاع: 20 يناير 2020 .
  32. "بخصوص تطبيق Elisp؟" . بي تي تمبلتون.
  33. "مستقبل إيماكس، وجايل، وإيماكس ليسب" . تم الاطلاع عليه بتاريخ 23-02-2025 .
  34. "إماكس الساحر: إعادة إطلاق Guile-Emacs!" . EmacsConf . تم الاطلاع عليه بتاريخ 24-02-2025 .
  35. "استخدام Guile مع Emacs" . lwn.net . تم الاطلاع عليه بتاريخ 24-02-2025 .
  36. "12.1 تكامل GNU Guile" . gnu.org . تم الاطلاع عليه بتاريخ 16 مارس 2020 .

للمزيد من القراءة