نظيفة (لغة برمجة)
| نموذج | وظيفية |
|---|---|
| صمم بواسطة | مجموعة أبحاث تكنولوجيا البرمجيات بجامعة رادبود نيميغن |
| ظهرت لأول مرة | 1987 |
| إصدار مستقر | 3.1 / 5 يناير 2022 |
| الانضباط في الطباعة | قوي ، ثابت ، ديناميكي |
| نظام التشغيل | متعدد المنصات |
| رخصة | 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]
تجميع
يتم تنفيذ تجميع الكود النظيف للجهاز على النحو التالي:
- تتم ترجمة ملفات المصدر (.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(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
|
لو |
مراجع
- ^ "تحميل Clean". Clean . تم الاسترجاع في 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 .
- ^ "الصفحة الرئيسية". TOP Software Technology . تم الاسترجاع في 26 نوفمبر 2021 .
- ^ من ftp://ftp.cs.ru.nl/pub/Clean/papers/2007/achp2007-CleanHaskellQuickGuide.pdf
- ^ "ما هي أسرع لغات البرمجة؟". لعبة معايير لغة الحاسوب . مؤرشف من الأصل في 28 يونيو 2011.
{{cite web}}:CS1 maint: bot: حالة عنوان URL الأصلي غير معروفة ( الرابط ) - ^ يانسن، جان مارتن؛ كوبمان، بيتر. بلاسماير، رينوس (2008). "من التفسير إلى التجميع" (PDF) . تم الاسترجاع 21 مايو 2016 .
{{cite journal}}: تتطلب المجلة الاستشهاد بها|journal=( مساعدة ) - ^ كوبمان ، بيتر (10 كانون الأول / ديسمبر 1990). البرامج الوظيفية كمواصفات قابلة للتنفيذ (دكتوراه). الجامعة الكاثوليكية نيميغن. ص. 35. رقم ISBN 90-9003689-X.
- ^ "Clean and iTasks / ABC Interpreter · GitLab". Clean and iTasks on GitLab . تم الاسترجاع في 13 أبريل 2023 .
- ^ Staps, Camil; van Groningen, John; Plasmeijer, Rinus (15 July 2021). "التفاعل الكسول بين الكود المترجم والمفسر من أجل الحماية والأنظمة الموزعة". وقائع الندوة الحادية والثلاثين حول تنفيذ وتطبيق اللغات الوظيفية . ص. 1-12. doi :10.1145/3412932.3412941. ISBN 9781450375627. S2CID 202751977.
- ^ "سجل الإصدارات". تم الاسترجاع في 7 يناير 2022 .
- ^ "فهرس /Clean" . تم الاسترجاع في 7 يناير 2022 .
روابط خارجية
- ويكي نظيفة
- clean-lang.org: سجل عام يحتوي على حزم Clean
- cloogle.org: محرك بحث للبحث في الحزم النظيفة
