Ħruġ tal-lingwa ta' programmar Haxe 4.0

Disponibbli rilaxx ta' toolkit Haxe 4.0, li tinkludi l-lingwa ta 'programmar ta' livell għoli multi-paradigma ta 'l-istess isem b'ittajpjar qawwi, cross-compiler u librerija standard ta' funzjonijiet. Il-proġett jappoġġja t-traduzzjoni għal C++, HashLink/C, JavaScript, C#, Java, PHP, Python u Lua, kif ukoll kumpilazzjoni għal JVM, HashLink/JIT, Flash u Neko bytecode, b'aċċess għall-kapaċitajiet indiġeni ta 'kull pjattaforma fil-mira. Kodiċi tal-kompilatur imqassma minn taħt il-liċenzja GPLv2, u librerija standard u magna virtwali żviluppati għal Haxe neko taħt il-liċenzja MIT.

Il-lingwa hija orjentat lejn l-espressjoni b'ittajpjar qawwi. Kunċetti ta' programmazzjoni orjentati lejn l-oġġetti, ġeneriċi u funzjonali huma appoġġjati.
Is-sintassi Haxe hija qrib ECMAScript u tespandi il-karatteristiċi tiegħu bħal tajpjar statiku, inferenza awtotip, tqabbil tal-mudelli, ġeneriċi, for loops ibbażati fuq iteratur, makro AST, GADT (Tipi ta' Dejta Alġebrin Ġeneralizzat), tipi astratti, strutturi anonimi, definizzjonijiet ta' firxa simplifikata, espressjonijiet ta' kumpilazzjoni kondizzjonali , tehmeż ta' metadata ma' oqsma , klassijiet u espressjonijiet, interpolazzjoni ta' string ('Ismi $name'), parametri tat-tip ("New Main‹String›('foo')"), u hafna aktar.

test tal-klassi {
funzjoni statika main() {
var nies = [
"Elizabeth" => "Ipprogrammar",
"Joel" => "Disinn"
];

għal (isem in people.keys ()) {
var job = nies[isem];
trace('$isem jagħmel $job għal għajxien!');
}
}
}

Il-prinċipali innovazzjonijiet verżjoni 4.0:

  • Sintassi ġdida għall-ispeċifikazzjoni tat-tip ta' funzjoni "(isem:String, età:Int)->Bool" jew "(String, Int)->Bool" minflok "String->Int->Bool".
  • Is-sintassi tal-funzjoni tal-vleġġa hija "(a, b) -> a + b" minflok "function(a, b) return a + b".
  • Protezzjoni kontra problemi assoċjati mal-użu ta 'valuri Null (karatteristika sperimentali, attivata b'mod fakultattiv għal ċerti oqsma, klassijiet jew pakketti).
  • Il-kelma prinċipali "finali" hija għal oqsma tal-klassi u varjabbli lokali li huma immutabbli. "finali" tista' tintuża wkoll biex tiddefinixxi funzjonijiet biex ma tħallihomx jinqabżu mill-wirt u għal klassijiet/interfaces li ma jistgħux jintirtu.
  • Appoġġ Standard Unicode għat-tip bażi "String" fuq il-miri kollha tal-kumpilazzjoni ħlief Neko.
  • Interpretu inkorporat miktub mill-ġdid mill-bidu, li issa jiġi taħt l-isem Evalwazzjoni. Grazzi għall-interpretu l-ġdid, l-iskripts u l-macros jimxu ħafna aktar malajr. Il-mod ta 'debugging interattiv huwa appoġġjat.
  • Sistema ta' mira ġdida għall-kumpilazzjoni (mira) Hashlink - runtime ta 'prestazzjoni għolja ddisinjat speċifikament għal Haxe, li jappoġġja l-kumpilazzjoni għal bytecode għal JIT jew C, għandu integrazzjoni faċli ma' C, kif ukoll aċċess għal tipi numeriċi u pointers ta 'livell baxx.
  • Mira JVM ġdida - tippermettilek tiġġenera bytecode jvm billi taqbeż il-pass tal-kompilazzjoni tal-kodiċi Java billi żżid il-bandiera "-D jvm" meta timmira f'Java.
  • Il-ħila li tiskjera inline fil-punt ta' sejħa ta' funzjonijiet jew kostrutturi, anke jekk ma jkunux iddikjarati bħala tali.
  • Possibbiltà ta' inklużjoni estensjonijiet statiċi meta tiddikjara tip (bħal "enum") billi tuża "@:using(path.ToExtension)".
  • It-tipi astratti issa jappoġġaw verżjoni "sett" tal-operatur "@:op(ab)" biex jerġgħu jitgħabbew espressjonijiet "obj.foo = bar".
  • Is-sintassi tal-linja "for" issa tappoġġja l-iterazzjoni tal-valur ewlieni: "għal (ċavetta => valur fil-ġbir) {}".
  • Appoġġ għall-użu ta 'markup bħal xml fl-espressjonijiet: "var a = ‹hi/›;". Għalissa, din il-karatteristika hija disponibbli biss għall-parsing mal-macros u tinsab fl-istadju tad-disinn.
  • Is-sintassi għal oqsma mhux obbligatorji fin-notazzjoni “sħiħa” ta’ tipi ta’ struttura anonima hija: “{ var ?f:Int; }" (alternattiva għall-qasir "{ ?f:Int }").
  • Il-valuri enum issa jistgħu jkunu valuri awtomatiċi għall-argumenti tal-funzjoni: "funzjoni foo‹T› (għażla: Option‹T› = Xejn)".
  • Is-sintassi "enum abstract Name(BasicType) {}" m'għadhiex teħtieġ il-prefiss "@:" f'"enum".
  • Numerazzjoni awtomatika għal enumerazzjonijiet astratti:

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

  • Il-kelma prinċipali "estern" m'għadhiex teħtieġ l-użu tal-prefiss "@:".
  • Neħħa l-għażla "għodod Dynamic" biex taċċessa l-oqsma tal-klassi permezz ta' kordi. Disponibbli għal klassijiet esterni jew permezz ta 'implimentazzjoni minn tip astratt.
  • Miżjud sintassi "A & B" għall-intersezzjoni tat-tip, li bħalissa tapplika biss għal strutturi anonimi u restrizzjonijiet tal-parametri tat-tip. Is-sintassi tar-restrizzjoni l-antika tneħħiet.
  • Il-ħolqien ta' istanzi vojta ta' "Mappa" huwa disponibbli permezz tas-sintassi "var map:Map‹Int, String› = [];" simili għal firxa.
  • Struttura tad-dejta miżjuda "haxe.ds.ReadOnlyArray".
  • Il-metadata issa jista' jkollha spazji tal-isem (“@:prefix.name function() {…}”). Bl-istess mod mad-definizzjonijiet: "#jekk (xi.bandiera ... #tarf".
  • Protokoll ta' servizz ġdid għal IDEs użati fi plugin għal VSCode.
  • Definizzjonijiet esterni aġġornati (estern) għall-Web APIs u miżjuda dawk nieqsa.

Sors: opennet.ru

Żid kumment