Paglabas ng programming language na Haxe 4.0

Magagamit paglabas ng toolkit Haxe 4.0, na kinabibilangan ng multi-paradigm high-level programming language na may parehong pangalan na may malakas na pag-type, isang cross-compiler at isang karaniwang library ng mga function. Sinusuportahan ng proyekto ang pagsasalin sa C++, HashLink/C, JavaScript, C#, Java, PHP, Python at Lua, pati na rin ang compilation sa JVM, HashLink/JIT, Flash at Neko bytecode, na may access sa mga native na kakayahan ng bawat target na platform. Compiler code ipinamahagi ni sa ilalim ng lisensya ng GPLv2, at isang karaniwang library at isang virtual machine na binuo para sa Haxe Neko sa ilalim ng lisensya ng MIT.

Ang wika ay expression-oriented na may malakas na pag-type. Ang mga konseptong Object-oriented, generic at functional na programming ay sinusuportahan.
Ang Haxe syntax ay malapit sa ECMAScript at lumalawak ang mga feature nito gaya ng static na pag-type, autotype inference, pattern matching, generics, iterator-based para sa mga loop, AST macros, GADT (Generalized Algebraic Data Types), abstract na mga uri, anonymous na istruktura, pinasimple na mga kahulugan ng array, conditional compilation expressions , pag-attach ng metadata sa mga field , mga klase at expression, string interpolation ('My name is $name'), type parameters ("new Mainβ€ΉStringβ€Ί('foo')"), at higit pa.

pagsubok sa klase {
static function main() {
var tao = [
"Elizabeth" => "Pagprograma",
"Joel" => "Disenyo"
];

para kay (pangalan sa people.keys()) {
var trabaho = tao[pangalan];
trace('Ang $pangalan ay gumagawa ng $trabaho para mabuhay!');
}
}
}

Ang pangunahing mga pagbabago bersyon 4.0:

  • Bagong syntax para sa pagtukoy ng uri ng function na "(pangalan:String, edad:Int)->Bool" o "(String, Int)->Bool" sa halip na "String->Int->Bool".
  • Ang syntax ng arrow function ay "(a, b) -> a + b" sa halip na "function(a, b) return a + b".
  • Proteksyon laban sa mga problemang nauugnay sa paggamit ng mga Null na halaga (pang-eksperimentong tampok, opsyonal na pinagana para sa ilang partikular na field, klase o package).
  • Ang "panghuling" keyword ay para sa mga field ng klase at mga lokal na variable na hindi nababago. Ang "panghuling" ay maaari ding gamitin upang tukuyin ang mga pag-andar upang maiwasan ang mga ito na ma-override ng mana at para sa mga klase/interface na hindi maaaring mamana.
  • Suporta Unicode standard para sa base type na "String" sa lahat ng compilation target maliban sa Neko.
  • Built-in na interpreter na muling isinulat mula sa simula, na ngayon ay nasa ilalim ng pangalan Suriin. Salamat sa bagong interpreter, mas mabilis tumakbo ang mga script at macro. Sinusuportahan ang interactive na debugging mode.
  • Bagong target na system para sa compilation (target) Hashlink - isang high-performance runtime na partikular na idinisenyo para sa Haxe, na sumusuporta sa compilation sa bytecode para sa JIT o C, ay may madaling pagsasama sa C, pati na rin ang access sa mga low-level na numeric na uri at pointer.
  • Bagong target ng JVM - nagbibigay-daan sa iyong bumuo ng jvm bytecode sa pamamagitan ng paglaktaw sa hakbang ng compilation ng Java code sa pamamagitan ng pagdaragdag ng flag na "-D jvm" kapag nagta-target sa Java.
  • Ang kakayahang mag-inline-deploy sa punto ng pagtawag ng mga function o constructor, kahit na hindi sila idineklara bilang ganoon.
  • Posibilidad ng pagsasama mga static na extension kapag nagdedeklara ng isang uri (gaya ng "enum") gamit ang "@:using(path.ToExtension)".
  • Sinusuportahan na ngayon ng mga abstract na uri ang isang "set" na bersyon ng operator na "@:op(a.b)" para i-reload ang mga expression na "obj.foo = bar."
  • Ang "for" loop syntax ngayon ay sumusuporta sa key-value iteration: "for (key => value in collection) {}".
  • Suporta para sa paggamit ng tulad-xml na markup sa mga expression: β€œvar a = β€Ήhi/β€Ί;”. Sa ngayon, available lang ang feature na ito para sa pag-parse gamit ang mga macro at nasa yugto ng disenyo.
  • Ang syntax para sa mga opsyonal na field sa "buong" notasyon ng mga hindi kilalang uri ng istraktura ay: "{ var ?f:Int; }" (isang kahalili sa maikling "{ ?f:Int }").
  • Ang mga halaga ng enum ay maaari na ngayong maging mga default na halaga para sa mga argumento ng function: "function fooβ€ΉTβ€Ί(option:Optionβ€ΉTβ€Ί = Wala)".
  • Ang "enum abstract Name(BasicType) {}" syntax ay hindi na nangangailangan ng "@:" prefix sa "enum".
  • Auto-numbering para sa abstract enumerations:

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

  • Ang "extern" na keyword ay hindi na nangangailangan ng paggamit ng "@:" prefix.
  • Inalis ang opsyon "nagpapatupad Dynamic" upang ma-access ang mga field ng klase sa pamamagitan ng mga string. Magagamit para sa mga panlabas na klase o sa pamamagitan ng pagpapatupad ng isang abstract na uri.
  • Idinagdag ang syntax ng "A & B" para sa intersection ng uri, na kasalukuyang nalalapat lamang sa mga anonymous na istruktura at mga hadlang sa uri ng parameter. Ang lumang constraint syntax ay inalis na.
  • Ang paglikha ng mga walang laman na instance na "Map" ay magagamit sa pamamagitan ng syntax na "var map:Mapβ€ΉInt, Stringβ€Ί = [];" katulad ng isang array.
  • Idinagdag ang istraktura ng data na "haxe.ds.ReadOnlyArray".
  • Ang metadata ay maaari na ngayong magkaroon ng mga namespace (β€œ@:prefix.name function() {…}”). Katulad ng mga kahulugan: "#if (some.flag ... #end".
  • Bagong service protocol para sa mga IDE na ginamit sa plugin para sa VSCode.
  • Na-update ang mga panlabas na kahulugan (panlabas) para sa mga Web API at nagdagdag ng mga nawawala.

Pinagmulan: opennet.ru

Magdagdag ng komento