إدريس (لغة برمجة)
إدريس هي لغة برمجة وظيفية بحتة ، تتميز بأنواع البيانات التابعة ، وتعليقات الكمية ، والتقييم الكسول الاختياري ، وميزات مثل مدقق الشمولية . صُممت إدريس لتكون لغة برمجة عامة الأغراض، مشابهة للغة هاسكل ، ولكن يمكن استخدامها أيضًا كمساعد في البرهان .
يُشابه نظام أنواع Idris نظام Agda . وبالمقارنة مع Agda، يُعطي Idris الأولوية لإدارة الآثار الجانبية ودعم لغات البرمجة المُدمجة المُخصصة للمجال . يتم تجميع Idris بواسطة وحدات خلفية معيارية، تُوفر توليد الشفرة ونظام التشغيل . [ 5 ] يتضمن مُجمِّع Idris وحدات خلفية للغات Chez Scheme و Racket و JavaScript (سواءً كانت مُعتمدة على المتصفح أو Node.js ) و C. كما تتوفر وحدات خلفية إضافية من جهات خارجية لمنصات أخرى. [ 6 ]
تم تسمية إدريس على اسم تنين مغنٍ من برنامج الأطفال التلفزيوني البريطاني في السبعينيات بعنوان "إيفور المحرك" . [ 7 ]
سمات
يجمع إدريس بين عدد من الميزات من لغات البرمجة الوظيفية السائدة نسبيًا مع ميزات مستعارة من مساعدي البرهان .
البرمجة الوظيفية
تتشابه بنية لغة إدريس إلى حد كبير مع بنية لغة هاسكل. قد يبدو برنامج "مرحباً بالعالم" في إدريس على النحو التالي:
الوحدة الرئيسيةmain : IO () main = putStrLn "Hello, World!"الاختلافات الوحيدة بين هذا البرنامج ونظيره في لغة هاسكل هي استخدام نقطة واحدة (بدلاً من نقطتين) في توقيع نوع الدالة الرئيسية، وحذف كلمة " where" في تعريف الوحدة . [ 8 ]
أنواع البيانات الاستقرائية والبارامترية
يدعم إدريس أنواع البيانات المُعرَّفة استقرائيًا والتعدد الشكلي البارامتري . ويمكن تعريف هذه الأنواع باستخدام الصيغة التقليدية الشبيهة بـ Haskell 98 :
بيانات الشجرة أ = عقدة ( الشجرة أ ) ( الشجرة أ ) | ورقة أ أو في صيغة تشبه نوع البيانات الجبرية المعممة (GADT) الأكثر عمومية :
بيانات الشجرة : النوع -> النوع حيث العقدة : الشجرة أ -> الشجرة أ -> الشجرة أ الورقة : أ -> الشجرة أ الأنواع التابعة
في حالة الأنواع التابعة ، من الممكن أن تظهر القيم ضمن هذه الأنواع؛ وبالتالي، يمكن إجراء أي عملية حسابية على مستوى القيمة أثناء التحقق من النوع . يُعرّف ما يلي نوعًا من القوائم التي تُعرف أطوالها قبل تشغيل البرنامج، والتي تُسمى تقليديًا بالمتجهات :
بيانات Vect : Nat -> Type -> Type حيث Nil : Vect 0 a (::) : ( x : a ) -> ( xs : Vect n a ) -> Vect ( n + 1 ) a يمكن استخدام هذا النوع على النحو التالي:
الإضافة الكلية : Vect n a -> Vect m a -> Vect ( n + m ) a أضف قيمة فارغة إلى ys = ys أضف ( x :: xs ) ys = x :: أضف xs ys تُلحق هذه الدالة appendمتجهًا من mعناصر من نوع معين aبمتجه آخر من nعناصر من نوع آخر a. وبما أن الأنواع الدقيقة لمتجهات الإدخال تعتمد على قيمة معينة، فمن الممكن التأكد أثناء الترجمة من أن المتجه الناتج سيحتوي بالضبط على ( n+ m) عنصرًا من النوع . تستدعي aالكلمة " " مدقق الشمولية الذي سيُبلغ عن خطأ إذا لم تُغطِّ الدالة جميع الحالات الممكنة أو إذا تعذَّر إثبات (تلقائيًا) أنها لا تدخل في حلقة لا نهائية .total
ومن الأمثلة الشائعة الأخرى الجمع الزوجي لمتجهين يتم تحديدهما بناءً على طولهما:
إجمالي إضافة الأزواج : العدد أ => المتجه ن أ -> المتجه ن أ -> المتجه ن أ pairAdd Nil Nil = Nil pairAdd ( x :: xs ) ( y :: ys ) = x + y :: pairAdd xs ys Numيشير الرمز a إلى أن النوع a ينتمي إلى فئة النوعNum . لاحظ أن هذه الدالة لا تزال تجتاز فحص النوع بنجاح كدالة إجمالية، على الرغم من عدم وجود تطابق حالة الأحرف Nilفي أحد المتجهين ووجود عدد في الآخر. ولأن نظام النوع قادر على إثبات أن المتجهين لهما نفس الطول، يمكننا التأكد أثناء الترجمة من عدم حدوث حالة الأحرف هذه، وبالتالي لا حاجة لتضمينها في تعريف الدالة.
ميزات مساعد التدقيق
تتمتع الأنواع التابعة بقوة كافية لترميز معظم خصائص البرامج، ويمكن لبرنامج إدريس إثبات الثوابت في وقت الترجمة. وهذا ما يجعل إدريس بمثابة مساعد إثبات.
توجد طريقتان قياسيتان للتفاعل مع مساعدي البرهان: إما بكتابة سلسلة من استدعاءات التكتيكات ( على غرار روك )، أو بتطوير مصطلح البرهان بشكل تفاعلي ( على غرار إبيغرام -أجدا). يدعم إدريس كلا نمطي التفاعل، مع أن مجموعة التكتيكات المتاحة فيه ليست بنفس كفاءة مجموعة روك.
توليد الكود
بما أن إدريس يحتوي على مساعد للبرهان، يمكن كتابة برامج إدريس لتمرير البراهين. إذا تم التعامل مع هذه البراهين ببساطة، فإنها تبقى موجودة أثناء التشغيل. يهدف إدريس إلى تجنب هذا المأزق عن طريق حذف المصطلحات غير المستخدمة بشكل جذري. [ 9 ] [ 10 ]
بشكل افتراضي، يقوم إدريس بإنشاء كود أصلي من خلال لغة C. أما الواجهة الخلفية الأخرى المدعومة رسميًا فتقوم بإنشاء كود جافا سكريبت .
إدريس 2
إدريس 2 هي نسخة جديدة ذاتية الاستضافة من اللغة، تدمج بشكل عميق نظام أنواع خطي ، قائم على نظرية الأنواع الكمية . وهي تُترجم حاليًا إلى لغتي Scheme و C. [ 11 ]
انظر أيضاً
مراجع
- ↑ برادي، إدوين (12 ديسمبر 2007). "فهرس /~eb/darcs/Idris" . كلية علوم الحاسوب بجامعة سانت أندروز . مؤرشف من الأصل في 20 مارس 2008.
- ↑ "إصدار [ v0.8.0 ] إصدار هالوين 2025" . GitHub . تم الاطلاع عليه بتاريخ 31 أغسطس 2025 .
- 1 2 "أنواع التفرد" . وثائق إدريس 1.3.1 . تم الاطلاع عليها بتاريخ 26-09-2019 .
- 1 2 3 "إدريس، لغة ذات أنواع تابعة" . تم الاسترجاع في 26-10-2014 .
- ↑ "التجميع إلى ملفات تنفيذية" . وثائق لغة إدريس 2. تم الاطلاع عليه في 1 نوفمبر 2025 .
- ↑ "الخوادم الخلفية الخارجية" . ويكي إدريس 2. تم الاطلاع عليه في 1 نوفمبر 2025 .
- ↑ "الأسئلة الشائعة" . تم الاطلاع عليه بتاريخ 19-07-2015 .
- ↑ "دليل بناء الجملة - وثائق إدريس 1.3.2" . تم الاطلاع عليه بتاريخ 27 أبريل 2020 .
- ↑ "المحو عن طريق تحليل الاستخدام - أحدث وثائق إدريس" . idris.readthedocs.org .
- ↑ "نتائج المقارنة المعيارية" . ziman.functor.sk .
- ↑ "idris-lang/Idris2" . GitHub . تم الاسترجاع في 11 أبريل 2021 .
روابط خارجية
- الموقع الرسمي ، الوثائق، الأسئلة الشائعة، الأمثلة
- إدريس في مستودع هاكاج
- وثائق لغة الإدريس (برنامج تعليمي، مرجع لغوي، إلخ).
- اللغات ذات الكتابة المعتمدة
- لغات البرمجة التجريبية
- اللغات الوظيفية
- برنامج مجاني مكتوب بلغة هاسكل
- عائلة لغات البرمجة هاسكل
- برامج مجانية متعددة المنصات
- مترجمات مجانية ومفتوحة المصدر
- البرامج التي تستخدم ترخيص BSD
- لغات البرمجة التي تم إنشاؤها في عام 2007
- لغات البرمجة عالية المستوى
- برنامج 2007
- لغات برمجة مطابقة الأنماط
- لغات البرمجة ذات الكتابة الثابتة
- لغات برمجة ذات بنية قابلة للتوسيع
