Haxe 4.2 dasturlash tilining chiqarilishi

Haxe 4.2 asboblar to'plamining relizi mavjud bo'lib, u kuchli terish, o'zaro kompilyator va standart funktsiyalar 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 GPLv2 litsenziyasi ostida tarqatiladi va standart kutubxona va Haxe uchun ishlab chiqilgan HashLink va Neko virtual mashinalari MIT litsenziyasi ostida litsenziyalangan.

Til kuchli terish bilan ifodaga yo'naltirilgan. Ob'ektga yo'naltirilgan, umumiy va funktsional dasturlash usullari qo'llab-quvvatlanadi. Haxe sintaksisi ECMAScript-ga yaqin va uni statik yozish, avtomatik turdagi xulosalar, naqsh moslashtirish, generiklar, tsikllar uchun iteratorga asoslangan, AST makroslari, GADT (umumiy algebraik maʼlumotlar turlari), mavhum turlar, anonim tuzilmalar, soddalashtirilgan kabi xususiyatlar bilan kengaytiradi. ta'riflar massivlari, shartli kompilyatsiya uchun iboralar, maydonlar, sinflar va ifodalarga metama'lumotlar biriktirish, satr interpolyatsiyasi ('Mening ismim $name'), tip parametrlari ('yangi Asosiy (“foo”)') va boshqalar. class Test { statik funktsiya main() { yakuniy odamlar = [ "Elizabet" => "Dasturlash", "Joel" => "Dizayn" ]; for (ism => odamlarda ish) { trace('$name tirikchilik uchun $ish qiladi!'); } } }

4.2 versiyasidagi yangi xususiyatlar:

  • Statik o'zgaruvchilar va funktsiyalarni modul darajasida, ularni sinfga o'rashga hojat qoldirmasdan e'lon qilish.
  • "Klassik" mavhum sinflar va funktsiyalarni qo'llab-quvvatlash.
  • Barcha maqsadli platformalar (haxe.Rest) uchun variadik funksiyalarning mahalliy amalga oshirilishi va “f(...array)” argumentni kengaytirish operatorining qo‘shilishi.
  • Alohida ish zarrachalari uchun voqealar siklini amalga oshirish (“sys.thread.Thread.events”).
  • Tur/maydon hujjatlarini meros qilib olish uchun "@:inheritDoc" metadata.
  • Barcha maqsadli platformalarda tashqi usullarni ortiqcha yuklashni qo'llab-quvvatlash.
  • “@:forward.new” metamaʼlumotlari yordamida uning turi asosidagi konstruktorni abstraktga yoʻnaltirish.
  • "haxe.macro.Expr" ga "EIs" konstruktori qo'shildi.
  • "@:forward.variance" bilan mavhum turdagi variantni yaratish qobiliyati.
  • Variatsiyani birlashtirishda "Har qanday" turini "Dinamik" sifatida ko'rsatish.
  • "haxe.exceptions" paketiga ba'zi asosiy istisno turlari qo'shildi.
  • O'zgaruvchilarni e'lon qilishda metama'lumotlarni qo'shishni qo'llab-quvvatlash.
  • "StringTools.unsafeCharAt" funktsiyasi satrni takrorlash uchun ishlatiladi.
  • eval (tarjimon): "eval.luv" paketidagi "libuv" ga bog'lashlar qo'shildi.
  • eval: "Eval.integers" paketi orqali "Int64" va "UInt64" ning mahalliy ilovalariga ulanish.
  • cs: UDP soketini amalga oshirish.
  • cs: C# kodini inline kiritish uchun "cs.Syntax" moduli.
  • jvm: Dinamik kod uchun yaratilgan optimallashtirishlar sonini nazorat qilish uchun “-D jvm.dynamic-level=x” bayrog‘i qo‘shildi. 0 = yo'q, 1 = maydonni o'qish/yozishni optimallashtirish, 2 = kompilyatsiya vaqtida usulni yopish.
  • java, jvm: "--java-lib <katalog>" bayrog'ini qo'llab-quvvatlash.
  • python: API tatbiq etilishi.

Umumiy yaxshilanishlar:

  • "expr is SomeType" qavs ichiga o'rashni talab qilmaydi.
  • "@:using" tipidagi kengaytmalar uchun ustuvorlik oshirildi.
  • "Super" orqali statik turdagi kengaytmalardan foydalanishga ruxsat beradi.
  • Metamaʼlumotlarni “@: noDoc” maydonlariga oʻrnatish imkoniyati.
  • “Xarita” mavhum turi o'tishli qilingan.
  • Enum konstruktorlarida "@:native" ni qo'llab-quvvatlash.
  • Tur deklaratsiyasida ("typedefs") "@:using" ni qo'llab-quvvatlash.
  • Ko'p qatorli xatolar keyingi qatorlar uchun prefiks sifatida "..." dan foydalanadi.
  • Turi xulosasi qayta ishlandi, anonim tuzilmalar aniq turlarga yaxshiroq aylantiriladi va funksiya tugagach "yopiladi".
  • Argumentlarsiz funksiyalar turini “Void->...” o‘rniga “()->...” deb xulosa qilish.
  • Paket nomi sifatida "funktsiya" kalit so'ziga ruxsat berilgan.
  • Ob'ektlarning ichki chizilishi yaxshilandi.
  • cs: .NET 5.0 uchun qo‘shimcha qo‘llab-quvvatlash.
  • cpp: tashqi sinflar uchun mahalliy konstruktorlarni qo'llab-quvvatlash.
  • php: Mahalliy massivni e'lon qilish uchun "php.Syntax.customArrayDecl" qo'shildi.
  • php: Turli funktsiyalar va sinflar uchun yangilangan tashqi usullar.
  • php: Anonim tuzilmalarni optimallashtirish.
  • hl: Agar modullarda o'zgarishlar bo'lmasa, kompilyatsiyani o'tkazib yuboring.
  • lua: jsonni tahlil qilish uchun "hx-lua-simdjson" dan foydalanish.
  • jvm: "sys.thread.Lock" ilovasida protsessor yukini kamaytirish.
  • js: Google Closure Compiler bilan yaxshilangan muvofiqlik.
  • Null Safety: o'zgaruvchilarni e'lon qilishda "@:nullSafety(Off)" ni hisobga oling: "var @:nullSafety(Off) v".

Shuningdek, VSCode muharririga qo'shimcha kompilyatorning yangi versiyasiga yangilandi, unda interfeyslarning etishmayotgan maydonlarini, oddiy va mavhum sinflarni, shuningdek xususiyat usullarini yaratish bo'yicha maslahatlar paydo bo'ldi.

Manba: opennet.ru

a Izoh qo'shish