إطلاق لغة البرمجة Haxe 4.0

متاح إصدار مجموعة الأدوات هاكس 4.0، والذي يتضمن لغة برمجة عالية المستوى ومتعددة النماذج تحمل نفس الاسم مع كتابة قوية ومترجم مشترك ومكتبة قياسية من الوظائف. يدعم المشروع الترجمة إلى C++ وHashLink/C وJavaScript وC# وJava وPHP وPython وLua، بالإضافة إلى التجميع إلى JVM وHashLink/JIT وFlash وNeko bytecode، مع إمكانية الوصول إلى القدرات الأصلية لكل منصة مستهدفة. رمز المترجم وزعت من خلال بموجب ترخيص GPLv2، ومكتبة قياسية وجهاز افتراضي تم تطويرهما لـ Haxe نيكو بموجب ترخيص معهد ماساتشوستس للتكنولوجيا.

اللغة هي موجهة نحو التعبير مع الكتابة القوية. يتم دعم مفاهيم البرمجة الموجهة للكائنات والعامة والوظيفية.
بناء جملة Haxe قريب من ECMAScript و يتوسع ميزاته مثل الكتابة الثابتة، واستدلال الكتابة التلقائية، ومطابقة الأنماط، والأدوية العامة، والحلقات القائمة على التكرار، ووحدات ماكرو AST، وGADT (أنواع البيانات الجبرية المعممة)، والأنواع المجردة، والهياكل المجهولة، وتعريفات المصفوفات المبسطة، وتعبيرات التجميع الشرطي، وإرفاق البيانات الوصفية بالحقول. والفئات والتعبيرات، واستيفاء السلسلة ("اسمي هو $name")، وكتابة المعلمات ("new Main‹String›('foo')")، و أكثر بكثير.

اختبار فئة {
الوظيفة الثابتة الرئيسية () {
فار الناس = [
"إليزابيث" => "البرمجة"،
"جويل" => "التصميم"
];

لـ (الاسم في People.keys()) {
فار الوظيفة = الناس[اسم];
تتبع('$name يقوم بعمل $ لكسب لقمة العيش!');
}
}
}

رئيسي الابتكارات الإصدار 4.0:

  • بناء جملة جديد لتحديد نوع الوظيفة "(name:String, age:Int)->Bool" أو "(String, Int)->Bool" بدلاً من "String->Int->Bool".
  • صيغة دالة السهم هي "(a, b) -> a + b" بدلاً من "function(a, b) return a + b".
  • الحماية ضد المشاكل المرتبطة باستخدام القيم الخالية (ميزة تجريبية، ممكّنة اختياريًا لحقول أو فئات أو حزم معينة).
  • الكلمة الأساسية "النهائية" مخصصة لحقول الفئة والمتغيرات المحلية غير القابلة للتغيير. يمكن أيضًا استخدام "النهائي" لتحديد الوظائف لمنع تجاوزها عن طريق الوراثة وللفئات/الواجهات التي لا يمكن توريثها.
  • Поддержка معيار Unicode للنوع الأساسي "String" في جميع أهداف الترجمة باستثناء Neko.
  • مترجم مدمج تمت إعادة كتابته من الصفر، والذي يأتي الآن تحت الاسم وحدة التقييم. بفضل المترجم الجديد، تعمل البرامج النصية ووحدات الماكرو بشكل أسرع. يتم دعم وضع التصحيح التفاعلي.
  • نظام هدف جديد للتجميع (الهدف) هاشلينك - وقت تشغيل عالي الأداء مصمم خصيصًا لـ Haxe، ويدعم التحويل البرمجي إلى الكود الثانوي لـ JIT أو C، ويتميز بسهولة التكامل مع C، فضلاً عن الوصول إلى أنواع ومؤشرات رقمية منخفضة المستوى.
  • هدف JVM الجديد - يسمح لك بإنشاء كود jvm bytecode عن طريق تخطي خطوة تجميع كود Java عن طريق إضافة علامة "-D jvm" عند الاستهداف في Java.
  • القدرة على النشر المضمن عند نقطة استدعاء الوظائف أو المنشئات، حتى لو لم يتم الإعلان عنها على هذا النحو.
  • إمكانية الإدراج ملحقات ثابتة عند الإعلان عن نوع (مثل "enum") باستخدام "@:using(path.ToExtension)".
  • تدعم الأنواع المجردة الآن إصدار "set" من عامل التشغيل "@:op(ab)" لإعادة تحميل تعبيرات "obj.foo = bar".
  • يدعم بناء جملة الحلقة "for" الآن تكرار قيمة المفتاح: "for (key => value in Collection) {}".
  • دعم استخدام علامات تشبه XML في التعبيرات: "var a = ‹hi/›;". في الوقت الحالي، هذه الميزة متاحة فقط للتحليل باستخدام وحدات الماكرو وهي في مرحلة التصميم.
  • بناء جملة الحقول الاختيارية في التدوين "الكامل" لأنواع البنية المجهولة هو: "{ var ?f:Int; }" (بديل للاختصار "{ ?f:Int }").
  • يمكن أن تكون قيم التعداد الآن قيمًا افتراضية لوسيطات الوظيفة: "function foo‹T›(option:Option‹T› = None)".
  • لم تعد صيغة "enum Abstract Name(BasicType) {}" تتطلب البادئة "@:" في "enum".
  • الترقيم التلقائي للتعدادات المجردة:

    التعداد مجردة Foo(Int) {
    فار أ ؛ // 0
    فار ب؛ // 1
    }
    التعداد شريط مجردة (سلسلة) {
    فار أ ؛ // "أ"
    فار ب؛ // "ب"
    }

  • لم تعد الكلمة الأساسية "الخارجية" تتطلب استخدام البادئة "@:".
  • تم حذف الخيار "الأدوات Dynamic" للوصول إلى حقول الفصل عبر السلاسل. متاح للفصول الخارجية أو من خلال التنفيذ بنوع مجردة.
  • تمت إضافة بناء الجملة "A & B" لتقاطع النوع، والذي ينطبق حاليًا فقط على الهياكل المجهولة وقيود معلمات النوع. تمت إزالة بناء جملة القيد القديم.
  • يتوفر إنشاء مثيلات "Map" فارغة عبر بناء الجملة "var Map:Map‹Int, String› = [];" تشبه المصفوفة.
  • تمت إضافة بنية البيانات "haxe.ds.ReadOnlyArray".
  • يمكن أن تحتوي البيانات التعريفية الآن على مساحات أسماء ("@:prefix.name function() {...}"). وبالمثل مع التعريفات: "#if (some.flag... #end".
  • بروتوكول خدمة جديد لـ IDEs المستخدم في البرنامج المساعد لVSCode.
  • تم تحديث التعريفات الخارجية (الخارجية) لواجهات برمجة تطبيقات الويب وإضافة التعريفات المفقودة.

المصدر: opennet.ru

إضافة تعليق