lëshimi i toolkit-it , përfshirë gjuhën e programimit shumëparadigmë me emrin e njëjtë, me tipizim të rreptë, një cross-compiler dhe një bibliotekë standarde funksionesh. Projekti mbështet përkthimin në C++, HashLink/C, JavaScript, C#, Java, PHP, Python dhe Lua, si dhe kompaktimin në bajt-kod JVM, HashLink/JIT, Flash dhe Neko, me akses në mundësitë native të secilës platformë të synuar. Kodi i kompajlerit nën licencën GPLv2, ndërsa biblioteka standarde dhe ata që zhvillohen për makinën virtuale Haxe në përputhje me licencën MIT.
Gjuha është me tipizim të rreptë. Mbështeten parimet e programimit objekt-orientuar, të përgjithësuar dhe funksional.
Sintaksa e Haxe i ngjan ECMAScript dhe ka mundĂ«si si tipizimi statik, auto-shpjegimi i tipave, pĂ«rputhje modele, gjenerikĂ«t, cikli 'for' i bazuar nĂ« iteracione, makrotĂ« AST, GADT (Tipat e DhĂ«na Algjebrike tĂ« Gjeneruar), tipat abstraktĂ«, strukturat anonime, pĂ«rkufizimet e thjeshta tĂ« masivave, shprehjet pĂ«r kompilin e kushtit, bashkĂ«ngjitjen e metadata nĂ« fusha, klasa dhe shprehje, interpolimi i vargjeve (âEmri im Ă«shtĂ« $nameâ), parametrat e tipeve (ânew MainâčStringâș(âfooâ)â) dhe .
class Test {
funkcioni statik kryesor() {
var people = [
«Elizabeth» => «Programim»,
«Joel» => «Dizajn»
];
for (name in people.keys()) {
var job = people[name];
trace(â$emri bĂ«n $punĂ« pĂ«r njĂ« jetĂ«!â);
}
}
}
Ndryshimet kryesore versioni 4.0:
- Sintaksa e re për specifikimin e tipit të funksioneve '(name:String, age:Int)->Bool' ose '(String, Int)->Bool' në vend të 'String->Int->Bool'.
- Sintaksa e funksioneve me shkallë '(a, b) -> a + b' në vend të 'function(a, b) return a + b'.
- Mbrojtja nga problemet e lidhura me përdorimin e vlerave Null (veçori eksperimentale, aktivizohet me dëshirë për fusha të caktuara, klasa ose paketa).
- Fjalëkalimi 'final' për fushat e klasave dhe variablat lokalë, që janë të pandryshueshëm. 'final' mund të përdoret gjithashtu për të përcaktuar funksionet për të ndaluar mbi-shkrimin e tyre gjatë trashëgimisë dhe për klasat/interfetat që nuk mund të trashëgohen.
- standardit Unicode për tipin bazë 'String' në të gjitha qëllimet e kompikimit përveç Neko.
- Të rinovuar nga zero interpretuesi i integruar, i cili tani jepet me emrin . Falë interpretuesit të ri, skenaret dhe makrotë ekzekutohen shumë më shpejt. Mbështetet moda e ndihmës interaktive.
- Sistemi i ri i synimit pĂ«r kompaktimin (target) â njĂ« runtime me performancĂ« tĂ« lartĂ«, e cila Ă«shtĂ« zhvilluar veçanĂ«risht pĂ«r Haxe, mbĂ«shtet kompaktimin nĂ« bajt-kod pĂ«r JIT ose C, ka integrim tĂ« thjeshtĂ« me C, si dhe akses nĂ« tipe numerike tĂ« ulĂ«ta dhe tregues.
- Sistemi i ri i synimit JVM â lejon qĂ« tĂ« gjenerohet bajt-kod jvm, duke kaluar fazĂ«n e kompaktimit tĂ« kodit Java duke shtuar flagun '-D jvm' gjatĂ« synimit nĂ« Java.
- Mundësia e zhvillimit inline në vendin e thirrjes së funksioneve ose konstruktorëve, madje edhe nëse ato nuk janë shpallur si të tilla.
- Mundësia e përfshirjes në shpalljen e tipit (p.sh. 'enum') me '@:using(path.ToExtension)'.
- Tipat abstraktë tani mbështesin versionin 'set' të operatorit '@:op(a.b)' për të mbivendosur shprehjet 'obj.foo = bar'.
- Sintaksa e ciklit 'for' tani mbështet iterimin 'çelës-vlerë': 'for (key => value in collection) {}'.
- MbĂ«shtetje pĂ«r pĂ«rdorimin e markimit sŃ ngjashĂ«m me xml nĂ« shprehjet: 'var a = âčhi/âș;'. Deri tani kjo mundĂ«si Ă«shtĂ« e disponueshme vetĂ«m pĂ«r pĂ«rpunimin nga makrotĂ« dhe Ă«shtĂ« nĂ« fazĂ« dizajni.
- Sintaksa për fushat opsionale në 'shënimin e plotë' të tipeve të strukturave anonime: '{ var ?f:Int; }' (alternativë 'e shkurtër' '{ ?f:Int }').
- Vlerat e enumerimeve tani mund tĂ« jenĂ« vlera qĂ« janĂ« nĂ« mĂ«nyrĂ« tĂ« paracaktuar pĂ«r argumentet e funksioneve: 'function fooâčTâș(option:OptionâčTâș = None)'.
- Sintaksa 'enum abstract Name(BasicType) {}' nuk kërkon më prefiksin '@:'.
- Numërimi automatik për enumerimet abstrakte:
enum abstract Foo(Int) {
var A; // 0
var B; // 1
}
enum abstract Bar(String) {
var A; // 'A'
var B; // 'B'
} - Fjalëkalimi 'extern' nuk kërkon më përdorimin e prefiksit '@:'.
- Eliminimi i mundësisë 'implements Dynamic' për të arritur në fushat e klasës përmes vargjeve. E disponueshme për klasat extern ose përmes zbatimit të tipit abstrakt.
- E shtuar sintaksa 'A & B' për kryqëzimin e tipeve, e cila aktualisht aplikohet vetëm për strukturat anonime dhe kufizimet e parametrit të tipit. Sintaksa e vjetër e kufizimeve është eliminuar.
- Krijimi i instancave tĂ« zbrazĂ«ta 'Map' Ă«shtĂ« i disponueshĂ«m pĂ«rmes sintaksĂ«s 'var map:MapâčInt, Stringâș = [];', nĂ« mĂ«nyrĂ« tĂ« ngjashme me masivin.
- Struktura e dhënave 'haxe.ds.ReadOnlyArray' është shtuar.
- Metadatet tani mund të kenë hapësira emrash ('@:prefix.name function() {...}'). Po ashtu edhe për përkufizimet: '#if (some.flag ... #end'.
- Protocol i ri shërbimesh për IDE-të që përdoren në .
- Përditësime të përkufizimeve të jashtme (extern) për Web APIs dhe janë shtuar ato që mungonin.
Burimi: opennet.ru
