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

ينظف
نموذجوظيفية
صمم بواسطةمجموعة أبحاث تكنولوجيا البرمجيات بجامعة رادبود نيميغن
ظهرت لأول مرة1987 ؛ منذ 37 سنة ( 1987 )
إصدار مستقر
3.1 / 5 يناير 2022 ؛ منذ سنتين ( 2022-01-05 )
الانضباط في الطباعةقوي ، ثابت ، ديناميكي
نظام التشغيلمتعدد المنصات
رخصةBSD مبسط [1]
ملحقات اسم الملف.icl، .dcl، .abc
موقع إلكترونينظيف.cs.ru.nl
متأثر بـ
لين، ميراندا ، هاسكل
متأثر
هاسكل ، إدريس [2]

Clean هي لغة برمجة وظيفية بحتة متعددة الأغراض . كانت تسمى في الأصل نظام التنظيف المتزامن [3] أو النظام النظيف ، [4] [5] وقد طورها مجموعة من الباحثين من جامعة رادبود في نيميخين منذ عام 1987. [6] [7] وعلى الرغم من تباطؤ تطوير اللغة، لا يزال بعض الباحثين يعملون على اللغة. [8] في عام 2018، تأسست شركة فرعية تستخدم Clean. [9]

سمات

تشترك لغة Clean في العديد من الخصائص والقواعد النحوية مع لغة شقيقة أصغر سنًا، وهي Haskell : الشفافية المرجعية ، وفهم القائمة ، والحراس ، وجمع القمامة ، والوظائف ذات الترتيب الأعلى ، والتنقيح ، والتقييم الكسول . ومع ذلك، تتعامل لغة Clean مع الحالة القابلة للتغيير والإدخال/الإخراج (I/O) من خلال نظام نوع التفرد ، على النقيض من استخدام Haskell للموناد . يستفيد المترجم من نظام نوع التفرد لتوليد كود أكثر كفاءة، لأنه يعرف أنه في أي نقطة أثناء تنفيذ البرنامج، لا يمكن أن يوجد سوى مرجع واحد لقيمة بنوع فريد. لذلك، يمكن تغيير القيمة الفريدة في مكانها . [10]

تتضمن توزيعات Clean بيئة تطوير متكاملة (IDE) لنظام التشغيل Microsoft Windows .

أمثلة

مرحبا بالعالم :

 البداية = "مرحبا بالعالم!"  

العامل :

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). هذا العامل محدد مسبقًا في StdEnv، مكتبة Clean القياسية . x*(x^(n-1))(x*x)^(n-1)

كيف يعمل Clean

تعتمد الحوسبة على إعادة كتابة الرسوم البيانية والاختزال . الثوابت مثل الأرقام عبارة عن رسوم بيانية والوظائف عبارة عن صيغ إعادة كتابة الرسوم البيانية. هذا، جنبًا إلى جنب مع التجميع إلى الكود الأصلي، يجعل البرامج النظيفة التي تستخدم التجريد العالي تعمل بسرعة نسبية وفقًا للعبة معايير لغة الكمبيوتر . [11] أظهر معيار عام 2008 أن الكود الأصلي النظيف يعمل بشكل مشابه لمترجم غلاسكو هاسكل (GHC)، اعتمادًا على المعيار. [12]

تجميع

