Π Π΅Π»ΠΈΠ· языка программирования Haxe 4.0

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

Π―Π·Ρ‹ΠΊ являСтся expression-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ со строгой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠΎΡ€ΠΈΡ‘ΠΌΡ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ, ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования.
Бинтаксис 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» => «Programming»,
«Joel» => «Design»
];

for (name in people.keys()) {
var job = people[name];
trace(‘$name does $job for a living!’);
}
}
}

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ нововвСдСния вСрсии 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-like Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ Π² выраТСниях: «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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