Release fan de programmeartaal Haxe 4.0

Beskikber toolkit release Haxe 4.0, dy't de multi-paradigma heech nivo programmeartaal mei deselde namme omfettet mei sterke typen, in cross-compiler en in standert bibleteek fan funksjes. It projekt stipet oersetting nei C++, HashLink/C, JavaScript, C#, Java, PHP, Python en Lua, lykas kompilaasje nei JVM, HashLink/JIT, Flash en Neko bytecode, mei tagong ta de native mooglikheden fan elk doelplatfoarm. Kompilator koade ferspraat troch ûnder de GPLv2 lisinsje, en in standert bibleteek en in firtuele masine ûntwikkele foar Haxe neko ûnder de MIT-lisinsje.

Taal is ekspresje-rjochte mei sterk typen. Objekt-rjochte, generike en funksjonele programmearring konsepten wurde stipe.
Haxe syntaksis is tichtby ECMAScript en wreidet út syn funksjes lykas statysk typen, autotype-ynferzje, patroan oerienkomst, generika, iterator-basearre foar loops, AST-makro's, GADT (Generalized Algebraic Data Types), abstrakte typen, anonime struktueren, ferienfâldige array-definysjes, betingsten kompilaasje-útdrukkingen, heakjen fan metadata oan fjilden , klassen en útdrukkingen, tekenrige ynterpolaasje ('Myn namme is $name'), type parameters ("nije Main‹String›('foo')"), en folle mear.

klasse Test {
statyske funksje main() {
var minsken = [
"Elizabeth" => "Programmearje",
"Joel" => "Design"
];

foar (namme yn people.keys()) {
var job = minsken[namme];
trace('$name docht $job foar in libben!');
}
}
}

haad ynnovaasjes Ferzje 4.0:

  • Nije syntaksis foar it opjaan fan funksjetype "(namme:String, leeftyd:Int)->Bool" of "(String, Int)->Bool" ynstee fan "String->Int->Bool".
  • Arrow funksje syntaksis is "(a, b) -> a + b" ynstee fan "funksje (a, b) jout a + b".
  • Beskerming tsjin problemen ferbûn mei it brûken fan Null-wearden (eksperimintele funksje, opsjoneel ynskeakele foar bepaalde fjilden, klassen as pakketten).
  • It "finale" kaaiwurd is foar klassefjilden en lokale fariabelen dy't ûnferoarlik binne. "finale" kin ek brûkt wurde om funksjes te definiearjen om foar te kommen dat se wurde oerskreaun troch erfskip en foar klassen/ynterfaces dy't net oererfd wurde kinne.
  • stipe Unicode-standert foar it basistype "String" op alle kompilaasjedoelen útsein Neko.
  • Ynboude tolk fanôf it begjin opnij skreaun, dy't no ûnder de namme komt Evaluearje. Troch de nije tolk rinne skripts en makro's folle flugger. Ynteraktive debuggen modus wurdt stipe.
  • Nij doelsysteem foar kompilaasje (doel) Hashlink - in runtime mei hege prestaasjes spesifyk ûntworpen foar Haxe, it stypjen fan kompilaasje nei bytekoade foar JIT of C, hat maklike yntegraasje mei C, lykas tagong ta numerike typen en oanwizers op leech nivo.
  • Nije JVM-doel - lit jo jvm-bytekoade generearje troch de stap foar kompilaasje fan Java-koade oer te slaan troch de flagge "-D jvm" ta te foegjen by it targetjen yn Java.
  • De mooglikheid om inline-ynset te meitsjen op it punt fan it oproppen fan funksjes of konstruktors, sels as se net as sadanich wurde ferklearre.
  • Mooglikheid fan opname statyske útwreidings by it deklarearjen fan in type (lykas "enum") mei "@:using(path.ToExtension)".
  • Abstrakte typen stypje no in "set" ferzje fan de operator "@:op(a.b)" om "obj.foo = bar" útdrukkingen opnij te laden.
  • De loopsyntaksis "foar" stipet no kaai-wearde-iteraasje: "foar (kaai => wearde yn kolleksje) {}".
  • Stipe foar it brûken fan xml-like markup yn útdrukkingen: "var a = ‹hi/›;". Foar no is dizze funksje allinich beskikber foar parsearjen mei makro's en is yn it ûntwerpstadium.
  • De syntaksis foar opsjonele fjilden yn 'e "folsleine" notaasje fan anonime struktuertypen is: "{ var ?f: Int; }" (in alternatyf foar de koarte "{ ?f:Int }").
  • Enum-wearden kinne no standertwearden wêze foar funksje-arguminten: "funksje foo‹T›(opsje: Opsje‹T› = Gjin)”.
  • De "enum abstract Name(BasicType) {}" syntaksis fereasket net langer it "@:" foarheaksel yn "enum".
  • Automatyske nûmering foar abstrakte opsommingen:

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

  • It "eksterne" kaaiwurd fereasket net langer it gebrûk fan it foarheaksel "@:".
  • De opsje fuortsmiten "ymplementearret Dynamic" om tagong te krijen ta klassefjilden fia stringen. Beskikber foar eksterne klassen of fia ymplemintaasje troch in abstrakt type.
  • Added "A & B" syntaksis foar type krusing, dy't op it stuit allinnich jildt foar anonime struktueren en type parameter beheinings. De âlde beheiningsyntaksis is fuorthelle.
  • Lege "Map"-eksimplaren oanmeitsje is beskikber fia de syntaksis "var map:Map‹Int, String› = [];" fergelykber mei in array.
  • Added gegevensstruktuer "haxe.ds.ReadOnlyArray".
  • Metadata kinne no nammeromten hawwe ("@:prefix.name function() {...}"). Lykas mei definysjes: "#if (some.flag ... #end".
  • Nije tsjinstprotokol foar IDE's brûkt yn plugin foar VSCode.
  • Bywurke eksterne definysjes (ekstern) foar Web API's en tafoege ûntbrekkende.

Boarne: opennet.ru

Add a comment