Eldono de la programlingvo Haxe 4.0

Disponebla liberigo de ilaro Haxe 4.0, kiu inkluzivas la samnoman mult-paradigma altnivelan programlingvon kun forta tajpado, kruckompililon kaj norman bibliotekon de funkcioj. La projekto subtenas tradukadon al C++, HashLink/C, JavaScript, C#, Java, PHP, Python kaj Lua, same kiel kompilon al JVM, HashLink/JIT, Flash kaj Neko-bajtokodo, kun aliro al la indiĝenaj kapabloj de ĉiu celplatformo. Kompilkodo distribuita de sub la licenco GPLv2, kaj norma biblioteko kaj virtuala maŝino evoluigita por Haxe neko sub la MIT-licenco.

Lingvo estas esprimorientita kun forta tajpado. Objekt-orientitaj, senmarkaj kaj funkciaj programaj konceptoj estas subtenataj.
Haxe-sintakso estas proksima al ECMAScript kaj vastiĝas ĝiaj trajtoj kiel ekzemple senmova tajpado, aŭtotipa inferenco, padronkongruo, senmarkaj, iterator-bazita por bukloj, AST-makrooj, GADT (Ĝeneraligitaj Algebraj Datumoj-Tipoj), abstraktaj tipoj, anonimaj strukturoj, simpligitaj tabelaj difinoj, kondiĉaj kompilesprimoj, alkroĉante metadatenojn al kampoj , klasoj kaj esprimoj, ĉeninterpolado ("Mia nomo estas $nomo"), tajpu parametrojn ("nova Ĉefa‹String›('foo')"), kaj multe pli.

klastesto {
senmova funkcio ĉefa () {
var homoj = [
"Elizabeth" => "Programado",
"Joel" => "Dezajno"
];

por (nomo en homoj.klavoj()) {
var laboro = homoj[nomo];
trace('$nomo faras $laboron por vivteni!');
}
}
}

Ĉefa novigoj versio 4.0:

  • Nova sintakso por specifi funkciotipo "(nomo:String, aĝo:Int)->Bool" aŭ "(String, Int)->Bool" anstataŭ "String->Int->Bool".
  • Sago-funkcia sintakso estas "(a, b) -> a + b" anstataŭ "funkcio (a, b) redoni a + b".
  • Protekto kontraŭ problemoj asociitaj kun la uzo de Nulaj valoroj (eksperimenta trajto, laŭvole ebligita por iuj kampoj, klasoj aŭ pakaĵoj).
  • La "fina" ŝlosilvorto estas por klaskampoj kaj lokaj variabloj kiuj estas neŝanĝeblaj. "fina" ankaŭ povas esti uzita por difini funkciojn por malhelpi ilin esti superregata de heredo kaj por klasoj/interfacoj kiuj ne povas esti hereditaj.
  • subteno Unikoda normo por la baza tipo "String" en ĉiuj kompilceloj krom Neko.
  • Enkonstruita interpretisto reverkita de nulo, kiu nun venas sub la nomo Taksi. Danke al la nova interpretisto, skriptoj kaj makrooj funkcias multe pli rapide. Interaga sencimiga reĝimo estas subtenata.
  • Nova celsistemo por kompilo (celo) Hashlink - alt-efikeca rultempo desegnita specife por Haxe, subtenanta kompilon al bajtokodo por JIT aŭ C, havas facilan integriĝon kun C, same kiel aliron al malaltnivelaj nombraj tipoj kaj montriloj.
  • Nova JVM-celo - ebligas al vi generi jvm-bajtkodon preterpasante la Java-kodan kompilpaŝon aldonante la "-D jvm" flagon kiam celado en Java.
  • La kapablo enlini-deploji ĉe la punkto de vokado de funkcioj aŭ konstrukciistoj, eĉ se ili ne estas deklaritaj kiel tia.
  • Eblo de inkludo statikaj etendaĵoj kiam oni deklaras tipon (kiel ekzemple "enum") uzante "@:using(path.ToExtension)".
  • Abstraktaj tipoj nun subtenas "aro" version de la "@:op(a.b)" operatoro por reŝargi "obj.foo = bar" esprimojn.
  • La "for" buklosintakso nun subtenas ŝlosilvaloran ripeton: "for (ŝlosilo => valoro en kolekto) {}".
  • Subteno por uzi xml-similan markadon en esprimoj: "var a = ‹hi/›;". Nuntempe, ĉi tiu funkcio disponeblas nur por analizado per makrooj kaj estas en la dezajna stadio.
  • La sintakso por nedevigaj kampoj en la “plena” notacio de anonimaj strukturspecoj estas: “{ var ?f:Int; }" (alternativo al la mallonga "{ ?f:Int }").
  • Enumvaloroj nun povas esti defaŭltaj valoroj por funkcio-argumentoj: "funkcio foo‹T› (opcio:Opcio‹T› = Neniu)".
  • La sintakso "enum abstrakta Nomo(BasicType) {}" ne plu postulas la prefikson "@:" en "enum".
  • Aŭtomata numerado por abstraktaj enumeradoj:

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

  • La ŝlosilvorto "ekstera" ne plu postulas la uzon de la prefikso "@:".
  • Forigis la opcion "iloj Dinamika" por aliri klaskampojn per ŝnuroj. Havebla por eksteraj klasoj aŭ per efektivigo per abstrakta tipo.
  • Aldonita "A & B" sintakso por tipintersekco, kiu nuntempe nur validas por anonimaj strukturoj kaj tipparametrolimigoj. La malnova lima sintakso estis forigita.
  • Krei malplenajn "Map" petskribojn disponeblas per la sintakso "var map:Map‹Int, String› = [];" simila al tabelo.
  • Aldonita datumstrukturo "haxe.ds.ReadOnlyArray".
  • Metadatenoj nun povas havi nomspacojn ("@:prefix.name function() {...}"). Simile kun difinoj: "#se (iu.flago ... #fino".
  • Nova serva protokolo por IDEoj uzataj en kromaĵo por VSCode.
  • Ĝisdatigitaj eksteraj difinoj (eksteraj) por Retaj API-oj kaj aldonitaj mankantaj.

fonto: opennet.ru

Aldoni komenton