لغة برمجة نظيفة
لغة Clean هي لغة برمجة وظيفية بحتة للأغراض العامة . كانت تُعرف في الأصل باسم نظام Clean المتزامن [ 3 ] أو نظام Clean [ 4 ] [ 5 ]، وقد طوّرها فريق من الباحثين من جامعة رادبود في نيميغن منذ عام 1987 [ 6 ] [ 7 ]. على الرغم من تباطؤ وتيرة تطوير اللغة، لا يزال بعض الباحثين يعملون بها [ 8 ] . في عام 2018، تأسست شركة منبثقة تستخدم لغة Clean [ 9 ] .
سمات
تتشابه لغة Clean في العديد من الخصائص والبنية مع لغة Haskell الشقيقة لها : الشفافية المرجعية ، وفهم القوائم ، والحراس ، وجمع البيانات المهملة ، والدوال ذات الرتبة العليا ، والتطبيق الجزئي ، والتقييم الكسول . مع ذلك، تتعامل Clean مع الحالة القابلة للتغيير والإدخال /الإخراج من خلال نظام أنواع فريد ، على عكس Haskell التي تستخدم المونادات . يستفيد المترجم من نظام الأنواع الفريد لتوليد شيفرة أكثر كفاءة، لأنه يعلم أنه في أي لحظة أثناء تنفيذ البرنامج، لا يمكن أن يوجد سوى مرجع واحد لقيمة ذات نوع فريد. وبالتالي، يمكن تغيير القيمة الفريدة في مكانها . [ 10 ]
تتضمن حزمة التوزيع النظيفة بيئة تطوير متكاملة ( IDE) لنظام التشغيل مايكروسوفت ويندوز .
أمثلة
البداية = "مرحباً بالعالم!"المضروب :
fac :: Int -> Int fac 0 = 1 fac n = n * fac ( n -1 )البداية = الوجه 10 | fac :: Int -> Int fac n = prod [ 1 .. n ] // حاصل ضرب الأعداد من 1 إلى nالبداية = الوجه 10 |
fib :: Int -> Int fib 0 = 1 fib 1 = 1 fib n = fib ( n - 2 ) + fib ( n - 1 )البداية = فيبوناتشي 7 | fibs :: Int Int -> [ Int ] fibs x_2 x_1 = [ x_2 : fibs x_1 ( x_2 + x_1 )]fib :: Int -> Int fib n = ( fibs 1 1 ) !! nالبداية = فيبوناتشي 7 |
( ^ ) infixr 8 :: Int Int -> Int ( ^ ) x 0 = 1 ( ^ ) x n = x * x ^ ( n -1 )يُشير تعريف النوع إلى أن الدالة عبارة عن مُعامل ربط داخلي أيمن ذي أولوية 8: وهذا يعني أن x*x^(n-1)مكافئ لـ x*(x^(n-1))بدلاً من (x*x)^(n-1). هذا المُعامل مُعرّف مُسبقًا في StdEnv، مكتبة Clean القياسية .
كيف يعمل نظام التنظيف
تعتمد الحوسبة على إعادة كتابة الرسوم البيانية واختزالها . الثوابت ، كالأعداد، هي رسوم بيانية، والدوال هي صيغ إعادة كتابة الرسوم البيانية. هذا، بالإضافة إلى الترجمة إلى كود أصلي، يجعل برامج Clean، التي تستخدم تجريدًا عاليًا، تعمل بسرعة نسبية وفقًا لمعايير لعبة قياس أداء لغات البرمجة . [ 11 ] أظهر معيار أداء أُجري عام 2008 أن أداء كود Clean الأصلي يُشابه أداء مُترجم Glasgow Haskell (GHC)، وذلك بحسب المعيار المستخدم. [ 12 ]
تجميع
تتم عملية ترجمة برنامج Clean إلى لغة الآلة على النحو التالي:
- يتم ترجمة ملفات المصدر (.icl) وملفات التعريف (.dcl) إلى Core Clean، وهو إصدار أساسي من Clean، بواسطة واجهة المترجم المكتوبة بلغة Clean.
- يتم تحويل Core clean إلى لغة وسيطة مستقلة عن النظام الأساسي لـ Clean (.abc)، بواسطة الواجهة الخلفية للمترجم المكتوبة بلغة Clean و C.
- يتم تحويل رمز ABC الوسيط إلى رمز الكائن (.o) بواسطة مولد الرموز المكتوب بلغة C.
- يتم ربط رمز الكائن بملفات أخرى في الوحدة النمطية ونظام التشغيل ويتم تحويله إلى ملف تنفيذي عادي باستخدام رابط النظام (عند توفره) أو رابط مخصص مكتوب بلغة Clean على نظام التشغيل Windows .
تمت كتابة الإصدارات السابقة من برنامج Clean بالكامل بلغة C ، وبالتالي تجنب مشاكل التمهيد.
آلة ABC
يُعدّ رمز ABC المذكور أعلاه تمثيلاً وسيطاً لآلة مجردة . ولأنّ توليد رمز الآلة لرمز ABC بسيط نسبياً، فمن السهل دعم بنى جديدة. آلة ABC هي آلة إعادة كتابة رسوم بيانية مجردة إلزامية . [ 13 ] تتكون من مخزن رسوم بيانية لحفظ الرسم البياني النظيف الذي تتم إعادة كتابته، وثلاثة مكدسات:
- تحتوي مكدسة A(الوسيط) على الوسائط التي تشير إلى العقد في مخزن الرسم البياني.
- تحتوي مكدسة القيم الأساسية (B) على القيم الأساسية (الأعداد الصحيحة، الأحرف، الأعداد الحقيقية، إلخ). على الرغم من أن هذه القيم يمكن أن تكون عقدًا في مخزن الرسم البياني، إلا أنه يتم استخدام مكدسة منفصلة لتحقيق الكفاءة.
- يحتوي مكدس التحكم (C) على عناوين العودة للتحكم في التدفق.
يقوم نظام التشغيل ، المرتبط بكل ملف تنفيذي، بإنشاء Startعقدة في مخزن الرسم البياني ودفعها إلى مكدس A. ثم يبدأ في طباعتها وتقييمها حسب الحاجة.
تشغيل برنامج Clean في المتصفح
على الرغم من أن لغة Clean تُستخدم عادةً لإنشاء ملفات تنفيذية أصلية، فقد مكّنت العديد من المشاريع تطبيقاتٍ تعمل على متصفحات الويب . مشروع SAPL، الذي توقف العمل به الآن ، كان يُجمّع Core Clean إلى JavaScript ولم يستخدم كود ABC. ومنذ عام 2019، يُستخدم بدلاً من ذلك مُفسّر لكود ABC مكتوب بلغة WebAssembly . [ 14 ] [ 15 ]
المنصات
يتوفر برنامج Clean لأنظمة التشغيل Microsoft Windows ( IA-32 و X86-64 ) و macOS ( X86-64 ) و Linux ( IA-32 و X86-64 و AArch64 ).
بعض المكتبات غير متوفرة على جميع المنصات، مثل ObjectIO المتوفرة فقط على نظام ويندوز. كما أن ميزة كتابة البيانات الديناميكية إلى الملفات متوفرة فقط على نظام ويندوز.
تختلف إمكانية توفر برنامج Clean لكل منصة باختلاف كل إصدار: [ 16 ] [ 17 ]
| إصدار | تاريخ | لينكس | نظام التشغيل macOS | أوراكل سولاريس | ويندوز | متنوع | |||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| IA-32 | x86-64 | AArch64 | موتورولا 68040 | باور بي سي | x86-64 | سبارك | IA-32 | x86-64 | |||
| 3.1 | 5 يناير 2022 | نعم | نعم | نعم | لا | لا | نعم | لا | نعم | نعم | |
| 3.0 | 2 أكتوبر 2018 | نعم | نعم | لا | لا | لا | نعم | لا | نعم | نعم | |
| 2.4 | 23 ديسمبر 2011 | نعم | نعم | لا | لا | لا | نعم | لا | نعم | نعم | |
| 2.3 | 22 ديسمبر 2010 | نعم | نعم | لا | لا | لا | لا | لا | نعم | نعم | |
| 2.2 | 19 ديسمبر 2006 | نعم | نعم | لا | لا | نعم | لا | نعم | نعم | نعم | |
| 2.1.1 | 31 مايو 2005 | نعم | لا | لا | لا | نعم | لا | نعم | نعم | لا | |
| 2.1.0 | 31 أكتوبر 2003 | نعم | لا | لا | لا | نعم | لا | نعم | نعم | لا | |
| 2.0.2 | 12 ديسمبر 2002 | نعم | لا | لا | لا | نعم | لا | نعم | نعم | لا | |
| 2.0.1 | 4 يوليو 2002 | نعم | لا | لا | لا | نعم | لا | نعم | نعم | لا | |
| 2.0 | 21 ديسمبر 2001 | لا | لا | لا | لا | لا | لا | لا | نعم | لا | |
| 1.3.3 | 13 سبتمبر 2000 | نعم | لا | لا | لا | نعم | لا | نعم | نعم | لا | |
| 1.3.2 | 1 يوليو 1999 | لا | لا | لا | نعم | نعم | لا | نعم | نعم | لا | |
| 1.3.1 | يناير 1999 | نعم | لا | لا | لا | نعم | لا | نعم | نعم | لا | |
| 1.3 | 22 مايو 1998 | نعم | لا | لا | لا | نعم | لا | نعم | نعم | لا | |
| 1.2.4 | يونيو 1997 | لا | لا | لا | نعم | نعم | لا | لا | نعم | لا | |
| 1.2.3 | مايو 1997 | لا | لا | لا | نعم | نعم | لا | لا | نعم | لا | |
| 1.2 | 13 يناير 1997 | لا | لا | لا | نعم | نعم | لا | لا | لا | لا | |
| 1.1.3 | أكتوبر 1996 | لا | لا | لا | لا | لا | لا | نعم | لا | لا | نظام التشغيل OS/2 ( i80386 ) |
| 1.1.2 | سبتمبر 1996 | نعم | لا | لا | لا | لا | لا | نعم | لا | لا | SunOS 4 ( SPARC ) |
| 1.1 | مارس 1996 | نعم | لا | لا | نعم | لا | لا | لا | لا | لا | |
| 1.0.2 | سبتمبر 1995 | نعم | لا | لا | نعم | لا | لا | نعم | لا | لا | نظام التشغيل/2 ( i80386 )؛ نظام التشغيل صن او اس 4 ( سبارك ) |
| 1.0 | مايو 1995 | لا | لا | لا | نعم | لا | لا | لا | لا | لا | نظام التشغيل OS/2 ( i80386 ) |
| 0.8.4 | 11 مايو 1993 | نعم | لا | لا | نعم | لا | لا | لا | لا | لا | إصدار تجريبي من معالج T800 |
| 0.8.3 | 26 فبراير 1993 | لا | لا | لا | نعم | لا | لا | لا | لا | لا | |
| 0.8.1 | 19 أكتوبر 1992 | لا | لا | لا | نعم | لا | لا | لا | لا | لا | |
| 0.8 | 13 يوليو 1992 | لا | لا | لا | نعم | لا | لا | لا | لا | لا | نظام التشغيل/2 ( i80386 )؛ نظام التشغيل SunOS 3–4 ( SPARC ) |
| 0.7 | مايو 1991 | لا | لا | لا | نعم | لا | لا | لا | لا | لا | SunOS 3–4 ( SPARC ) |
مقارنة مع لغة هاسكل
تتشابه بنية لغة Clean إلى حد كبير مع بنية لغة Haskell، مع وجود بعض الاختلافات الملحوظة. وبشكل عام، قدمت Haskell تحسينات نحوية أكثر من Clean: [ 10 ]
| هاسكل | ينظف | ملاحظات |
|---|---|---|
[ س | x <- [ 1 .. 10 ] , isOdd x ] | [ س \\ س <- [ 1 .. 10 ] | غريب س ] | فهم القوائم |
x : xs | [ x : xs ] | بائع الاحتيال |
data Tree a = Empt | Node ( Tree a ) a ( Tree a ) | :: الشجرة أ = فارغة | العقدة ( الشجرة أ ) أ ( الشجرة أ ) | نوع البيانات الجبرية |
( المعادلة أ ، المعادلة ب ) => ... | ... | المعادلة أ والمعادلة ب | تأكيدات الفئات وسياقاتها |
دالة t @ ( عقدة l x r ) = ... | دالة t =: ( العقدة l x r ) = ... | أنماط |
إذا كانت قيمة x أكبر من 10، فإن القيمة تساوي 10، وإلا فإن القيمة تساوي x. | إذا كان ( س > 10 ) 10 س | لو |
مراجع
- ↑ "تنزيل نظيف" . نظيف . تم الاسترجاع في 23 يوليو 2019 .
- ↑ "إدريس - أنواع التفرد" . تم الاطلاع عليه بتاريخ 20 نوفمبر 2018 .
- ↑ "Clean 0.7: Readme" . مؤرشف من الأصل بتاريخ 24 مايو 2019.
- ↑ "Clean 1.0: Readme" . مؤرشف من الأصل في 5 مايو 2019.
- ↑ "Clean 1.3: Readme" . مؤرشف من الأصل بتاريخ 27 أبريل 2019.
- ^ "جامعة رادبود نيميغن: قسم علوم البرمجيات: البرمجيات" .
- ↑ "الأسئلة الشائعة" . نظيف . تم الاطلاع عليه بتاريخ 26 نوفمبر 2021 .
- ↑ "المنشورات" . نظيف . تم الاسترجاع في 26 نوفمبر 2021 .
- ↑ "الصفحة الرئيسية" . أفضل تقنيات البرمجيات . تم الاطلاع عليه بتاريخ 26 نوفمبر 2021 .
- 1 2 "رابط FTP" (PDF) . ftp.cs.ru.nl ( FTP ).(للاطلاع على المستندات، انظر صفحة المساعدة: FTP )
- ↑ "ما هي أسرع لغات البرمجة؟" . لعبة قياس أداء لغات البرمجة . مؤرشف من الأصل بتاريخ 28 يونيو 2011.
- ^ يانسن، جان مارتن؛ كوبمان، بيتر. بلاسماير، رينوس (2008). "من التفسير إلى التجميع" (PDF) . خادم بروتوكول نقل الملفات ( FTP ) . تم الاسترجاع 21 مايو 2016 .(للاطلاع على المستندات، انظر صفحة المساعدة: FTP )
- ^ كوبمان ، بيتر (10 كانون الأول (ديسمبر) 1990). البرامج الوظيفية كمواصفات قابلة للتنفيذ (دكتوراه). الجامعة الكاثوليكية نيميغن. ص. 35. رقم ISBN 90-9003689-X.
- ↑ "Clean and iTasks / ABC Interpreter · GitLab" . Clean and iTasks على GitLab . تم الاطلاع عليه بتاريخ 13 أبريل 2023 .
- ↑ ستابس، كاميل؛ فان غرونينجن، جون؛ بلاسميير، رينوس (15 يوليو 2021). "التكامل الكسول بين التعليمات البرمجية المترجمة والمفسرة لأنظمة الحماية المعزولة والأنظمة الموزعة". وقائع الندوة الحادية والثلاثين حول تنفيذ وتطبيق اللغات الوظيفية . الصفحات 1-12 . doi : 10.1145/3412932.3412941 . ISBN 9781450375627. S2CID 202751977 .
- ↑ "تاريخ الإصدار" . نظيف . تم الاسترجاع في 7 يناير 2022 .
- ↑ "فهرس /نظيف" . تم الاطلاع عليه بتاريخ 7 يناير 2022 .
روابط خارجية
- ويكي نظيف
- clean-lang.org : سجل عام لحزم Clean
- cloogle.org : محرك بحث للبحث في حزم Clean
- اللغات الوظيفية
- لغات البرمجة لإعادة كتابة المصطلحات
- مترجمات مجانية ومفتوحة المصدر
- برامج مجانية متعددة المنصات
- لغات البرمجة التي تم إنشاؤها عام 1987
- لغات البرمجة ذات الكتابة الثابتة
