Lage langaj pwogramasyon Haxe 4.0

Disponib lage zouti Haxe 4.0, ki gen ladan lang pwogramasyon wo nivo milti-paradig menm non ak sezisman fò, yon konpile kwa ak yon bibliyotèk estanda fonksyon. Pwojè a sipòte tradiksyon nan C++, HashLink/C, JavaScript, C#, Java, PHP, Python ak Lua, osi byen ke konpilasyon nan JVM, HashLink/JIT, Flash ak Neko bytecode, ak aksè nan kapasite natif natal nan chak platfòm sib. Kòd konpilatè distribiye pa anba lisans GPLv2, ak yon bibliyotèk estanda ak yon machin vityèl devlope pou Haxe Nèko anba lisans MIT.

Lang se oryante ekspresyon ak sezisman fò. Konsèp pwogramasyon oryante objè, jenerik ak fonksyonèl yo sipòte.
Sentaks Haxe se tou pre ECMAScript ak elaji karakteristik li yo tankou sezisman estatik, enferans ototip, matche modèl, jenerik, bouk ki baze sou iteratè, makro AST, GADT (Generalized Algebraic Data Types), kalite abstrè, estrikti anonim, definisyon senplifye etalaj, ekspresyon konpilasyon kondisyonèl, atache metadone nan jaden. , klas ak ekspresyon, entèpolasyon fisèl ('Non mwen se $non'), paramèt kalite ("nouvo Main‹String›('foo')"), ak plis toujou.

tès klas {
fonksyon estatik prensipal () {
var moun = [
"Elizabeth" => "Programming",
"Joel" => "Design"
];

pou (non nan people.keys()) {
var travay = moun [non];
trace('$non fè $travay pou viv!');
}
}
}

Prensipal la inovasyon vèsyon 4.0:

  • Nouvo sentaks pou presize kalite fonksyon "(non:String, age:Int)->Bool" oswa "(String, Int)->Bool" olye de "String->Int->Bool".
  • Sentaks fonksyon flèch se "(a, b) -> a + b" olye de "fonksyon (a, b) retounen a + b".
  • Pwoteksyon kont pwoblèm ki asosye ak itilizasyon valè nil (karakteristik eksperimantal, opsyonèlman pèmèt pou sèten jaden, klas oswa pakè).
  • Mo kle "final" la se pou jaden klas ak varyab lokal ki imuiabl. "final" ka itilize tou pou defini fonksyon pou anpeche yo pa eritaj epi pou klas/entèfas ki pa ka eritye.
  • Sipòte Unicode estanda pou kalite baz "String" sou tout objektif konpilasyon eksepte Neko.
  • Entèprèt entegre reekri nan grafouyen, ki kounye a vini anba non an Evalye. Mèsi a nouvo entèprèt la, scripts ak makro kouri pi vit. Mòd debogaj entèaktif sipòte.
  • Nouvo sistèm sib pou konpilasyon (sib) Hashlink - yon tan pèfòmans segondè ki fèt espesyalman pou Haxe, sipòte konpilasyon bytecode pou JIT oswa C, gen entegrasyon fasil ak C, osi byen ke aksè nan kalite nimerik ak endikasyon ki ba nivo.
  • Nouvo sib JVM - pèmèt ou jenere jvm bytecode lè w sote etap konpilasyon kòd Java a lè w ajoute drapo "-D jvm" lè w vize nan Java.
  • Kapasite pou inline-deplwaye nan pwen pou yo rele fonksyon oswa konstrukteur, menm si yo pa deklare kòm sa yo.
  • Posiblite pou enklizyon ekstansyon estatik lè w ap deklare yon kalite (tankou "enum") lè l sèvi avèk "@:using(path.ToExtension)".
  • Kalite abstrè yo kounye a sipòte yon vèsyon "set" operatè "@:op(ab)" pou rechaje ekspresyon "obj.foo = bar".
  • Sentaks bouk "for" kounye a sipòte iterasyon kle-valè: "for (kle => valè nan koleksyon) {}".
  • Sipò pou itilize mak ki sanble ak xml nan ekspresyon: "var a = ‹hi/›;". Pou kounye a, karakteristik sa a disponib sèlman pou analiz ak makro epi li se nan etap konsepsyon an.
  • Sentaks pou jaden opsyonèl nan notasyon "plen" kalite estrikti anonim se: "{ var ?f:Int; }" (yon altènativ a kout "{ ?f:Int }").
  • Valè enum yo kapab kounye a valè default pou agiman fonksyon: "fonksyon foo‹T› (opsyon:Opsyon‹T› = Okenn)".
  • Sentaks "enum abstrè Non(BasicType) {}" pa mande prefiks "@:" ankò nan "enum".
  • Oto-nimerasyon pou enimerasyon abstrè:

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

  • Mo kle "extern" la pa mande pou itilize prefiks "@:" ankò.
  • Retire opsyon an "aplike Dinamik" pou jwenn aksè nan jaden klas yo atravè fisèl. Disponib pou klas ekstèn oswa atravè aplikasyon pa yon kalite abstrè.
  • Te ajoute "A & B" sentaks pou entèseksyon kalite, ki kounye a sèlman aplike nan estrikti anonim ak kontrent paramèt kalite. Ansyen sentaks kontrent la te retire.
  • Kreye egzanp vid "Map" disponib atravè sentaks "var map:Map‹Int, String› = [];" menm jan ak yon etalaj.
  • Te ajoute estrikti done "haxe.ds.ReadOnlyArray".
  • Metadata kapab kounye a gen espas non ("@:prefix.name function() {…}"). Menm jan an tou ak definisyon: "#if (kèk.drapo ... #fen".
  • Nouvo pwotokòl sèvis pou IDE yo itilize nan plugin pou VSCode.
  • Mizajou definisyon ekstèn (extern) pou API Web ak ajoute sa ki manke yo.

Sous: opennet.ru

Add nouvo kòmantè