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

ДоступСн Ρ€Π΅Π»ΠΈΠ· инструмСнтария Haxe 4.1, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ΄Π½ΠΎΠΈΠΌΡ‘Π½Π½Ρ‹ΠΉ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ΅Π½Π½Ρ‹ΠΉ высокоуровнСвый язык программирования со строгой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, кросс-компилятор ΠΈ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ поддСрТиваСтся трансляция Π² Π‘++, HashLink/C, JavaScript, C#, Java, PHP, Python ΠΈ Lua, Π° Ρ‚Π°ΠΊΠΆΠ΅ компиляция Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ JVM, HashLink/JIT, Flash ΠΈ Neko, с доступом ΠΊ Ρ€ΠΎΠ΄Π½Ρ‹ΠΌ возмоТностям ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹. Код компилятора распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ GPLv2, Π° стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… для Haxe Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… машин HashLink ΠΈ 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() {
final people = [
«Elizabeth» => «Programming»,
«Joel» => «Design»
];

for (name => job in people) {
trace(‘$name does $job for a living!’);
}
}
}

НововвСдСния вСрсии 4.1:

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° оптимизация хвостовой рСкурсии.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π½ΠΎΠ²ΠΎΠ΅ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ API для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.
  • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π° конструкция «try {} catch(e) {}» ΠΊΠ°ΠΊ сокращСниС для «try {} catch(e: haxe.Exception) {}».
  • Π’ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ eval Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° SSL.
  • ЦСлСвая ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° JVM большС Π½Π΅ считаСтся ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ.
  • Для Language Server Protocol Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ «Goto Implementation» ΠΈ «Find references».
  • Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² сгСнСрированном ΠΊΠΎΠ΄Π΅. Π£Π΄Π°Π»Π΅Π½Ρ‹ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ «return;» Π² стрСлочных функциях Π±Π΅Π· Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния.
  • К полям Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π° комбинация доступа (get, default) (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π³Π΅Ρ‚Ρ‚Π΅Ρ€, ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ для присваивания ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ).
  • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° ΠΈ Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° для ΠΏΠΎΠ»Π΅ΠΉ абстрактных Ρ‚ΠΈΠΏΠΎΠ².
  • Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΎ встраиваниС (inlining) for-Ρ†ΠΈΠΊΠ»ΠΎΠ² с использованиСм Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Ρ… ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ².
  • js: Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π° рСализация StringMap для ES5.
  • js: Π’ ΠΎΠΏΡ†ΠΈΡŽ компилятора «-D js-es=6» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° гСнСрация let ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π° гСнСрация ES6 классов.
  • lua: ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ «StringIterator», ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок.
  • php: ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ «Std.isOfType» для Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ².
  • php: Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ массивы Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ интСрфСйсы «Iterator», «IteratorAggregate», «Countable».
  • cs: Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΌΠ΅Ρ‚Π°Π΄Π°Ρ‚Ρ‹ «@:assemblyMeta» ΠΈ «@:assemblyStrict».
  • python: Π² Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° рСализация «__contains__»
    ΠΈ «__getitem__», Ρ‡Ρ‚ΠΎ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΊΠ°ΠΊ словари Π² сгСнСрированном ΠΊΠΎΠ΄Π΅.

  • jvm: Π—Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ благодаря Π½ΠΎΠ²ΠΎΠΌΡƒ способу обращСния ΠΊ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ функциям ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… интСрфСйсов Π² случаях использования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΊΠ°ΠΊ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Ρ… структур (ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π΅Π½ динамичСский поиск свойств):
    Π Π΅Π»ΠΈΠ· языка программирования Haxe 4.1

Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ Π² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅:

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° функция «Array.contains».
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ «Array.keyValueIterator», Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ key-value ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ для массивов («for (key => value in array)»).
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° «haxe.Constraints.NotVoid».
  • Π’ класс «Lambda» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ «findIndex» ΠΈ «foldi».
  • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ «array access» (доступ Ρ‡Π΅Ρ€Π΅Π· «arr[i]») ΠΈ key-value итСрация для «haxe.ds.HashMap».
  • jvm: Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ JVM-спСцифичныС вСрсии «StringMap», «sys.thread.Lock», «sys.thread.Thread».
  • java/jvm: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ «MD5», «SHA-1» ΠΈ «SHA-256» для ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ «haxe.crypto».
  • macro: Π”ΠΎΠ±Π°Π²Π»Π΅Π½ «haxe.macro.Context.containsDisplayPosition(pos)».
  • nullsafety: Ρ€Π΅ΠΆΠΈΠΌ «Strict» Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ рассматриваСтся ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ; Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ «StrictThreaded».
  • «Std.is» объявлСн ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ «Std.isOfType».
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ использовании Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π±Π΅Π· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² замыканиях.
  • js: «untyped __js__(code, args)» объявлСн ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ, Π²Π·Π°ΠΌΠ΅Π½ прСдоставляСтся «js.Syntax.code(code, args)».
  • php/neko: «neko.Web» ΠΈ «php.Web» ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌΠΈ ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ·ΠΆΠ΅ пСрСнСсСны Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ «hx4compat».

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π΅Π»ΠΈΠ·Π΅ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΡŽΡ‚ΡΡ:

  • Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° haxelib.
  • АсинхронноС систСмноС API Π½Π° основС libuv.
  • Π‘ΠΎΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (coroutines).
  • ОбъявлСниС ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Ρ… статичСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π±Π΅Π· создания классов (ΡƒΠΆΠ΅ доступно Π² Π½ΠΎΡ‡Π½Ρ‹Ρ… сборках).

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