لغة برمجة نظيفة

لغة 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 إلى لغة الآلة على النحو التالي:

  1. يتم ترجمة ملفات المصدر (.icl) وملفات التعريف (.dcl) إلى Core Clean، وهو إصدار أساسي من Clean، بواسطة واجهة المترجم المكتوبة بلغة Clean.
  2. يتم تحويل Core clean إلى لغة وسيطة مستقلة عن النظام الأساسي لـ Clean (.abc)، بواسطة الواجهة الخلفية للمترجم المكتوبة بلغة Clean و C.
  3. يتم تحويل رمز ABC الوسيط إلى رمز الكائن (.o) بواسطة مولد الرموز المكتوب بلغة C.
  4. يتم ربط رمز الكائن بملفات أخرى في الوحدة النمطية ونظام التشغيل ويتم تحويله إلى ملف تنفيذي عادي باستخدام رابط النظام (عند توفره) أو رابط مخصص مكتوب بلغة 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-32x86-64AArch64موتورولا 68040باور بي سيx86-64سباركIA-32x86-64
3.15 يناير 2022نعمنعمنعملالانعملانعمنعم
3.02 أكتوبر 2018نعمنعملالالانعملانعمنعم
2.423 ديسمبر 2011نعمنعملالالانعملانعمنعم
2.322 ديسمبر 2010نعمنعملالالالالانعمنعم
2.219 ديسمبر 2006نعمنعملالانعملانعمنعمنعم
2.1.131 مايو 2005نعملالالانعملانعمنعملا
2.1.031 أكتوبر 2003نعملالالانعملانعمنعملا
2.0.212 ديسمبر 2002نعملالالانعملانعمنعملا
2.0.14 يوليو 2002نعملالالانعملانعمنعملا
2.021 ديسمبر 2001لالالالالالالانعملا
1.3.313 سبتمبر 2000نعملالالانعملانعمنعملا
1.3.21 يوليو 1999لالالانعمنعملانعمنعملا
1.3.1يناير 1999نعملالالانعملانعمنعملا
1.322 مايو 1998نعملالالانعملانعمنعملا
1.2.4يونيو 1997لالالانعمنعملالانعملا
1.2.3مايو 1997لالالانعمنعملالانعملا
1.213 يناير 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.411 مايو 1993نعملالانعملالالالالاإصدار تجريبي من معالج T800
0.8.326 فبراير 1993لالالانعملالالالالا
0.8.119 أكتوبر 1992لالالانعملالالالالا
0.813 يوليو 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 س
لو

مراجع

  1. "تنزيل نظيف" . نظيف . تم الاسترجاع في 23 يوليو 2019 .
  2. "إدريس - أنواع التفرد" . تم الاطلاع عليه بتاريخ 20 نوفمبر 2018 .
  3. "Clean 0.7: Readme" . مؤرشف من الأصل بتاريخ 24 مايو 2019.
  4. "Clean 1.0: Readme" . مؤرشف من الأصل في 5 مايو 2019.
  5. "Clean 1.3: Readme" . مؤرشف من الأصل بتاريخ 27 أبريل 2019.
  6. ^ "جامعة رادبود نيميغن: قسم علوم البرمجيات: البرمجيات" .
  7. "الأسئلة الشائعة" . نظيف . تم الاطلاع عليه بتاريخ 26 نوفمبر 2021 .
  8. "المنشورات" . نظيف . تم الاسترجاع في 26 نوفمبر 2021 .
  9. "الصفحة الرئيسية" . أفضل تقنيات البرمجيات . تم الاطلاع عليه بتاريخ 26 نوفمبر 2021 .
  10. 1 2 "رابط FTP" (PDF) . ftp.cs.ru.nl ( FTP ).(للاطلاع على المستندات، انظر صفحة المساعدة: FTP )
  11. "ما هي أسرع لغات البرمجة؟" . لعبة قياس أداء لغات البرمجة . مؤرشف من الأصل بتاريخ 28 يونيو 2011.
  12. ^ يانسن، جان مارتن؛ كوبمان، بيتر. بلاسماير، رينوس (2008). "من التفسير إلى التجميع" (PDF) . خادم بروتوكول نقل الملفات ( FTP ) . تم الاسترجاع 21 مايو 2016 .(للاطلاع على المستندات، انظر صفحة المساعدة: FTP )
  13. ^ كوبمان ، بيتر (10 كانون الأول (ديسمبر) 1990). البرامج الوظيفية كمواصفات قابلة للتنفيذ (دكتوراه). الجامعة الكاثوليكية نيميغن. ص. 35. رقم ISBN  90-9003689-X.
  14. "Clean and iTasks / ABC Interpreter · GitLab" . Clean and iTasks على GitLab . تم الاطلاع عليه بتاريخ 13 أبريل 2023 .
  15. ستابس، كاميل؛ فان غرونينجن، جون؛ بلاسميير، رينوس (15 يوليو 2021). "التكامل الكسول بين التعليمات البرمجية المترجمة والمفسرة لأنظمة الحماية المعزولة والأنظمة الموزعة". وقائع الندوة الحادية والثلاثين حول تنفيذ وتطبيق اللغات الوظيفية . الصفحات 1-12 . doi : 10.1145/3412932.3412941 . ISBN  9781450375627. S2CID 202751977 . 
  16. "تاريخ الإصدار" . نظيف . تم الاسترجاع في 7 يناير 2022 .
  17. "فهرس /نظيف" . تم الاطلاع عليه بتاريخ 7 يناير 2022 .