ืฉื—ืจื•ืจ ืฉืคืช ื”ืชื›ื ื•ืช Haxe 4.0

ื–ืžื™ืŸ ืฉื—ืจื•ืจ ืขืจื›ืช ื›ืœื™ื ื”ืืงืก 4.0, ื”ื›ื•ืœืœืช ืืช ืฉืคืช ื”ืชื›ื ื•ืช ื‘ืจืžื” ื”ื’ื‘ื•ื”ื” ืžืจื•ื‘ืช ืคืจื“ื™ื’ืžื•ืช ื‘ืื•ืชื• ืฉื ืขื ื”ืงืœื“ื” ื—ื–ืงื”, ืžื”ื“ืจ ืฆื•ืœื‘ ื•ืกืคืจื™ื™ืช ืคื•ื ืงืฆื™ื•ืช ืกื˜ื ื“ืจื˜ื™ืช. ื”ืคืจื•ื™ืงื˜ ืชื•ืžืš ื‘ืชืจื’ื•ื ืœ-C++, HashLink/C, JavaScript, C#, Java, PHP, Python ื•-Lua, ื›ืžื• ื’ื ืงื•ืžืคื™ืœืฆื™ื” ืœ-JVM, HashLink/JIT, Flash ื•-Neko bytecode, ืขื ื’ื™ืฉื” ืœื™ื›ื•ืœื•ืช ื”ืžืงื•ืจื™ื•ืช ืฉืœ ื›ืœ ืคืœื˜ืคื•ืจืžืช ื™ืขื“. ืงื•ื“ ืžื”ื“ืจ ืžื•ืคืฅ ืขืœ ื™ื“ื™ ืชื—ืช ืจื™ืฉื™ื•ืŸ GPLv2, ื•ืกืคืจื™ื™ื” ืกื˜ื ื“ืจื˜ื™ืช ื•ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ืฉืคื•ืชื—ื• ืขื‘ื•ืจ Haxe ื ืงื• ืชื—ืช ืจื™ืฉื™ื•ืŸ MIT.

ื”ืฉืคื” ื”ื™ื ืžื›ื•ื•ืŸ ื”ื‘ืขื” ืขื ื”ืงืœื“ื” ื—ื–ืงื”. ืžื•ืฉื’ื™ ืชื›ื ื•ืช ืžื•ื ื—ื” ืขืฆืžื™ื, ื’ื ืจื™ื™ื ื•ืคื•ื ืงืฆื™ื•ื ืœื™ื™ื ื ืชืžื›ื™ื.
ืชื—ื‘ื™ืจ Haxe ืงืจื•ื‘ ืœ-ECMAScript ื• ืžืชืจื—ื‘ ื”ืชื›ื•ื ื•ืช ืฉืœื• ื›ื’ื•ืŸ ื”ืงืœื“ื” ืกื˜ื˜ื™ืช, ืžืกืงื ื•ืช ืื•ื˜ื•ืžื˜ื™ื•ืช, ื”ืชืืžืช ื“ืคื•ืกื™ื, ื’ื ืจื™ื•ืช, ืžื‘ื•ืกืกื™ ืื™ื˜ืจื˜ื•ืจ ืœืœื•ืœืื•ืช, ืคืงื•ื“ื•ืช ืžืืงืจื• AST, GADT (ืกื•ื’ื™ ื ืชื•ื ื™ื ื›ืœืœื™ื™ื ืืœื’ื‘ืจื™ื™ื), ื˜ื™ืคื•ืกื™ื ืžื•ืคืฉื˜ื™ื, ืžื‘ื ื™ื ืื ื•ื ื™ืžื™ื™ื, ื”ื’ื“ืจื•ืช ืžืขืจืš ืžืคื•ืฉื˜ื•ืช, ื‘ื™ื˜ื•ื™ื™ ืงื•ืžืคื™ืœืฆื™ื” ืžื•ืชื ื”, ืฆื™ืจื•ืฃ ืžื˜ื ื ืชื•ื ื™ื ืœืฉื“ื•ืช , ืžื—ืœืงื•ืช ื•ื‘ื™ื˜ื•ื™ื™ื, ืื™ื ื˜ืจืคื•ืœืฆื™ื” ืฉืœ ืžื—ืจื•ื–ื•ืช ('ืฉื ืฉืœื™ ื”ื•ื $name'), ืคืจืžื˜ืจื™ ืกื•ื’ ("ืžื—ืจื•ื–ืช ืจืืฉื™ืช ื—ื“ืฉ('foo')"), ื•ื›ืŸ ื”ืจื‘ื” ื™ื•ืชืจ.

