Haxe 4.0 dasturlash tilining chiqarilishi

Mavjud asboblar to'plamini chiqarish Haxe 4.0, kuchli terish, o'zaro kompilyator va funksiyalarning standart kutubxonasi bilan bir xil nomdagi ko'p paradigmali yuqori darajali dasturlash tilini o'z ichiga oladi. Loyiha C++, HashLink/C, JavaScript, C#, Java, PHP, Python va Lua tillariga tarjima qilishni, shuningdek, JVM, HashLink/JIT, Flash va Neko baytkodlariga kompilyatsiya qilishni, har bir maqsadli platformaning mahalliy imkoniyatlaridan foydalanishni qo‘llab-quvvatlaydi. Kompilyator kodi tarqaladi GPLv2 litsenziyasi va Haxe uchun ishlab chiqilgan standart kutubxona va virtual mashina neko MIT litsenziyasi ostida.

Til bu ifodalashga qaratilgan kuchli yozish bilan. Ob'ektga yo'naltirilgan, umumiy va funktsional dasturlash tushunchalari qo'llab-quvvatlanadi.
Haxe sintaksisi ECMAScript-ga yaqin va kengayadi uning statik terish, avtotip xulosasi, naqsh moslashuvi, generiklar, takrorlash uchun döngüler, AST makrolari, GADT (umumiy algebraik maʼlumotlar turlari), mavhum turlar, anonim tuzilmalar, soddalashtirilgan massiv taʼriflari, shartli kompilyatsiya ifodalari, maydonlarga metamaʼlumotlar biriktirish kabi xususiyatlari , sinflar va iboralar, string interpolyatsiyasi ('Mening ismim $name'), tip parametrlari ("yangi Main‹String›('foo')") va ko'proq.

sinf testi {
statik funktsiya main() {
var odamlar = [
"Elizabet" => "Dasturlash",
"Joel" => "Dizayn"
];

uchun (inson.keys() da nom) {
var job = odamlar[ism];
trace(‘$name tirikchilik uchun $ish qiladi!’);
}
}
}

asosiy yangiliklar 4.0 versiyasi:

  • "String->Int->Bool" o'rniga "(name:String, age:Int)->Bool" yoki "(String, Int)->Bool" funksiya turini belgilash uchun yangi sintaksis.
  • Ok funksiyasi sintaksisi "funksiya (a, b) a + b qaytarish" o'rniga "(a, b) -> a + b".
  • Null qiymatlaridan foydalanish bilan bog'liq muammolardan himoya (ma'lum maydonlar, sinflar yoki paketlar uchun ixtiyoriy ravishda yoqilgan eksperimental xususiyat).
  • "Yakuniy" kalit so'zi sinf maydonlari va o'zgarmas mahalliy o'zgaruvchilar uchundir. "Yakuniy" funksiyalarni meros orqali bekor qilinishini oldini olish va meros qilib bo'lmaydigan sinflar/interfeyslar uchun aniqlash uchun ham ishlatilishi mumkin.
  • qo'llab-quvvatlash Nekodan tashqari barcha kompilyatsiya maqsadlarida "String" asosiy turi uchun Unicode standarti.
  • O'rnatilgan tarjimon noldan qayta yozilgan, endi u nomi ostida keladi Baho. Yangi tarjimon tufayli skriptlar va makrolar tezroq ishlaydi. Interaktiv nosozliklarni tuzatish rejimi qo'llab-quvvatlanadi.
  • Kompilyatsiya qilish uchun yangi maqsadli tizim (maqsad) Hashlink - Haxe uchun maxsus ishlab chiqilgan, JIT yoki C uchun bayt-kodga kompilyatsiya qilishni qo'llab-quvvatlaydigan yuqori samarali ish vaqti C bilan oson integratsiyaga ega, shuningdek, past darajadagi raqamli turlar va ko'rsatkichlardan foydalanish imkoniyatiga ega.
  • Yangi JVM maqsadi - Java-da nishonlashda "-D jvm" bayrog'ini qo'shish orqali Java kodini kompilyatsiya qilish bosqichini o'tkazib yuborish orqali jvm baytekodini yaratishga imkon beradi.
  • Funktsiyalar yoki konstruktorlarni chaqirish nuqtasida, hatto ular shunday deb e'lon qilinmagan bo'lsa ham, inline-joylashtirish imkoniyati.
  • Qo'shilish imkoniyati statik kengaytmalar "@:using(path.ToExtension)" yordamida turni (masalan, "enum") e'lon qilishda.
  • Mavhum turlari endi "obj.foo = bar" ifodalarini qayta yuklash uchun "@:op(a.b)" operatorining "to'siq" versiyasini qo'llab-quvvatlaydi.
  • “For” sikl sintaksisi endi kalit-qiymat iteratsiyasini qo‘llab-quvvatlaydi: “for (key => to‘plamdagi qiymat) {}”.
  • "var a = ‹hi/›;" iboralarida xml-ga o'xshash belgilardan foydalanishni qo'llab-quvvatlash. Hozircha bu xususiyat faqat makroslar bilan tahlil qilish uchun mavjud va dizayn bosqichida.
  • Anonim tuzilma turlarining “toʻliq” belgisidagi ixtiyoriy maydonlar uchun sintaksis: “{ var ?f:Int; }" (qisqa "{ ?f:Int }"ga muqobil).
  • Enum qiymatlari endi funktsiya argumentlari uchun standart qiymatlar bo'lishi mumkin: "funksiya foo‹T›(variant:Option‹T› = Yo'q)".
  • "enum abstract Name(BasicType) {}" sintaksisi endi "enum"da "@:" prefiksini talab qilmaydi.
  • Abstrakt ro'yxatlar uchun avtomatik raqamlash:

    enum abstract Foo(Int) {
    var A; // 0
    var B; // 1
    }
    enum abstract Bar(String) {
    var A; // "A"
    var B; // "B"
    }

  • "extern" kalit so'zi endi "@:" prefiksidan foydalanishni talab qilmaydi.
  • Variant olib tashlandi "amalga oshiradi Sinf maydonlariga satrlar orqali kirish uchun dinamik". Ekstern sinflar uchun yoki mavhum turdagi amalga oshirish orqali mavjud.
  • Hozircha faqat anonim tuzilmalar va turdagi parametr cheklovlari uchun amal qiladigan turdagi kesishuv uchun “A & B” sintaksisi qo‘shildi. Eski cheklov sintaksisi olib tashlandi.
  • Bo'sh "Xarita" misollarini yaratish "var map:Map‹Int, String› = [];" sintaksisi orqali mavjud. massivga o'xshaydi.
  • “haxe.ds.ReadOnlyArray” maʼlumotlar strukturasi qoʻshildi.
  • Endi metamaʼlumotlarda nom boʻshliqlari boʻlishi mumkin (“@:prefix.name function() {…}”). Xuddi shunday ta'riflar bilan: "#if (some.flag ... #end".
  • Amaldagi IDElar uchun yangi xizmat protokoli VSCode uchun plagin.
  • Veb-API uchun tashqi ta'riflar (extern) yangilandi va etishmayotganlar qo'shildi.

Manba: opennet.ru

a Izoh qo'shish