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

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

์–ธ์–ด๋Š” ํ‘œํ˜„ ์ง€ํ–ฅ์  ๊ฐ•ํ•œ ํƒ€์ดํ•‘์œผ๋กœ. ๊ฐ์ฒด ์ง€ํ–ฅ, ์ผ๋ฐ˜ ๋ฐ ๊ธฐ๋Šฅ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ ์ด ์ง€์›๋ฉ๋‹ˆ๋‹ค. Haxe ๊ตฌ๋ฌธ์€ ECMAScript์— ๊ฐ€๊น๊ณ  ํŒฝ์ฐฝํ•˜๋‹ค ์ •์  ์œ ํ˜• ์ง€์ •, ์ž๋™ ์œ ํ˜• ์ถ”๋ก , ํŒจํ„ด ์ผ์น˜, ์ œ๋„ค๋ฆญ, ๋ฐ˜๋ณต์ž ๊ธฐ๋ฐ˜ for ๋ฃจํ”„, AST ๋งคํฌ๋กœ, GADT(์ผ๋ฐ˜ ๋Œ€์ˆ˜ ๋ฐ์ดํ„ฐ ์œ ํ˜•), ์ถ”์ƒ ์œ ํ˜•, ์ต๋ช… ๊ตฌ์กฐ, ๋‹จ์ˆœํ™”๋œ ๋ฐฐ์—ด ์ •์˜, ์กฐ๊ฑด๋ถ€ ์ปดํŒŒ์ผ ํ‘œํ˜„์‹, ํ•„๋“œ์— ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์—ฐ๊ฒฐ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ , ํด๋ž˜์Šค ๋ฐ ํ‘œํ˜„์‹, ๋ฌธ์ž์—ด ๋ณด๊ฐ„(โ€œ'My name is $name'โ€), ์œ ํ˜• ๋งค๊ฐœ๋ณ€์ˆ˜('new Main ("foo")') ๋ฐ ํ›จ์”ฌ ๋”.

ํด๋ž˜์Šค ํ…Œ์ŠคํŠธ {
์ •์  ํ•จ์ˆ˜ ๋ฉ”์ธ() {
์ตœ์ข… ์ธ์› = [
"์—˜๋ฆฌ์ž๋ฒ ์Šค" => "ํ”„๋กœ๊ทธ๋ž˜๋ฐ",
"์กฐ์—˜" => "๋””์ž์ธ"
];

for (์ด๋ฆ„ => ์‚ฌ๋žŒ์˜ ์ง์—…) {
Trace('$name์€ $์ผ์„ ํ•ด์„œ ์ƒ๊ณ„๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค!');
}
}
}

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

  • ๊ผฌ๋ฆฌ ์žฌ๊ท€ ์ตœ์ ํ™”๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์ƒˆ๋กœ์šด ํ†ตํ•ฉ API๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • "try {} catch(e) {}" ๊ตฌ๋ฌธ์€ "try {} catch(e: haxe.Exception) {}"์˜ ์•ฝ์–ด๋กœ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ํ‰๊ฐ€ ํ•ด์„๊ธฐ์— SSL ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋Œ€์ƒ JVM์€ ๋” ์ด์ƒ ์‹คํ—˜์ ์ธ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์–ธ์–ด ์„œ๋ฒ„ ํ”„๋กœํ† ์ฝœ์˜ ๊ฒฝ์šฐ "Goto ๊ตฌํ˜„" ๋ฐ "์ฐธ์กฐ ์ฐพ๊ธฐ" ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ƒ์„ฑ๋œ ์ฝ”๋“œ์—์„œ ์ž„์‹œ ์ง€์—ญ ๋ณ€์ˆ˜์˜ ์ด๋ฆ„ ์ง€์ •์ด ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ค‘๋ณต๋œ "๋ฐ˜ํ™˜"์„ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜ํ™˜ ๊ฐ’์ด ์—†๋Š” ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์—์„œ.
  • ํ•„๋“œ(getter๋งŒ, ๊ธฐ๋ณธ ํ• ๋‹น ๋™์ž‘)์—์„œ๋Š” ์•ก์„ธ์Šค ์กฐํ•ฉ(get, default)์ด ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ํ•„๋“œ์— ๋Œ€ํ•œ ์ฆ๊ฐ€ ๋ฐ ๊ฐ์†Œ ์—ฐ์‚ฐ์ž ํ—ˆ์šฉ ์ถ”์ƒ ์œ ํ˜•.
  • ์ต๋ช… ๋ฐ˜๋ณต์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ for ๋ฃจํ”„์˜ ์ธ๋ผ์ธ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • js: ES5์šฉ StringMap ๊ตฌํ˜„์ด ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • js: ์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜ "-D js-es=6"์— let ๋ณ€์ˆ˜ ์ƒ์„ฑ์ด ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ, ES6 ํด๋ž˜์Šค ์ƒ์„ฑ์ด ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • lua: "StringIterator" ์ตœ์ ํ™”, ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๊ฐœ์„ .
  • php: ๊ธฐ๋ณธ ์œ ํ˜•์— ๋Œ€ํ•ด "Std.isOfType"์ด ์ตœ์ ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • php: ์ƒ์„ฑ๋œ ๋ฐฐ์—ด์€ ์ด์ œ ๊ธฐ๋ณธ ์ธํ„ฐํŽ˜์ด์Šค "Iterator", "IteratorAggregate", "Countable"์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • cs: ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ "@:assembliesMeta" ๋ฐ "@:assembliesStrict"๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Python: ์ต๋ช… ๊ฐœ์ฒด์— "__contains__" ๊ตฌํ˜„์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
    ๋ฐ "__getitem__"์€ ์ƒ์„ฑ๋œ ์ฝ”๋“œ์—์„œ ์‚ฌ์ „์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

  • jvm: ๊ฐ์ฒด๊ฐ€ ์ต๋ช… ๊ตฌ์กฐ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ ์œ ํ˜•ํ™”๋œ ํ•จ์ˆ˜์— ์•ก์„ธ์Šคํ•˜๊ณ  ์ถ”๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ƒˆ๋กœ์šด ๋ฐฉ๋ฒ• ๋•๋ถ„์— ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(๋™์  ์†์„ฑ ์กฐํšŒ๊ฐ€ ๋ฐฉ์ง€๋จ).
    ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด Haxe 4.1 ์ถœ์‹œ

ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ฐœ์„  ์‚ฌํ•ญ:

  • "Array.contains" ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐฐ์—ด์— ๋Œ€ํ•œ ํ‚ค-๊ฐ’ ๋ฐ˜๋ณต("for (key => value in array)")์„ ๊ตฌํ˜„ํ•˜๋Š” "Array.keyValueIterator"๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ œ์•ฝ ์กฐ๊ฑด ์œ ํ˜• "haxe.Constraints.NotVoid"๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • "findIndex" ๋ฐ "foldi" ํ•จ์ˆ˜๊ฐ€ "Lambda" ํด๋ž˜์Šค์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • "๋ฐฐ์—ด ์•ก์„ธ์Šค"("arr[i]"๋ฅผ ํ†ตํ•œ ์•ก์„ธ์Šค) ๋ฐ "haxe.ds.HashMap"์— ๋Œ€ํ•œ ํ‚ค-๊ฐ’ ๋ฐ˜๋ณต์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • jvm: "StringMap", "sys.thread.Lock", "sys.thread.Thread"์˜ JVM ๊ด€๋ จ ๋ฒ„์ „์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • java/jvm: "haxe.crypto" ๋ชจ๋“ˆ์— "MD5", "SHA-1" ๋ฐ "SHA-256"์˜ ๊ธฐ๋ณธ ๊ตฌํ˜„์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋งคํฌ๋กœ: "haxe.macro.Context.containsDisplayPosition(pos)"์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • nullsafety: "์—„๊ฒฉ" ๋ชจ๋“œ๋Š” ์ด์ œ ๋‹จ์ผ ์Šค๋ ˆ๋“œ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. "StrictThreaded" ๋ชจ๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • "Std.is"๋Š” "Std.isOfType"์„ ์œ„ํ•ด ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ํด๋กœ์ €์— ๊ฐ’ ์—†์ด ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ฒฝ๊ณ ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • js: "untyped __js__(code, args)"๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ "js.Syntax.code(code, args)"๋กœ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค.
  • php/neko: "neko.Web" ๋ฐ "php.Web"์€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ ๋‚˜์ค‘์— "hx4compat" ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ด๋™๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ฆด๋ฆฌ์Šค์—์„œ๋Š” ๊ณ„ํš๋˜์–ด ์žˆ๋‹ค:

  • ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž ๊ฐœ์„  ํ•™์…€๋ฆฌ๋ธŒ.
  • ๋น„๋™๊ธฐ ์‹œ์Šคํ…œ API ๊ธฐ๋ฐ˜ ๋ฆฌ๋ธŒ.
  • ์ฝ”๋ฃจํ‹ด.
  • ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ๋ชจ๋“ˆ์‹ ์ •์  ํ•จ์ˆ˜ ๋ฐ ๋ณ€์ˆ˜ ์„ ์–ธ(์ด๋ฏธ ์•ผ๊ฐ„ ๋นŒ๋“œ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)

์ถœ์ฒ˜ : opennet.ru

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