Π Π΅Π»ΠΈΠ· Π½Π° програмния Π΅Π·ΠΈΠΊ Haxe 4.0

Π”ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ Ρ€Π΅Π»ΠΈΠΉΠ· Π½Π° инструмСнта Haxe 4.0, Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‰ СдноимСнния multiparadigmatic високопроизводитСлСн Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ със строга типизация, крос-ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ ΠΈ стандартна Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° транслация Π½Π° C++, HashLink/C, JavaScript, C#, Java, PHP, Python ΠΈ Lua, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ компилация Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Π½Π° JVM, HashLink/JIT, Flash ΠΈ Neko, с Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ мСстни Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π½Π° всяка Ρ†Π΅Π»Π΅Π²Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°. ΠšΠΎΠ΄ΡŠΡ‚ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° сС разпространява Π΅ ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π· GPLv2, Π° стандартната Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΈ Ρ€Π°Π·Π²ΠΈΠ²Π°Π½Π°Ρ‚Π° Π·Π° Haxe Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина Neko ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π· MIT.

Π•Π·ΠΈΠΊΡŠΡ‚ Π΅ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ към ΠΈΠ·Ρ€Π°Π·ΠΈ със строга типизация. ΠŸΠΎΠ΄ΠΊΡ€Π΅ΠΏΡΡ‚ сС ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠΈ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΎ, ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΎ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅.
Π‘ΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡΡŠΡ‚ Π½Π° Haxe Π΅ близък Π΄ΠΎ ECMAScript ΠΈ Ρ€Π°Π·ΡˆΠΈΡ€ΡΠ²Π° с Ρ‚Π°ΠΊΠΈΠΌΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ ΠΊΠ°Ρ‚ΠΎ статична типизация, Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅, шаблонно съвпадСниС, Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ, ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π΅Π½ Ρ†ΠΈΠΊΡŠΠ» β€˜for’, AST-макроси, GADT (Generalized Algebraic Data Types), абстрактни Ρ‚ΠΈΠΏΠΎΠ²Π΅, Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΈ структури, опростСни опрСдСлСния Π½Π° масиви, ΠΈΠ·Ρ€Π°Π·ΠΈ Π·Π° условна компилация, прикрСпянС Π½Π° ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ към ΠΏΠΎΠ»Π΅Ρ‚Π°, класовС ΠΈ ΠΈΠ·Ρ€Π°Π·ΠΈ, интСрполация Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅ (β€˜My name is $name’), ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ (β€˜new Mainβ€ΉStringβ€Ί(β€˜foo’)’) ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ.

class Test {
static function main() {
var people = [
β€˜Elizabeth’ => β€˜ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅β€™,
β€˜Joel’ => β€˜Π”ΠΈΠ·Π°ΠΉΠ½β€™
];

for (name in people.keys()) {
var job = people[name];
trace(β€˜$name Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΊΠ°Ρ‚ΠΎ $job!’);
}
}
}

