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