يتم تنفيذ تجميع الكود النظيف للجهاز على النحو التالي:

  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(rgument) على الوسائط التي تشير إلى العقد الموجودة في مخزن الرسم البياني.
  • تحتوي مجموعة القيم الأساسية (B(asic value) على القيم الأساسية (الأعداد الصحيحة والأحرف والأعداد الحقيقية وما إلى ذلك). وعلى الرغم من أن هذه القيم قد تكون عبارة عن عقد في مخزن الرسم البياني، إلا أنه يتم استخدام مجموعة منفصلة لتحقيق الكفاءة.
  • تحتوي مجموعة C(ontrol) على عناوين الإرجاع للتحكم في التدفق.

يقوم نظام وقت التشغيل ، والذي يرتبط بكل ملف قابل للتنفيذ، ببناء 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 التي لا تتوفر إلا على نظام التشغيل Windows. كما أن ميزة كتابة الديناميكيات في الملفات متاحة فقط على نظام التشغيل Windows. [ بحاجة لمصدر ]

يختلف توفر Clean لكل منصة حسب كل إصدار: [16] [17]

إصدار تاريخ لينكس ماك أوراكل سولاريس نوافذ متنوع
IA-32 x86-64 آرتش64 موتورولا 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 لا لا لا لا لا لا نعم لا لا نظام التشغيل/2 ( i80386 )
1.1.2 سبتمبر 1996 نعم لا لا لا لا لا نعم لا لا نظام التشغيل SunOS 4 ( SPARC )
1.1 مارس 1996 نعم لا لا نعم لا لا لا لا لا
1.0.2 سبتمبر 1995 نعم لا لا نعم لا لا نعم لا لا نظام التشغيل/2 ( i80386نظام التشغيل صن او اس 4 ( سبارك )
1.0 مايو 1995 لا لا لا نعم لا لا لا لا لا نظام التشغيل/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 ]
مشغل سلبيات
شجرة البيانات أ = فارغة | عقدة ( شجرة أ ) أ ( شجرة أ )  
   
        
:: شجرة أ = فارغة | عقدة ( شجرة أ ) أ ( شجرة أ )  
   
        
نوع البيانات الجبرية
( المعادلة أ ، المعادلة ب ) => ...     
... | المعادلة أ والمعادلة ب      
تأكيدات الفئة والسياقات
متعة t @ ( عقدة l x r ) = ...      
متعة t =: ( عقدة l x r ) = ...      
الأنماط
إذا كان x > 10 ثم 10 وإلا x       
إذا ( x > 10 ) 10 x     
لو

مراجع

  1. ^ "تحميل Clean". Clean . تم الاسترجاع في 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. ^ "الصفحة الرئيسية". TOP Software Technology . تم الاسترجاع في 26 نوفمبر 2021 .
  10. ^ من ftp://ftp.cs.ru.nl/pub/Clean/papers/2007/achp2007-CleanHaskellQuickGuide.pdf
  11. ^ "ما هي أسرع لغات البرمجة؟". لعبة معايير لغة الحاسوب . مؤرشف من الأصل في 28 يونيو 2011.{{cite web}}:CS1 maint: bot: حالة عنوان URL الأصلي غير معروفة ( الرابط )
  12. ^ يانسن، جان مارتن؛ كوبمان، بيتر. بلاسماير، رينوس (2008). "من التفسير إلى التجميع" (PDF) . تم الاسترجاع 21 مايو 2016 . {{cite journal}}: تتطلب المجلة الاستشهاد بها |journal=( مساعدة )
  13. ^ كوبمان ، بيتر (10 كانون الأول / ديسمبر 1990). البرامج الوظيفية كمواصفات قابلة للتنفيذ (دكتوراه). الجامعة الكاثوليكية نيميغن. ص. 35. رقم ISBN 90-9003689-X.
  14. ^ "Clean and iTasks / ABC Interpreter · GitLab". Clean and iTasks on GitLab . تم الاسترجاع في 13 أبريل 2023 .
  15. ^ Staps, Camil; van Groningen, John; Plasmeijer, Rinus (15 July 2021). "التفاعل الكسول بين الكود المترجم والمفسر من أجل الحماية والأنظمة الموزعة". وقائع الندوة الحادية والثلاثين حول تنفيذ وتطبيق اللغات الوظيفية . ص. 1-12. doi :10.1145/3412932.3412941. ISBN 9781450375627. S2CID  202751977.
  16. ^ "سجل الإصدارات". تم الاسترجاع في 7 يناير 2022 .
  17. ^ "فهرس /Clean" . تم الاسترجاع في 7 يناير 2022 .
  • ويكي نظيفة
  • clean-lang.org: سجل عام يحتوي على حزم Clean
  • cloogle.org: محرك بحث للبحث في الحزم النظيفة
تم الاسترجاع من "https://en.wikipedia.org/w/index.php?title=Clean_(programming_language)&oldid=1250783048"
Original text
Rate this translation
Your feedback will be used to help improve Google Translate