Lëshimi i gjuhës së programimit Haxe 4.0

Në dispozicion lëshimi i paketës së veglave Haxe 4.0, i cili përfshin gjuhën e programimit të nivelit të lartë me shumë paradigmë me të njëjtin emër me shtypje të fortë, një ndër-përpilues dhe një bibliotekë standarde funksionesh. Projekti mbështet përkthimin në C++, HashLink/C, JavaScript, C#, Java, PHP, Python dhe Lua, si dhe përpilimin në JVM, HashLink/JIT, Flash dhe Neko bytecode, me akses në aftësitë vendase të çdo platforme të synuar. Kodi i përpiluesit shperndare nga nën licencën GPLv2, dhe një bibliotekë standarde dhe një makinë virtuale e zhvilluar për Haxe neko nën licencën MIT.

Gjuha është të orientuar drejt shprehjes me shtypje të fortë. Mbështeten konceptet e programimit të orientuar nga objekti, gjenerik dhe funksional.
Sintaksa Haxe është afër ECMAScript dhe zgjerohet veçoritë e tij si shkrimi statik, konkluzionet automatike, përputhja e modelit, gjenerikët, unazat e bazuara në iterator, makrotë AST, GADT (Llojet e Përgjithshme të të Dhënave Algjebrike), llojet abstrakte, strukturat anonime, përkufizimet e thjeshtuara të grupeve, shprehjet e kompilimit të kushtëzuar , bashkëngjitja e meta të dhënave në fusha , klasat dhe shprehjet, interpolimi i vargut ('Emri im është $name'), tipi i parametrave ("New Main‹String›('foo')"), dhe me shume.

testi i klasës {
funksioni statik main() {
var njerëz = [
"Elizabeth" => "Programim",
"Joel" => "Dizajn"
];

për (emri në people.keys()) {
var punë = njerëzit[emri];
trace('$name bën $punë për të jetuar!');
}
}
}

Kryesore risitë versioni 4.0:

  • Sintaksë e re për specifikimin e llojit të funksionit "(emri:String, age:Int)->Bool" ose "(String, Int)->Bool" në vend të "String->Int->Bool".
  • Sintaksa e funksionit të shigjetës është "(a, b) -> a + b" në vend të "funksionit(a, b) kthen a + b".
  • Mbrojtje ndaj problemeve që lidhen me përdorimin e vlerave Null (funksion eksperimental, opsionalisht i aktivizuar për fusha, klasa ose paketa të caktuara).
  • Fjala kyçe "përfundimtare" është për fushat e klasës dhe variablat lokale që janë të pandryshueshme. "Final" mund të përdoret gjithashtu për të përcaktuar funksionet për të parandaluar që ato të anashkalohen nga trashëgimia dhe për klasat/ndërfaqet që nuk mund të trashëgohen.
  • Mbështetje Standardi Unicode për llojin bazë "String" në të gjitha objektivat e kompilimit përveç Neko.
  • Përkthyesi i integruar i rishkruar nga e para, i cili tani vjen nën emrin E keqe. Falë përkthyesit të ri, skriptet dhe makrot funksionojnë shumë më shpejt. Mbështet modaliteti ndërveprues i korrigjimit.
  • Sistemi i ri i synimeve për përpilim (objektivi) Hashlink - një kohë ekzekutimi me performancë të lartë e krijuar posaçërisht për Haxe, duke mbështetur përpilimin në bytecode për JIT ose C, ka integrim të lehtë me C, si dhe akses në lloje dhe tregues numerikë të nivelit të ulët.
  • Objektivi i ri JVM - ju lejon të gjeneroni jvm bytecode duke kapërcyer hapin e përpilimit të kodit Java duke shtuar flamurin "-D jvm" kur synoni në Java.
  • Aftësia për të vendosur në linjë në pikën e thirrjes së funksioneve ose konstruktorëve, edhe nëse ato nuk janë deklaruar si të tillë.
  • Mundësia e përfshirjes zgjatime statike kur deklaroni një lloj (siç është "enum") duke përdorur "@:using(path.ToExtension)".
  • Llojet abstrakte tani mbështesin një version "set" të operatorit "@:op(ab)" për të ringarkuar shprehjet "obj.foo = bar".
  • Sintaksa e ciklit "for" tani mbështet përsëritjen e vlerës së çelësit: "for (ky => vlera në koleksion) {}".
  • Mbështetje për përdorimin e shënjimit të ngjashëm me xml në shprehjet: "var a = ‹hi/›;". Për momentin, kjo veçori është e disponueshme vetëm për analizë me makro dhe është në fazën e projektimit.
  • Sintaksa për fushat opsionale në shënimin "e plotë" të llojeve të strukturave anonime është: "{ var ?f:Int; }" (një alternativë për të shkurtër "{ ?f:Int }").
  • Vlerat e numërimit tani mund të jenë vlera të paracaktuara për argumentet e funksionit: "funksioni foo‹T›(opsioni:Opsion‹T› = Asnjë)".
  • Sintaksa "enum abstract Name(BasicType) {}" nuk kërkon më prefiksin "@:" në "enum".
  • Numërimi automatik për numërimet abstrakte:

    enum abstrakt Foo(Int) {
    var A; // 0
    varg B; // 1
    }
    shirit abstrakt (vargu) {
    var A; // "A"
    varg B; // "B"
    }

  • Fjala kyçe "e jashtme" nuk kërkon më përdorimin e prefiksit "@:".
  • U hoq opsioni "orendi Dynamic" për të hyrë në fushat e klasës nëpërmjet vargjeve. E disponueshme për klasat e jashtme ose përmes zbatimit sipas një lloji abstrakt.
  • U shtua sintaksa "A & B" për kryqëzimin e tipit, e cila aktualisht zbatohet vetëm për strukturat anonime dhe kufizimet e parametrave të tipit. Sintaksa e vjetër e kufizimeve është hequr.
  • Krijimi i shembujve të zbrazët "Hartë" është i disponueshëm nëpërmjet sintaksës "var map:Map‹Int, String› = [];" të ngjashme me një grup.
  • U shtua struktura e të dhënave "haxe.ds.ReadOnlyArray".
  • Të dhënat meta tani mund të kenë hapësira emrash (“@:prefix.name funksion() {…}”). Në mënyrë të ngjashme me përkufizimet: "#nëse (disa.flamur ... #fund".
  • Protokolli i ri i shërbimit për IDE-të i përdorur në plugin për VSCode.
  • Përkufizime të jashtme të përditësuara (të jashtme) për API-të e Uebit dhe të shtuara që mungojnë.

Burimi: opennet.ru

Shto një koment