سيلون (لغة برمجة)

كانت لغة سيلون لغة برمجة كائنية التوجه ، ذات كتابة ثابتة قوية ، مع التركيز على عدم قابلية التغيير ، وقد طورتها شركة ريد هات . تعمل برامج سيلون على آلة جافا الافتراضية (JVM)، ويمكن ترجمتها إلى جافا سكريبت . [ 6 ] [ 7 ] يركز تصميم اللغة على سهولة قراءة شفرة المصدر ، وإمكانية التنبؤ بها ، وسهولة استخدام الأدوات ، والنمطية ، وقابلية البرمجة الوصفية . [ 8 ]

تشمل السمات المهمة لسيلان ما يلي: [ 9 ]

إن اسم "سيلان" هو إشارة غير مباشرة إلى جاوة، حيث أن جاوة وسريلانكا ، المعروفة سابقًا باسم سيلان، هي جزر تشتهر بزراعة وتصدير البن والشاي .

في أغسطس 2017، تم التبرع بسيلان لمؤسسة إكليبس . تباطأ التطوير وتوقف نهائياً في عام 2020. [ 13 ] في أبريل 2023، أعلنت مؤسسة إكليبس إنهاء عملية الانتقال. [ 14 ]

خصائص اللغة

تتأثر لغة سيلون بشكل كبير ببنية لغة جافا ، ولكنها تضيف العديد من الميزات الجديدة.

نظام الكتابة

من أبرز الجوانب المبتكرة في لغة سيلون مقارنةً بلغة جافا نظام أنواعها . تتخلى سيلون عن أنواع جافا الأولية [ 15 ] وتقنية التغليف لصالح نظام أنواع يتألف بالكامل من كائنات من الدرجة الأولى. ورغم أن هذا قد يُسبب زيادة في تكلفة التغليف في بعض الحالات، إلا أنه يجعل نظام الأنواع أكثر اتساقًا.

يسمح سيلون بأنواع الاتحاد والتقاطع ، بطريقة مشابهة لـ TypeScript و Whiley و FLOW ، والتي في الواقع، أخذت الفكرة من سيلون.

تسمح أنواع الاتحاد، المكتوبة A|B، للمتغير بأن يكون له أكثر من نوع واحد. يوضح المثال التالي دالة سيلون التي يمكن أن تأخذ إما عددًا صحيحًا أو سلسلة نصية :

دالة مشتركة void integerOrString ( Integer | String input ) { if ( is Integer input ) { print ( "تم استلام العدد الصحيح ``input``" ); } else { print ( "تم استلام السلسلة النصية '``input``'" ); } }

تُعدّ أنواع التقاطع، المكتوبة A&B، الأساس النظري للكتابة الحساسة للتدفق :