Основни нововвСдСния Π² вСрсия 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’ Π·Π° ΠΏΠΎΠ»Π΅Ρ‚Π° Π½Π° класовС ΠΈ Π»ΠΎΠΊΠ°Π»Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ са Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΈ. β€˜final’ ΡΡŠΡ‰ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° опрСдСлянС Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π·Π° Π΄Π° сС Π·Π°Π±Ρ€Π°Π½ΠΈ тяхното прСзаписванС ΠΏΡ€ΠΈ наслСдяванС ΠΈ Π·Π° класовС/интСрфСйси, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ наслСдСни.
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° стандарта Unicode Π·Π° Π±Π°Π·ΠΎΠ² Ρ‚ΠΈΠΏ β€˜String’ Π½Π° всички Ρ†Π΅Π»ΠΈ Π½Π° компилация с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Neko.
  • ΠŸΡ€Π΅ΠΏΠΈΡΠ°Π½ ΠΎΡ‚ Π½ΡƒΠ»Π°Ρ‚Π° вградСният ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, ΠΊΠΎΠΉΡ‚ΠΎ сСга сС ΠΏΡ€Π΅Π΄Π»Π°Π³Π° ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Ρ‚ΠΎ Eval. Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° новия ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ скриптовСтС ΠΈ макроситС сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ. ΠŸΠΎΠ΄ΠΊΡ€Π΅ΠΏΡ сС Ρ€Π΅ΠΆΠΈΠΌ Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Π° ΠΎΡ‚Π»Π°Π΄ΠΊΠ°.
  • Нова Ρ†Π΅Π»Π΅Π²Π° систСма Π·Π° компилация (target) Hashlink β€” високопроизводитСлСн runtime, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½ спСциално Π·Π° Haxe, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Π² Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ Π·Π° JIT ΠΈΠ»ΠΈ C, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‰Π° лСсна интСграция с C, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ нискоуровнСви числови Ρ‚ΠΈΠΏΠΎΠ²Π΅ ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ.
  • Новата Ρ†Π΅Π»Π΅Π²Π° систСма JVM β€” позволява Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ jvm, пропускайки Π΅Ρ‚Π°ΠΏΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° Java-ΠΊΠΎΠ΄ Ρ‡Ρ€Π΅Π· добавянС Π½Π° Ρ„Π»Π°Π³Π° "-D jvm" ΠΏΡ€ΠΈ Ρ‚Π°Ρ€Π³Π΅Ρ‚ΠΈΡ€Π°Π½Π΅ Π² Java.
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° inline-Ρ€Π°Π·Π²ΡŠΡ€Ρ‚Π°ΡšΠ΅ Π½Π° мястото Π½Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ конструктори, Π΄ΠΎΡ€ΠΈ Π°ΠΊΠΎ Ρ‚Π΅ Π½Π΅ са обявСни ΠΊΠ°Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ²Π°.
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° статични Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΏΡ€ΠΈ обявяванС Π½Π° Ρ‚ΠΈΠΏ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ "enum") с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° "@:using(path.ToExtension)".
  • АбстрактнитС Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π²Π΅Ρ‡Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ "set"-вСрсия Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° "@:op(a.b)" Π·Π° ΠΏΡ€Π΅Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΈΠ·Ρ€Π°Π·ΠΈ "obj.foo = bar".
  • Π‘ΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡΡŠΡ‚ Π½Π° Ρ†ΠΈΠΊΡŠΠ»Π° "for" Π²Π΅Ρ‡Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° итСрация "ΠΊΠ»ΡŽΡ‡-стойност": "for (key => value in collection) {}".
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° xml-ΠΏΠΎΠ΄ΠΎΠ±Π½Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π² ΠΈΠ·Ρ€Π°Π·ΠΈ: "var a = β€Ήhi/β€Ί;". Към ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Ρ‚Π°Π·ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π΅ Π½Π°Π»ΠΈΡ‡Π½Π° само Π·Π° парсинг с макроси ΠΈ Π΅ Π² Π΅Ρ‚Π°ΠΏ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½Π΅.
  • Бинтаксис Π·Π° ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΈ ΠΏΠΎΠ»Π΅Ρ‚Π° Π² "ΠΏΡŠΠ»Π½Π°Ρ‚Π°" нотация Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΈ структури: "{ var ?f:Int; }" (Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° Π½Π° "краткия" "{ ?f:Int }").
  • БтойноститС Π½Π° изброяванията Π²Π΅Ρ‡Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ стойности ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π·Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: "function fooβ€ΉTβ€Ί(option:Optionβ€ΉTβ€Ί = None)".
  • Π‘ΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡΡŠΡ‚ "enum abstract Name(BasicType) {}" Π²Π΅Ρ‡Π΅ Π½Π΅ изисква прСфикс "@:" Π² "enum".
  • Авто-номСрация Π·Π° абстрактни изброявания:

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

  • ΠšΠ»ΡŽΡ‡ΠΎΠ²Π°Ρ‚Π° Π΄ΡƒΠΌΠ° "extern" Π²Π΅Ρ‡Π΅ Π½Π΅ изисква ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° прСфикс "@:".
  • ΠŸΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚Π° Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° "implements Dynamic" Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ ΠΏΠΎΠ»Π΅Ρ‚Π° Π½Π° класа ΠΏΡ€Π΅Π· Π½ΠΈΠ·ΠΎΠ²Π΅. Π”ΠΎΡΡ‚ΡŠΠΏΠ½ΠΎ Π΅ Π·Π° extern-класовС ΠΈΠ»ΠΈ Ρ‡Ρ€Π΅Π· рСализация с абстрактСн Ρ‚ΠΈΠΏ.
  • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ ΡΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡΡŠΡ‚ "A & B" Π·Π° прСсичанС Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅, ΠΊΠΎΠΉΡ‚ΠΎ към ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° сС ΠΏΡ€ΠΈΠ»Π°Π³Π° само Π·Π° Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΈ структури ΠΈ ограничСния Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ°. Бтарият синтаксис Π½Π° ограничСния Π΅ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚.
  • Π‘ΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€Π°Π·Π½ΠΈ СкзСмпляри "Map" Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΎ Ρ‡Ρ€Π΅Π· синтаксиса "var map:Mapβ€ΉInt, Stringβ€Ί = [];" ΠΏΠΎ аналогия с масивитС.
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ структура ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ "haxe.ds.ReadOnlyArray".
  • ΠœΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π²Π΅Ρ‡Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΈΠΌΠ°Ρ‚ пространства ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π° ("@:prefix.name function() {…}"). Аналогично Π·Π° опрСдСлСнията: "#if (some.flag … #end".
  • Нов ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Π·Π° услуги Π·Π° IDE, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π² ΠΏΠ»Π°Π³ΠΈΠ½Π° Π·Π° VSCode.
  • Актуализирани са Π²ΡŠΠ½ΡˆΠ½ΠΈΡ‚Π΅ опрСдСлСния (extern) Π·Π° Web APIs ΠΈ са Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ липсващи.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster