ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด Haxe 4.2 ์ถœ์‹œ

Haxe 4.2 ํˆดํ‚ท ๋ฆด๋ฆฌ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๊ฐ•๋ ฅํ•œ ํƒ€์ดํ•‘, ํฌ๋กœ์Šค ์ปดํŒŒ์ผ๋Ÿฌ ๋ฐ ํ‘œ์ค€ ํ•จ์ˆ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ–์ถ˜ ๋™์ผํ•œ ์ด๋ฆ„์˜ ๋‹ค์ค‘ ํŒจ๋Ÿฌ๋‹ค์ž„ ๊ณ ๊ธ‰ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋Š” ๊ฐ ๋Œ€์ƒ ํ”Œ๋žซํผ์˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์— ์•ก์„ธ์Šคํ•˜์—ฌ C++, HashLink/C, JavaScript, C#, Java, PHP, Python ๋ฐ Lua๋กœ์˜ ๋ณ€ํ™˜์€ ๋ฌผ๋ก  JVM, HashLink/JIT, Flash ๋ฐ Neko ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ์˜ ์ปดํŒŒ์ผ๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ ์ฝ”๋“œ๋Š” GPLv2 ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋˜๋ฉฐ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ Haxe์šฉ์œผ๋กœ ๊ฐœ๋ฐœ๋œ HashLink ๋ฐ Neko ๊ฐ€์ƒ ๋จธ์‹ ์€ MIT ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ ๋ผ์ด์„ผ์Šค๊ฐ€ ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค.

์–ธ์–ด๋Š” ๊ฐ•๋ ฅํ•œ ํƒ€์ดํ•‘์„ ์‚ฌ์šฉํ•˜๋Š” ํ‘œํ˜„ ์ง€ํ–ฅ์ ์ž…๋‹ˆ๋‹ค. ๊ฐ์ฒด ์ง€ํ–ฅ, ์ผ๋ฐ˜ ๋ฐ ๊ธฐ๋Šฅ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ ์ด ์ง€์›๋ฉ๋‹ˆ๋‹ค. Haxe์˜ ๊ตฌ๋ฌธ์€ ECMAScript์— ๊ฐ€๊น๊ณ  ์ •์  ํƒ€์ดํ•‘, ์ž๋™ ์œ ํ˜• ์ถ”๋ก , ํŒจํ„ด ์ผ์น˜, ์ œ๋„ค๋ฆญ, ๋ฐ˜๋ณต์ž ๊ธฐ๋ฐ˜ for ๋ฃจํ”„, AST ๋งคํฌ๋กœ, GADT(์ผ๋ฐ˜ ๋Œ€์ˆ˜ ๋ฐ์ดํ„ฐ ์œ ํ˜•), ์ถ”์ƒ ์œ ํ˜•, ์ต๋ช… ๊ตฌ์กฐ, ๋‹จ์ˆœํ™”์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์œผ๋กœ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค. ์ •์˜ ๋ฐฐ์—ด, ์กฐ๊ฑด๋ถ€ ์ปดํŒŒ์ผ์„ ์œ„ํ•œ ํ‘œํ˜„์‹, ํ•„๋“œ, ํด๋ž˜์Šค ๋ฐ ํ‘œํ˜„์‹์— ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒจ๋ถ€, ๋ฌธ์ž์—ด ๋ณด๊ฐ„('๋‚ด ์ด๋ฆ„์€ $name'), ์œ ํ˜• ๋งค๊ฐœ๋ณ€์ˆ˜('new Main (โ€œfooโ€)') ๋ฐ ๊ธฐํƒ€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€. class Test { static function main() { final people = [ "์—˜๋ฆฌ์ž๋ฒ ์Šค" => "ํ”„๋กœ๊ทธ๋ž˜๋ฐ", "์กฐ์—˜" => "๋””์ž์ธ" ]; for (name => job in people) { Trace('$name์€ ์ƒ๊ณ„๋ฅผ ์œ„ํ•ด $์ผ์„ ํ•ฉ๋‹ˆ๋‹ค!'); } } }

๋ฒ„์ „ 4.2์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ:

  • ํด๋ž˜์Šค์— ๋ž˜ํ•‘ํ•  ํ•„์š” ์—†์ด ๋ชจ๋“ˆ ์ˆ˜์ค€์—์„œ ์ •์  ๋ณ€์ˆ˜ ๋ฐ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.
  • "ํด๋ž˜์‹" ์ถ”์ƒ ํด๋ž˜์Šค ๋ฐ ํ•จ์ˆ˜๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ๋Œ€์ƒ ํ”Œ๋žซํผ(haxe.Rest)์— ๋Œ€ํ•œ ๊ฐ€๋ณ€ ํ•จ์ˆ˜์˜ ๊ธฐ๋ณธ ๊ตฌํ˜„ ๋ฐ ์ธ์ˆ˜ ํ™•์žฅ ์—ฐ์‚ฐ์ž "f(...array)" ์ถ”๊ฐ€.
  • ๊ฐœ๋ณ„ ์Šค๋ ˆ๋“œ("sys.thread.Thread.events")์— ๋Œ€ํ•œ ์ด๋ฒคํŠธ ๋ฃจํ”„ ๊ตฌํ˜„.
  • ์œ ํ˜•/ํ•„๋“œ ๋ฌธ์„œ ์ƒ์†์„ ์œ„ํ•œ "@:inheritDoc" ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ๋Œ€์ƒ ํ”Œ๋žซํผ์—์„œ ์™ธ๋ถ€ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋กœ๋“œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • "@:forward.new" ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ์œ ํ˜•์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์ถ”์ƒํ™”๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  • "haxe.macro.Expr"์— "EIs" ์ƒ์„ฑ์ž๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • "@:forward.variance"๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”์ƒ ์œ ํ˜• ๋ณ€ํ˜•์„ ๋งŒ๋“œ๋Š” ๊ธฐ๋Šฅ.
  • Variation ํ†ตํ•ฉ ์‹œ 'Any' ์œ ํ˜•์„ 'Dynamic'์œผ๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • "haxe.Exceptions" ํŒจํ‚ค์ง€์— ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋ณธ ์˜ˆ์™ธ ์œ ํ˜•์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณ€์ˆ˜ ์„ ์–ธ ์‹œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒจ๋ถ€๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฌธ์ž์—ด ๋ฐ˜๋ณต์— ์‚ฌ์šฉ๋˜๋Š” "StringTools.unsafeCharAt" ํ•จ์ˆ˜.
  • eval(์ธํ„ฐํ”„๋ฆฌํ„ฐ): "eval.luv" ํŒจํ‚ค์ง€์˜ "libuv"์— ๋ฐ”์ธ๋”ฉ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • eval: "eval.integers" ํŒจํ‚ค์ง€๋ฅผ ํ†ตํ•ด "Int64" ๋ฐ "UInt64"์˜ ๊ธฐ๋ณธ ๊ตฌํ˜„์— ๋ฐ”์ธ๋”ฉํ•ฉ๋‹ˆ๋‹ค.
  • cs: UDP ์†Œ์ผ“ ๊ตฌํ˜„.
  • cs: C# ์ฝ”๋“œ์˜ ์ธ๋ผ์ธ ์‚ฝ์ž…์„ ์œ„ํ•œ "cs.Syntax" ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค.
  • jvm: ๋™์  ์ฝ”๋“œ์— ๋Œ€ํ•ด ์ƒ์„ฑ๋œ ์ตœ์ ํ™” ์ˆ˜๋ฅผ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด "-D jvm.dynamic-level=x" ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. 0 = ์—†์Œ, 1 = ํ•„๋“œ ์ฝ๊ธฐ/์“ฐ๊ธฐ ์ตœ์ ํ™”, 2 = ์ปดํŒŒ์ผ ์‹œ๊ฐ„์— ๋ฉ”์„œ๋“œ ํ์‡„.
  • java, jvm: "--java-lib <๋””๋ ‰ํ„ฐ๋ฆฌ>" ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • python: ์Šค๋ ˆ๋”ฉ API ๊ตฌํ˜„.

์ผ๋ฐ˜์ ์ธ ๊ฐœ์„  ์‚ฌํ•ญ:

  • "expr is SomeType"์€ ๊ด„ํ˜ธ๋กœ ๋ฌถ์„ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • "@:using" ์œ ํ˜• ํ™•์žฅ์˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์•„์กŒ์Šต๋‹ˆ๋‹ค.
  • "super"๋ฅผ ํ†ตํ•ด ์ •์  ์œ ํ˜• ํ™•์žฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ "@:noDoc" ํ•„๋“œ๋กœ ์„ค์ •ํ•˜๋Š” ๊ธฐ๋Šฅ.
  • ์ถ”์ƒ ์œ ํ˜• "Map"์ด ์ „์ด์ ์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค.
  • ์—ด๊ฑฐํ˜• ์ƒ์„ฑ์ž์—์„œ "@:native"๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ์œ ํ˜• ์„ ์–ธ("typedefs")์—์„œ "@:using"์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ์ค„ ์˜ค๋ฅ˜๋Š” "..."๋ฅผ ํ›„์† ์ค„์˜ ์ ‘๋‘์‚ฌ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์œ ํ˜• ์ถ”๋ก ์ด ์žฌ์ž‘์—…๋˜์—ˆ์œผ๋ฉฐ, ์ต๋ช… ๊ตฌ์กฐ๊ฐ€ ๋ช…์‹œ์  ์œ ํ˜•์œผ๋กœ ๋” ์ž˜ ๋ณ€ํ™˜๋˜๊ณ  ํ•จ์ˆ˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด "๋‹ซํž™๋‹ˆ๋‹ค".
  • ์ธ์ˆ˜๊ฐ€ ์—†๋Š” ํ•จ์ˆ˜ ์œ ํ˜•์„ "Void->..." ๋Œ€์‹  "()->..."๋กœ ์ถ”๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • "function" ํ‚ค์›Œ๋“œ๋Š” ํŒจํ‚ค์ง€ ์ด๋ฆ„์œผ๋กœ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ๊ฐ์ฒด์˜ ์ธ๋ผ์ธ์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • cs: .NET 5.0์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • cpp: ์™ธ๋ถ€ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • php: ๊ธฐ๋ณธ ๋ฐฐ์—ด์„ ์„ ์–ธํ•˜๊ธฐ ์œ„ํ•ด "php.Syntax.customArrayDecl"์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • php: ๋‹ค์–‘ํ•œ ํ•จ์ˆ˜์™€ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์™ธ๋ถ€ ๋ฉ”์„œ๋“œ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • php: ์ต๋ช… ๊ตฌ์กฐ์˜ ์ตœ์ ํ™”๋œ ๊ตฌํ˜„.
  • hl: ๋ชจ๋“ˆ์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์—†์œผ๋ฉด ์ปดํŒŒ์ผ์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.
  • lua: "hx-lua-simdjson"์„ ์‚ฌ์šฉํ•˜์—ฌ json์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค.
  • jvm: "sys.thread.Lock" ๊ตฌํ˜„์—์„œ CPU ๋กœ๋“œ๊ฐ€ ๊ฐ์†Œํ–ˆ์Šต๋‹ˆ๋‹ค.
  • js: Google Closure Compiler์™€์˜ ํ˜ธํ™˜์„ฑ์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • Null ์•ˆ์ „: ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ "@:nullSafety(Off)"๋ฅผ ๊ณ ๋ คํ•˜์„ธ์š”: "var @:nullSafety(Off) v".

๋˜ํ•œ VSCode ํŽธ์ง‘๊ธฐ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด ์ƒˆ ๋ฒ„์ „์˜ ์ปดํŒŒ์ผ๋Ÿฌ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ˆ„๋ฝ๋œ ์ธํ„ฐํŽ˜์ด์Šค ํ•„๋“œ, ๋‹จ์ˆœ ๋ฐ ์ถ”์ƒ ํด๋ž˜์Šค, ์†์„ฑ ๋ฉ”์„œ๋“œ ์ƒ์„ฑ๊ณผ ๊ด€๋ จ๋œ ํžŒํŠธ๊ฐ€ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€