ืžื‘ื—ืŸ ื‘ื›ื™ืชื” {
ืคื•ื ืงืฆื™ื” ืกื˜ื˜ื™ืช main() {
var people = [
"Elizabeth" => "ืชื›ื ื•ืช",
"ื’'ื•ืืœ" => "ืขื™ืฆื•ื‘"
];

for (ืฉื ื‘-people.keys()) {
var job = ืื ืฉื™ื[ืฉื];
trace('$name ืขื•ืฉื” $ืขื‘ื•ื“ื” ืœืžื—ื™ื™ืชื•!');
}
}
}

ื”ืขื™ืงืจื™ ื—ื™ื“ื•ืฉื™ื ื’ืจืกื” 4.0:

  • ืชื—ื‘ื™ืจ ื—ื“ืฉ ืœืฆื™ื•ืŸ ืกื•ื’ ื”ืคื•ื ืงืฆื™ื” "(name:String, age:Int)->Bool" ืื• "(String, Int)->Bool" ื‘ืžืงื•ื "String->Int->Bool".
  • ืชื—ื‘ื™ืจ ืคื•ื ืงืฆื™ื™ืช ื”ื—ืฅ ื”ื•ื "(a, b) -> a + b" ื‘ืžืงื•ื "function(a, b) return a + b".
  • ื”ื’ื ื” ืžืคื ื™ ื‘ืขื™ื•ืช ื”ืงืฉื•ืจื•ืช ืœืฉื™ืžื•ืฉ ื‘ืขืจื›ื™ Null (ืชื›ื•ื ื” ื ืกื™ื•ื ื™ืช, ืžื•ืคืขืœืช ื‘ืื•ืคืŸ ืื•ืคืฆื™ื•ื ืœื™ ืขื‘ื•ืจ ืฉื“ื•ืช, ืžื—ืœืงื•ืช ืื• ื—ื‘ื™ืœื•ืช ืžืกื•ื™ืžื•ืช).
  • ืžื™ืœืช ื”ืžืคืชื— "ืกื•ืคื™ืช" ืžื™ื•ืขื“ืช ืœืฉื“ื•ืช ืžื—ืœืงื” ื•ืžืฉืชื ื™ื ืžืงื•ืžื™ื™ื ืฉืื™ื ื ื ื™ืชื ื™ื ืœืฉื™ื ื•ื™. ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘-"final" ื’ื ื›ื“ื™ ืœื”ื’ื“ื™ืจ ืคื•ื ืงืฆื™ื•ืช ื›ื“ื™ ืœืžื ื•ืข ืžื”ืŸ ืœืขื‘ื•ืจ ื‘ื™ืจื•ืฉื” ื•ืœืžื—ืœืงื•ืช/ืžืžืฉืงื™ื ืฉืœื ื ื™ืชืŸ ืœื”ื•ืจืฉืช.
  • ืชืžื™ื›ื” ืชืงืŸ Unicode ืœืกื•ื’ ื”ื‘ืกื™ืก "ืžื—ืจื•ื–ืช" ื‘ื›ืœ ื™ืขื“ื™ ื”ื”ื™ื“ื•ืจ ืžืœื‘ื“ Neko.
  • ืžืชื•ืจื’ืžืŸ ืžื•ื‘ื ื” ืฉื ื›ืชื‘ ืžื—ื“ืฉ ืžืืคืก, ืฉืžื’ื™ืข ื›ืขืช ืชื—ืช ื”ืฉื ื”ืขืจื›ื”. ื”ื•ื“ื•ืช ืœืžืชื•ืจื’ืžืŸ ื”ื—ื“ืฉ, ืกืงืจื™ืคื˜ื™ื ื•ืคืงื•ื“ื•ืช ืžืืงืจื• ืคื•ืขืœื•ืช ื”ืจื‘ื” ื™ื•ืชืจ ืžื”ืจ. ืžืฆื‘ ื ื™ืคื•ื™ ื‘ืื’ื™ื ืื™ื ื˜ืจืืงื˜ื™ื‘ื™ ื ืชืžืš.
  • ืžืขืจื›ืช ื™ืขื“ ื—ื“ืฉื” ืœื”ื™ื“ื•ืจ (ืžื˜ืจื”) ื”ืืฉืœื™ื ืง - ื–ืžืŸ ืจื™ืฆื” ื‘ืขืœ ื‘ื™ืฆื•ืขื™ื ื’ื‘ื•ื”ื™ื ืฉืชื•ื›ื ืŸ ื‘ืžื™ื•ื—ื“ ืขื‘ื•ืจ Haxe, ื”ืชื•ืžืš ื‘ื”ื™ื“ื•ืจ ืœ-bytecode ืขื‘ื•ืจ JIT ืื• C, ื‘ืขืœ ืื™ื ื˜ื’ืจืฆื™ื” ืงืœื” ืขื C, ื›ืžื• ื’ื ื’ื™ืฉื” ืœืกื•ื’ื™ื ื•ืžืฆื‘ื™ืขื™ื ืžืกืคืจื™ื™ื ื‘ืจืžื” ื ืžื•ื›ื”.
  • ื™ืขื“ JVM ื—ื“ืฉ - ืžืืคืฉืจ ืœื™ืฆื•ืจ jvm bytecode ืขืœ ื™ื“ื™ ื“ื™ืœื•ื’ ืขืœ ืฉืœื‘ ื”ื™ื“ื•ืจ ืงื•ื“ Java ืขืœ ื™ื“ื™ ื”ื•ืกืคืช ื“ื’ืœ "-D jvm" ื‘ืขืช ืžื™ืงื•ื“ ื‘-Java.
  • ื”ื™ื›ื•ืœืช ืœืคืจื•ืก ื‘ืชื•ืš ืฉื•ืจื” ื‘ื ืงื•ื“ืช ืงืจื™ืื” ืœืคื•ื ืงืฆื™ื•ืช ืื• ื‘ื ืื™ื, ื’ื ืื ื”ื ืœื ืžื•ื›ืจื–ื™ื ื›ื›ืืœื”.
  • ืืคืฉืจื•ืช ื”ื›ืœืœื” ื”ืจื—ื‘ื•ืช ืกื˜ื˜ื™ื•ืช ื›ืืฉืจ ืžื›ืจื™ื–ื™ื ืขืœ ืกื•ื’ (ื›ื’ื•ืŸ "enum") ื‘ืืžืฆืขื•ืช "@:using(path.ToExtension)".
  • ืกื•ื’ื™ื ืžื•ืคืฉื˜ื™ื ืชื•ืžื›ื™ื ื›ืขืช ื‘ื’ืจืกืช "ืกื˜" ืฉืœ ื”ืื•ืคืจื˜ื•ืจ "@:op(a.b)" ืœื˜ืขื™ื ื” ืžื—ื“ืฉ ืฉืœ ื‘ื™ื˜ื•ื™ื™ "obj.foo = bar".
  • ืชื—ื‘ื™ืจ ื”ืœื•ืœืื” "for" ืชื•ืžืš ื›ืขืช ื‘ืื™ื˜ืจืฆื™ื” ืฉืœ ืžืคืชื—-ืขืจืš: "for (key => value in collection) {}".
  • ืชืžื™ื›ื” ื‘ืฉื™ืžื•ืฉ ื‘ืกื™ืžื•ืŸ ื“ืžื•ื™ xml ื‘ื‘ื™ื˜ื•ื™ื™ื: "var a = โ€นhi/โ€บ;". ืœืขืช ืขืชื”, ืชื›ื•ื ื” ื–ื• ื–ืžื™ื ื” ืจืง ืœื ื™ืชื•ื— ืขื ืคืงื•ื“ื•ืช ืžืืงืจื• ื•ื”ื™ื ื‘ืฉืœื‘ ื”ืชื›ื ื•ืŸ.
  • ื”ืชื—ื‘ื™ืจ ืขื‘ื•ืจ ืฉื“ื•ืช ืื•ืคืฆื™ื•ื ืœื™ื™ื ื‘ืกื™ืžื•ืŸ "ืžืœื" ืฉืœ ืกื•ื’ื™ ืžื‘ื ื” ืื ื•ื ื™ืžื™ื™ื ื”ื•ื: "{ var ?f:Int; }" (ื—ืœื•ืคื” ืœืงืฆืจ "{ ?f:Int }").
  • ืขืจื›ื™ Enum ื™ื›ื•ืœื™ื ื›ืขืช ืœื”ื™ื•ืช ืขืจื›ื™ ื‘ืจื™ืจืช ืžื—ื“ืœ ืขื‘ื•ืจ ืืจื’ื•ืžื ื˜ื™ื ืฉืœ ืคื•ื ืงืฆื™ื”: "ืคื•ื ืงืฆื™ื” fooโ€นTโ€บ(Option:Optionโ€นTโ€บ = None)".
  • ื”ืชื—ื‘ื™ืจ "ืฉื ืื‘ืกื˜ืจืงื˜ื™ ืฉืœ enum(BasicType) {}" ืื™ื ื• ื“ื•ืจืฉ ืขื•ื“ ืืช ื”ืงื™ื“ื•ืžืช "@:" ื‘-"enum".
  • ืžืกืคื•ืจ ืื•ื˜ื•ืžื˜ื™ ืขื‘ื•ืจ ืกืคื™ืจื•ืช ืžื•ืคืฉื˜ื•ืช:

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

  • ืžื™ืœืช ื”ืžืคืชื— "ื—ื™ืฆื•ื ื™ืช" ืื™ื ื” ื“ื•ืจืฉืช ืขื•ื“ ืฉื™ืžื•ืฉ ื‘ืงื™ื“ื•ืžืช "@:".
  • ื”ืกืจื” ืืช ื”ืืคืฉืจื•ืช "ืžื™ื™ืฉืžื™ื ื“ื™ื ืžื™" ืœื’ื™ืฉื” ืœืฉื“ื•ืช ืžื—ืœืงื” ื‘ืืžืฆืขื•ืช ืžื—ืจื•ื–ื•ืช. ื–ืžื™ืŸ ืขื‘ื•ืจ ืฉื™ืขื•ืจื™ื ื—ื™ืฆื•ื ื™ื™ื ืื• ื‘ืืžืฆืขื•ืช ื™ื™ืฉื•ื ืขืœ ื™ื“ื™ ืกื•ื’ ืžื•ืคืฉื˜.
  • ื ื•ืกืฃ ืชื—ื‘ื™ืจ "A & B" ืขื‘ื•ืจ ืฆื•ืžืช ืกื•ื’, ืฉื—ืœ ื›ืจื’ืข ืจืง ืขืœ ืžื‘ื ื™ื ืื ื•ื ื™ืžื™ื™ื ื•ืžื’ื‘ืœื•ืช ืคืจืžื˜ืจื™ื ืฉืœ ืกื•ื’. ืชื—ื‘ื™ืจ ื”ืื™ืœื•ืฅ ื”ื™ืฉืŸ ื”ื•ืกืจ.
  • ื™ืฆื™ืจืช ืžื•ืคืขื™ "ืžืคื”" ืจื™ืงื™ื ื–ืžื™ื ื” ื‘ืืžืฆืขื•ืช ื”ืชื—ื‘ื™ืจ "var map:Mapโ€นInt, Stringโ€บ = [];" ื“ื•ืžื” ืœืžืขืจืš.
  • ื ื•ืกืฃ ืžื‘ื ื” ื ืชื•ื ื™ื "haxe.ds.ReadOnlyArray".
  • ืžื˜ื ื ืชื•ื ื™ื ื™ื›ื•ืœื™ื ื›ืขืช ืœื›ืœื•ืœ ืžืจื—ื‘ื™ ืฉืžื•ืช ("@:prefix.name function() {...}"). ื‘ื“ื•ืžื” ืœื”ื’ื“ืจื•ืช: "#if (some.flag ... #end".
  • ืคืจื•ื˜ื•ืงื•ืœ ืฉื™ืจื•ืช ื—ื“ืฉ ืขื‘ื•ืจ IDEs ื‘ืฉื™ืžื•ืฉ ื‘ ืชื•ืกืฃ ืขื‘ื•ืจ VSCode.
  • ื”ื’ื“ืจื•ืช ื—ื™ืฆื•ื ื™ื•ืช ืžืขื•ื“ื›ื ื•ืช (ื—ื™ืฆื•ื ื™ื•ืช) ืขื‘ื•ืจ ืžืžืฉืงื™ API ืฉืœ ืื™ื ื˜ืจื ื˜ ื•ื ื•ืกืคื• ื—ืกืจื™ื.

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”