دالة مشتركة void integerOrString ( Integer | String input ) { Integer added = input + 6 ; // غير مسموح؛ عامل الجمع (+) غير مُعرَّف على Integer|Stringإذا كان ( المدخل عددًا صحيحًا ) { العدد الصحيح المضاف = المدخل + 6 ؛ // صحيح؛ أصبح المدخل الآن عددًا صحيحًا، اطبع ( "تم استلام العدد الصحيح ``input``" ); } وإلا { اطبع ( "تم استلام السلسلة '``input``'" ); } }

يُضيّق الشرط is Integer inputنوع inputإلى ، والذي يتوزع إلى ، والذي، بما أن و نوعان منفصلان، فهو مكافئ لـ ( هو النوع السفلي الفارغ)، والذي يتبسط إلى مجرد .<Integer|String>& IntegerInteger&Integer | String&IntegerStringIntegerInteger&Integer | NothingNothingInteger

أمان معدوم

تُستخدم أنواع الاتحاد والتقاطع لضمان سلامة القيم الفارغة . النوع الأعلى في التسلسل الهرمي لأنواع سيلون هو الفئة Anything، التي تحتوي على فئتين فرعيتين: Object، وهي الفئة الأصلية لجميع الفئات العادية وجميع الواجهات، و Null، التي لها مثيل واحد فقط null. بما أن Objectو Nullنوعان منفصلان، فإن معظم الأنواع العادية مثل Integerأو لا تقبل القيم الفارغة؛ النوع الذي يقبل القيم الفارغة هو الاتحاد ، ويُختصر بـ . [ 16 ]List<String>Integer|NullInteger?

يمكن استخدام أنواع التقاطع للحصول على نوع غير اختياري من نوع قد يكون اختياريًا، مثل مُعامل النوع. على سبيل المثال، يمكن أن تكون صيغة دالة تحذف nullعناصر من سلسلة من القيم كما يلي:

Iterable < Element & Object > removeNulls < Element >( Iterable < Element > stream );

عند removeNullsاستدعاء الدالة مع سلسلة من Integer|Nullالعناصر، ستكون النتيجة سلسلة من العناصر، والتي تتبسط إلى .<Integer|Null> & ObjectInteger

الوظائف

على غرار العديد من اللغات الحديثة، تدعم لغة سيلون وظائف الدرجة الأولى ووظائف الرتبة العليا ، بما في ذلك أنواع الوظائف والوظائف المجهولة [ 17 ].

// دالة من المستوى الأعلى تستخدم صيغة الكتلة (غير مرتبطة بأي فئات أنشأها المستخدم) String process ( String text , String transformString ( String toChange )) { return transformString ( text ); }// دالة من المستوى الأعلى تستدعي String.reverse في شكل تعبير. String reverse ( String text ) => text . reversed ;// مرجع دالة إلى String.reversed ولكنه مكافئ في الغالب للدالة أعلاه. String ( String ) reverseFunctionReference = String . reversed ;// مثال حيث يتم توفير الدالة ذات المستوى الأعلى أعلاه كوسيط للدالة ذات الرتبة الأعلى أعلاه String reversed1 = process ( "one" , reverse );// مثال حيث يتم تمرير دالة مجهولة - (نص) => نص + نص - إلى الدالة ذات الرتبة الأعلى أعلاه. String reversed2 = process ( "one" , ( نص ) => نص + نص );

أنواع مُعَدَّة

على غرار لغة جافا والعديد من اللغات الأخرى، وبآلية مشابهة للأنواع الجبرية ، تدعم لغة سيلون الأنواع المُعدّدة ، والمعروفة أيضًا باسم التعدادات. يتم تطبيق ذلك في سيلون بنمط يقتصر فيه عدد مثيلات الفئة المجردة عند تعريفها على مجموعة محدودة من الكائنات (في هذه الحالة، مثيلات أحادية). وهناك طريقة أخرى لتطبيق هذا النمط، وهي ميزة المُنشئ الجديدة في سيلون 1.2، حيث تُنفذ الكائنات من خلال تعريفات مُنشئات مُسماة مختلفة. [ 18 ]

// الصيغة التقليدية للأنواع المُعدّدة، في هذه الحالة، حصر النسخ بثلاثة كائنات (لهذا الغرض: كائنات أحادية) abstract class Vehicle ( shared String name ) of plane | train | automobile {}object plane extends Vehicle ( "plane" ) {} object train extends Vehicle ( "train" ) {} object automobile extends Vehicle ( "automobile" ) {} // خطأ في الترجمة: النوع ليس نوعًا فرعيًا لأي حالة من حالات النوع الفائق المُعدّد: 'boat' يرث 'Vehicle' //object boat extends Vehicle("boat") {}// صيغة جديدة (اعتبارًا من سيلون 1.2.0) تعتمد على المُنشئ class Vehicle of plane | train | automobile { String name ;abstract new named ( String pName ) { name = pName ; }shared new plane extends named ( "plane" ) {} shared new train extends named ( "train" ) {} shared new automobile extends named ( "automobile" ) {} // خطأ في الترجمة: لم يتم العثور على مُنشئ القيمة في جملة of الخاصة بالفئة غير المجردة المُعدّدة: 'boat' غير مدرجة في جملة of الخاصة بـ 'Vehicle' //shared new boat extends named("boat") {} }

استنتاج النوع

لغة سيلون ذات كتابة قوية وثابتة، ولكنها تدعم أيضًا استنتاج النوع . valueتُستخدم الكلمة المفتاحية لاستنتاج نوع المتغير، functionوتُستخدم الكلمة المفتاحية لاستنتاج نوع الدالة. الزوجان التاليان من التعريفات متكافئان:

عدد صحيح i = 3 ؛ قيمة i = 3 ؛دالة الجمع ( عدد صحيح i1 ، عدد صحيح i2 ) { إرجاع i1 + i2 ؛ } دالة الجمع ( عدد صحيح i1 ، عدد صحيح i2 ) { إرجاع i1 + i2 ؛ }

ومع ذلك، ولجعل استنتاج النوع في تمريرة واحدة ممكناً، يُسمح باستنتاج النوع فقط للتصريحات غير الموجودة على المستوى الأعلى وغير المشتركة. [ 19 ]

نقطة دخول بالأسماء

بشكل افتراضي، يقوم برنامج التشغيل ( ceylon run) بتشغيل الدالة المشتركة run() الخاصة بالوحدة النمطية:

/* برنامج "مرحباً بالعالم" الكلاسيكي */ shared void run () { print ( "مرحباً بالعالم!" ); }

لكن يمكن استخدام أي دالة مشتركة أخرى بدون معلمات كدالة رئيسية تستدعي البرنامج باستخدام معلمة التشغيل ، كما يلي:

ceylon run --compile=force --run hello default

الإصدارات

تم إصدار نسخ من سيلون: [ 20 ]

  • M1 0.1 "نيوتن" (20 ديسمبر 2011)
  • M2 0.2 "Minitel" (2 مارس 2012)
  • M3 0.3 "V2000" (21 يونيو 2012)
  • M3.1 0.3.1 "V2000" (6 يوليو 2012)
  • M4 0.4 "محرك تحليلي" (29 أكتوبر 2012)
  • M5 0.5 "نيسا بونج" (13 مارس 2013)
  • M6 0.6 "Virtual Boy" (23 سبتمبر 2013)
  • 1.0 بيتا "Virtual Boy" (24 سبتمبر 2013)
  • 1.0.0 "لا مزيد من الرجل اللطيف" (13 نوفمبر 2013)
  • 1.1.0 "السفينة المثالية الثانية" (9 أكتوبر 2014)
  • 1.2.0 "سلسلة من التفسيرات غير المحتملة" (28 أكتوبر 2015)
  • 1.2.1 "نهاية العالم غير المنتظمة" (11 فبراير 2016)
  • 1.2.2 "ساحر ولكنه غير منطقي" (11 مارس 2016)
  • 1.3.0 "الانعكاس الداخلي الكامل" (19 سبتمبر 2016)
  • 1.3.1 "الآن نجربها بطريقتي" (22 نوفمبر 2016)
  • 1.3.2 "ابتسم بتسامح" (2 مارس 2017)
  • 1.3.3 "قد تختلف المحتويات" (21 أغسطس 2017)

رخصة

جميع أجزاء برنامج سيلون متاحة كبرمجيات حرة ، ومعظمها مرخص بموجب رخصة أباتشي . [ 21 ] جزء من شفرة المصدر مرخص بموجب رخصة LGPL.

انظر أيضاً

مراجع

  1. كينغ، غافين. "لغة سيلون: §4.1 بنية وحدة الترجمة" . تم الاطلاع عليه بتاريخ 4 ديسمبر 2015. وحدة الترجمة هي ملف نصي، بامتداد اسم الملف .ceylon.
  2. "الأسئلة الشائعة: ما هي لغة سيلون؟" . تم الاطلاع بتاريخ 4 ديسمبر 2015. سيلون هي لغة برمجة جديدة متأثرة بشكل كبير بلغة جافا.
  3. "ceylon/user - Gitter" . تم الاسترجاع في 2015-12-04 .
  4. "ceylon/user - Gitter" . تم الاسترجاع في 2015-12-04 .
  5. "أهم 10 ميزات في لغة سيلون تتمنى جافا لو كانت موجودة" . تم الاطلاع عليه بتاريخ 29-11-2019 .
  6. "سيلان 1.0 بيتا" . تم الاطلاع عليه بتاريخ 26-09-2013 .
  7. "مشروع سيلون - ريد هات تبني بديلاً لجافا" . ذا ريجستر . 13 أبريل 2011. تاريخ الاسترجاع: 27 نوفمبر 2011 .
  8. كينغ، غافين (10 يناير 2012). "المبادئ التي توجه هذا المشروع" . تم الاطلاع عليه بتاريخ 4 ديسمبر 2015 .
  9. "أسئلة وأجوبة حول تصميم اللغة: الأهداف" . تم الاطلاع عليه بتاريخ 2015-12-04 .
  10. فيستال، ديفيد (10-10-2014). "اكتب بلغة سيلون، وانشرها كـ OSGi، واستخدمها في Java EE" . تم الاطلاع عليه بتاريخ 4-12-2015 .
  11. "مستودعات مافن" . تم الاطلاع عليه بتاريخ 2015-12-04 .
  12. "ميزات بيئة التطوير المتكاملة سيلون" . تم الاطلاع عليه بتاريخ 2015-12-04 .
  13. "سيلون / سيلون" . شركة GitHub، 25 مايو 2020. مؤرشف من الأصل في 3 أكتوبر 2023. تم الاطلاع عليه في 22 يناير 2024 .
  14. "مراجعة إنهاء Eclipse Ceylon™" . مؤسسة Eclipse. 5 أبريل 2023. مؤرشف من الأصل في 23 أبريل 2023. تم الاطلاع عليه في 23 أبريل 2023 .
  15. كينج، جافين. "سيلان: الأسئلة الشائعة حول تصميم اللغة" .
  16. كينغ، غافين. "لغة سيلون: §1.4.3 سلامة وقت الترجمة للقيم الفارغة والكتابة الحساسة للتدفق" . تم الاسترجاع في 2015-12-04 .
  17. كينغ، غافين. "لغة سيلان: 4.7 وظائف" . تم الاطلاع عليه في 5 ديسمبر 2015 .
  18. كينغ، غافين. "لغة سيلان: 4.5.8 الفئات المُعَدَّة" . تم الاطلاع عليه بتاريخ 6 ديسمبر 2015 .
  19. كينغ، غافين. "لغة سيلون: §3.2.9 استنتاج النوع" . تم الاسترجاع في 2015-12-04 .
  20. https://ceylon-lang.org/download-archive/ سيلون: تحميل الإصدارات السابقة من سيلون
  21. "سيلان: التراخيص" . تم الاطلاع عليه بتاريخ 2015-12-04 .