أوبن ليسب
OpenLisp هي لغة برمجة من عائلة Lisp ، طوّرها كريستيان جوليان [ 1 ] من شركة Eligis . وهي تتوافق [ 2 ] [ 3 ] [ 4 ] مع المعيار الدولي لـ ISLISP الصادر بالاشتراك بين المنظمة الدولية للتوحيد القياسي (ISO) واللجنة الكهروتقنية الدولية (IEC)، ISO/IEC 13816:1997(E)، [ 5 ] [ 6 ] والمعدل إلى ISO/IEC 13816:2007(E). [ 7 ]
كُتبت لغة OpenLisp بلغات البرمجة C و Lisp، وتعمل على معظم أنظمة التشغيل الشائعة . تُصنف OpenLisp كتطبيق ISLISP ، ولكنها تحتوي أيضًا على العديد من الامتدادات المتوافقة مع Common Lisp (مثل hashtable و readtable و package و defstruct و sequences و rational numbers) ومكتبات أخرى ( مثل network socket و regular expression و XML و Portable Operating System Interface ( POSIX ) و SQL و Lightweight Directory Access Protocol (LDAP)). [ 8 ]
يتضمن OpenLisp مترجمًا مرتبطًا بحلقة القراءة والتقييم والطباعة (REPL)، وبرنامج تجميع Lisp (LAP) ومترجمًا خلفيًا للغة C.
الأهداف
الهدف الرئيسي من هذه النسخة من لغة ليسب هو تطبيق نظام متوافق تمامًا مع معيار ISLISP (عند تشغيلها باستخدام --islispعلامة، فإنها تلتزم التزامًا صارمًا بمواصفات ISO/IEC 13816:2007(E)). أما الهدف الثانوي فهو توفير نظام ليسب متكامل قابل للتضمين والربط بلغات C/ C++ أو جافا (عبر واجهة جافا الأصلية JNI). وتُستخدم آلية رد نداء للتواصل مع البرنامج الخارجي. ومن الأهداف الأخرى إمكانية استخدامها كلغة برمجة نصية أو لغة ربط ، وإنتاج برامج تنفيذية مستقلة .
رخصة
على الرغم من اسمه ، فإن OpenLisp برنامج احتكاري . يتوفر مترجمه مجانًا لأي استخدام غير تجاري.
واجهة المستخدم
يعمل OpenLisp بشكل أساسي في وضع وحدة التحكم: cmd.exeعلى نظام التشغيل Microsoft Windows ، ومحاكي الطرفية على الأنظمة القائمة على Unix .
;; OpenLisp v11.xy (Build: XXXX) by C. Jullien [Jan 01 20xx - 10:49:13] ;; حقوق النشر © Eligis - 1988-20xx. ;; النظام 'sysname' (64 بت، 8 وحدات معالجة مركزية) على 'hostname'، ASCII. ;; الحمد لله، OpenLisp عادت من جديد! ؟ ( fib 20 ) ;; الوقت المنقضي = 0.003 ثانية، (0 gc). = 6765 ؟ _تشمل الحلول البديلة تشغيل OpenLisp من Emacs عبر إعداد Emacs inferior-lisp-mode، أو استخدام بيئة تطوير متكاملة (IDE) تدعم صيغة OpenLisp . ويوفر LispIDE من DaanSystems هذه الميزة بشكل أصلي.
تكنولوجيا
مدير الذاكرة
يستخدم OpenLisp داخليًا الذاكرة الافتراضية لتخصيص الكائنات وتوسيعها تلقائيًا. تُخصص الكائنات الصغيرة من النوع نفسه باستخدام تنظيم ذاكرة Bibop (حقيبة كبيرة من الصفحات). أما الكائنات الكبيرة فتستخدم وسيطًا يشير إلى الكائن الحقيقي في كومة Lisp. وتعتمد آلية جمع البيانات المهملة المحافظة على أسلوب التحديد والمسح مع كومة التجميع (يمكن تهيئة مرحلة المسح لاستخدام الخيوط ).
أنواع البيانات
تستخدم لغة OpenLisp بنية مُوسومة (وسم 4 بت على 32 بت ، ووسم 5 بت على 64 بت ) للتحقق السريع من أنواع البيانات (أعداد صحيحة صغيرة، أعداد عشرية، رموز، سلاسل نصية، متجهات). تُفكك الأعداد الصحيحة الصغيرة (28 بت على 32 بت، و59 بت على 64 بت) وتُغلّف الأعداد الصحيحة الكبيرة (32/64 بت). وكما هو مطلوب في لغة ISLISP، تُطبّق أيضًا العمليات الحسابية ذات الدقة العشوائية (الأعداد الكبيرة جدًا). أما الأحرف (وبالتالي السلاسل النصية) فتكون إما 8 بت ( ANSI ، EBCDIC ) أو 16/32 بت في حال تفعيل دعم Unicode .
المُقيِّم والمُجمِّع
تمت كتابة نواة لغة ليسب والمترجم الأصلي والمكتبات الأساسية يدويًا بلغة C ، ثم تتم ترجمة لغة LAP الوسيطة التي ينتجها المترجم إلى لغة C بواسطة مولد كود الواجهة الخلفية C.
تاريخ
في عام 1988، كان الدافع الأول وراء OpenLisp هو تطبيق مجموعة فرعية من لغة Lisp لتوسيع EmACT، وهي نسخة من Emacs . وسرعان ما أصبح ISLISP خيارًا بديهيًا. وتلا ذلك المزيد من التطوير.
| سنة | إصدار | الميزة الرئيسية |
|---|---|---|
| 1988 | 1.0 | بدأت لغة OpenLisp كلغة تجريبية تُسمى MLisp (Minimal Lisp) لتجربة أفكار من عملية معايير ISLISP |
| 1993 | 3.3 | أول منفذ على جهاز 64 بت ( DEC Alpha OSF/1 )؛ تغيير الاسم من MLisp إلى OpenLisp |
| 1994 | 4.0 | الاستخدام التجاري الأول |
| 1995 | 4.5 | دعم تدفقات المقابس |
| 1997 | 5.7 | تُعد OpenLisp أول لغة Lisp تُطبق معيار ISLISP ISO/IEC 13816:1997(E). [ 10 ] |
| 1998 | 5.8 | دعم اختياري لليونيكود |
| 2000 | 6.6 | مُترجم لغة ليسب إلى لغة LAP؛ يتم تفسير لغة LAP بواسطة آلة افتراضية مضمنة في OpenLisp؛ تحسنت السرعة بمقدار الضعف تقريبًا |
| 2003 | 7.5 | واجهة خلفية لتحويل ملفات Lisp إلى C؛ قادرة على تجميع تطبيق يحتوي على العديد من ملفات Lisp إلى ملف تنفيذي مستقل؛ تم تحسين السرعة من 10 أضعاف إلى 20 ضعفًا |
| 2007 | 8.7 | التغييرات لتتوافق مع مراجعة ISO/IEC 13816:2007(E) [ 7 ] |
| 2010 | 9.2 | دعم أصلي للحسابات الصحيحة ذات الدقة العشوائية |
| 2021 | 11.2 | تمت إضافة امتداد تنسيق CLtL بالكامل؛ تحسين اكتشاف الذاكرة المخصصة |
| 2022 | 11.4 | أدى تعديل كتل التنشيط إلى تسريع المفسر بنسبة 15% تقريبًا. نسخة تجريبية من ASDF. |
| 2022 | 11.5 | أصبحت استدعاءات الدوال العامة أسرع بثلاث مرات تقريبًا. تم تحسين وحدة التعبيرات النمطية الداخلية. |
| 2022 | 11.6 | أضف نوع <simple-bit-vector> ووظائف BIT ذات الصلة المشابهة لما يعادلها في CLtL. |
| 2022 | 11.7 | الإصدار الحالي |
| 1958 | 1960 | 1965 | 1970 | 1975 | 1980 | 1985 | 1990 | 1995 | 2000 | 2005 | 2010 | 2015 | 2020 | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| LISP 1، 1.5، LISP 2 (مهجورة) | |||||||||||||||
| ماكليس | |||||||||||||||
| تداخل | |||||||||||||||
| MDL | |||||||||||||||
| آلة التأتأة | |||||||||||||||
| مخطط | R5RS | R6RS | R7RS صغير | ||||||||||||
| لا شيء | |||||||||||||||
| ZIL (لغة تنفيذ Zork) | |||||||||||||||
| فرانز ليسب | |||||||||||||||
| muLisp | |||||||||||||||
| لغة الشفرة الشائعة | معيار ANSI | ||||||||||||||
| لي لِسْب | |||||||||||||||
| مخطط معهد ماساتشوستس للتكنولوجيا | |||||||||||||||
| XLISP | |||||||||||||||
| تي | |||||||||||||||
| شيز سكيم | |||||||||||||||
| إيماكس ليسب | |||||||||||||||
| أوتو ليسب | |||||||||||||||
| PicoLi sp | |||||||||||||||
| غامبيت | |||||||||||||||
| EuLisp | |||||||||||||||
| لغة ISLISP | |||||||||||||||
| أوبن ليسب | |||||||||||||||
| مخطط PLT | مضرب | ||||||||||||||
| لغة نيو ليسب | |||||||||||||||
| جنو غايل | |||||||||||||||
| لغة ليسب المرئية | |||||||||||||||
| كلوجر | |||||||||||||||
| قوس | |||||||||||||||
| LFE | |||||||||||||||
| هي | |||||||||||||||
الموانئ
يعمل OpenLisp على العديد من أنظمة التشغيل ، بما في ذلك Windows ، ومعظم أنظمة Unix وأنظمة POSIX ( Linux ، وmacOS ، وFreeBSD ، وOpenBSD ، وNetBSD ، وSolaris ، و HP-UX ، وAIX ، و Cygwin ، و QNX )، و MS-DOS ، وOS/2 ، و Pocket PC ، و OpenVMS ، وz/OS . يحتوي قسم التنزيلات على الموقع الرسمي على أكثر من 50 إصدارًا.
المكتبات القياسية
الموصلات
يمكن لـ OpenLisp التفاعل مع الوحدات المكتوبة بلغة C باستخدام واجهة الوظائف الخارجية (FFI). تم توسيع تدفقات ISLISP لدعم مقابس الشبكة ( ./netيتضمن الدليل نماذج لبروتوكول نقل النص التشعبي (http)، وتدوين كائنات جافا سكريبت (JSON)، وبروتوكول مكتب البريد 3 (POP3)، وبروتوكول نقل البريد البسيط (SMTP)، وTelnet ، وRSS ). كما يمكن لقارئ لغة الترميز القابلة للتوسيع ( XML ) المبسط تحويل XML إلى Lisp. يمكن استخدام وحدة SQL أساسية مع MySQL و ODBC و SQLite و PostgreSQL . ويمكن لوحدة القيم المفصولة بفواصل (CSV) قراءة وكتابة ملفات CSV.
أدوات
تشمل أدوات المطورين تسجيل البيانات ، وأداة الطباعة الجميلة ، وأداة تحليل الأداء ، وبرمجة التصميم التعاقدي ، واختبارات الوحدة .
الخوارزميات
تتوفر بعض الخوارزميات المعروفة في ./contribالدليل (خوارزمية دانتزيج سيمبلكس ، خوارزمية ديكسترا ، خوارزمية فورد-فولكرسون ). يتم توزيع الوحدات باستخدام تراخيص BSD .
أصل الاسم
يشير البادئة Open إلى الأنظمة المفتوحة وليس إلى نموذج المصادر المفتوحة . [ 11 ]
تم اختيار الاسم في عام 1993 ليحل محل اسم الرمز الداخلي لـ MLisp الذي كان يستخدم بالفعل بواسطة Gosling Emacs (كخليفة لـ Mocklisp ).
تختلف لغة برمجة OpenLisp عن OpenLISP، وهو مشروع بدأ في عام 1997 لتنفيذ بروتوكول فصل المحدد/المعرف .
المترجم
يصف هذا القسم كيف يقوم المترجم بتحويل كود لغة ليسب إلى لغة سي.
شفرة المصدر
دالة أعداد فيبوناتشي (هذا التعريف الكلاسيكي المستخدم في معظم المعايير ليس الطريقة الأكثر كفاءة للحساب fib)
( defun fib ( n ) ( cond (( eq n 1 ) 1 ) (( eq n 2 ) 1 ) ( t ( + ( fib ( - n 1 )) ( fib ( - n 2 ))))))رمز وسيط LAP
يقوم مُترجم لغة ليسب بترجمة كود المصدر الخاص بلغة ليسب إلى الكود الوسيط التالي. يلي ذلك مرحلة تحسين أولية تستخدم هذا التنسيق الوسيط لتحليل التعليمات وتحسينها. بعد التحسين، يكون كود LAP النهائي كما يلي:
(( fentry fib 1 0 0 ) ( param 0 ) ( jeq _l004 '1 ) ( jneq _l003 '2 ) ( move a1 '1 ) ( return ) _l003 ( gsub1 a1 ) ( recurse 1 ) ( move a2 a1 ) ( param 0 ) ( gsub a1 '2 ) ( recurse 1 ) ( gadd a2 a1 ) _l004 ( return ) ( end ))ترجمة كود C
وأخيرًا، يستخدم مولد كود C كود LAP لترجمة التعليمات في لغة C.
static POINTER OLDEFCOMPILED1 ( olfib_00 , p1 ) { POINTER a1 ; POINTER VOLATILE a2 ;ollapenter ( SN_OLFIB_00 ); a1 = p1 ; if ( eq ( a1 , olmakefix ( 1 ))) goto _l004 ; if ( ! eq ( a1 , olmakefix ( 2 ))) goto _l003 ; ollapleave ( SN_OLFIB_00 ); return olmakefix ( 1 ); _l003 : a1 = ollapgsub ( a1 , olmakefix ( 1 )); a2 = olfib_00 ( a1 ); a1 = ollapgsub ( p1 , olmakefix ( 2 )); a1 = olfib_00 ( a1 ); a1 = ollapgadd ( a2 , a1 ); _l004 : ollapleave ( SN_OLFIB_00 ); return a1 ; }دليل الأسلوب
طول الخط
يقبل OpenLisp أسطرًا ذات طول غير محدود. أما الأسلوب الموصى به فهو ألا يتجاوز طول كل سطر نصي في الكود 80 حرفًا .
التبني
تم اختيارها من قبل نظام SDF للوصول العام Unix، وهو نظام غير ربحي للوصول العام Unix على الإنترنت [ 12 ] [ 13 ] كإحدى لغات البرمجة المتاحة عبر الإنترنت.
تستخدم شركة Bricsys لغة OpenLisp لتنفيذ لغة AutoLISP في نظام التصميم بمساعدة الحاسوب Bricscad الخاص بها . [ 14 ]
تمت كتابة MEVA [ 15 ] بالكامل باستخدام OpenLisp.
تستخدم Università degli Studi di Palermo OpenLisp لتدريس لغة Lisp. [ 16 ]
مراجع
- ↑ باركييه، بيير (2000). "JTC1/SC22 N3170" . ISO/IEC ( FTP ) . تم الاطلاع عليه بتاريخ 11 مارس 2012 .(للاطلاع على المستندات، انظر صفحة المساعدة: FTP )
- ^ سيمونسن ، كيلد (13 آذار / مارس 1999). "Islisp - الأسئلة الشائعة" . آيزو/إيك . تم الاسترجاع 11 نوفمبر 2016 .
- ↑ نوبوتو، إيزومي (جامعة توهوكو، كلية الدراسات العليا)؛ تاكاياسو، إيتو (جامعة توهوكو، كلية الدراسات العليا) (1999). "مترجم ومُجمِّع لغة ليسب القياسية ISO، ISLISP" . معاملات جمعية معالجة المعلومات في اليابان . معاملات جمعية معالجة المعلومات في اليابان. ISSN 0387-5806 . مؤرشف من الأصل في 26 أغسطس 2018. تم الاسترجاع في 17 يونيو 2013 .
{{cite journal}}: صيانة CS1: أسماء متعددة: قائمة المؤلفين ( رابط ) - ↑ ماك جونز، بول (2010). "ISLISP" . مجموعة الحفاظ على البرمجيات . تم الاسترجاع في 18 مارس 2012 .
- ↑ "ISO/IEC 13816:1997(E)" . المنظمة الدولية للتوحيد القياسي . تم الاطلاع عليه بتاريخ 11 نوفمبر 2018 .
- ↑ باركييه، بيير (منسق اللجنة الفنية المشتركة 1، اللجنة الفرعية 22، فريق العمل 16) (1996). "ISO/IEC JTC1 SC22 WG16 N177 – تصويت DIS" . ISO/IEC . تاريخ الاسترجاع: 15 مارس 2012 .
{{cite web}}: صيانة CS1: الأسماء الرقمية: قائمة المؤلفين ( رابط ) - 1 2 "ISO/IEC 13816:2007(E)" . المنظمة الدولية للتوحيد القياسي . تم الاطلاع عليه بتاريخ 11 نوفمبر 2018 .
- ^ جوليان كريستيان (2011). "الدليل المرجعي لـ OpenLisp v9.8.0" . إليجيس . تم الاسترجاع 14 مارس 2012 .
- ^ جوليان كريستيان (2011). "سجل التغيير OpenLisp" . إليجيس . تم الاسترجاع 15 مارس 2012 .
- ↑ رينهولز، ويليام (4 أغسطس 1999). "JTC1/SC22 N2969" . المنظمة الدولية للمقاييس/اللجنة الكهروتقنية الدولية. مؤرشف من الأصل في 26 يناير 2021. تم الاطلاع عليه في 11 نوفمبر 2016 .
- ^ جوليان كريستيان (2011). "الأسئلة الشائعة حول OpenLisp" . إليجيس . تم الاسترجاع 15 مارس 2012 .
- ↑ ستوفر، جين مايكل (2005). "7.2 اللغات على SDF" . نظام يونكس للوصول العام SDF . تم الاطلاع عليه في 14 مارس 2012 .
- ↑ "شركات الاستضافة" . رابطة مستخدمي لغة ليسب (ALU). مؤرشف من الأصل في 9 فبراير 2011. تم الاطلاع عليه في 18 مارس 2012 .
- ↑ "أخبار بريكسكاد" . بريكسكاد. 2009. تم الاطلاع عليه بتاريخ 20 مارس 2012 .
- ↑ "الاستخبارات التنافسية ومشاكل اتخاذ القرار" . آموس ديفيس. 2013. تم الاطلاع عليه بتاريخ 30 سبتمبر 2014 .
- ^ "كورسو دي إنفورماتيكا تيوريكا" . جامعة الدراسات في باليرمو. 2013 . تم الاسترجاع 22 مارس 2013 .
روابط خارجية
- عائلة لغات البرمجة ليسب
- لغة البرمجة ليسب
- لغات البرمجة التي تم إنشاؤها عام 1988
