์ด ๋ฌธ์์ ์๋ณธ์ ์ธ๋ถ ์ํค์์ ๊ฐ์ ธ์์ต๋๋ค.
1. ๊ฐ์[ํธ์ง]
1993๋
์ ๊ฐ๋ฐ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด. ๋ธ๋ผ์ง ๋ฆฌ์ฐ๋ฐ์๋ค์ด๋ฃจ์ ๊ตํฉ์ฒญ๋ํ๊ต์์ ํธ๋ฒ ๋ฅดํฌ ์๋ฃจ์๋ง์คํค[1] ๋ฐ 2๋ช
์ด ๊ณต๋์ ์ํ์ผ๋ฉฐ ์ด๋ฆ๋ ๋ฌ์ ์๋ฏธํ๋ ํฌ๋ฅดํฌ๊ฐ์ด ๋จ์ด์์ ๋ฐ์๋ค. ์คํฌ๋ฆฝํธ ์ธ์ด๋ฅผ ํ๋์ ๋ชฉ์ ์ผ๋ก ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ต์ฅํ ์๊ณ ๊ฐ๋ฒผ์ด ์ธํฐํ๋ฆฌํฐํ ์ธ์ด์ด๋ค. ํ์ฌ ์์ ๋ฒ์ ์ 5.4์ด๋ค.
ํ์ ์์ฒด๊ฐ C/C++ ํ๋ก๊ทธ๋จ ๋ด๋ถ์ ํฌํจ(embed)์ํค๊ธฐ ๋งค์ฐ ์ฌ์ด ๊น๋ํ ๋ฌธ๋ฒ์ ๊ฐ๋ฒผ์ด ์คํฌ๋ฆฝํธ ์ธ์ด๋ฅผ ๋ชฉํ๋ก ๊ฐ๋ฐ๋์๋ค. ๊ตํฉ์ฒญ๋ํ๊ต ์ปดํจํฐ ๊ทธ๋ํฝ ๊ธฐ์ ์ฐ๊ตฌ์(Tecgraf)์์ ๋ด๋ถ์ ์ผ๋ก ๊ฐ๋ฐํด์ ์ฌ์ฉํ๋ ๊ธฐ์กด์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ฉ ์คํฌ๋ฆฝํ ์ธ์ด SOL๊ณผ DEL์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ ๋ ๊ฐ๋ ฅํ ์ธ์ด๊ฐ ์๊ตฌ๋์๋ค๊ณ ํ๋ค.[2]
ํ์ ์์ฒด๊ฐ C/C++ ํ๋ก๊ทธ๋จ ๋ด๋ถ์ ํฌํจ(embed)์ํค๊ธฐ ๋งค์ฐ ์ฌ์ด ๊น๋ํ ๋ฌธ๋ฒ์ ๊ฐ๋ฒผ์ด ์คํฌ๋ฆฝํธ ์ธ์ด๋ฅผ ๋ชฉํ๋ก ๊ฐ๋ฐ๋์๋ค. ๊ตํฉ์ฒญ๋ํ๊ต ์ปดํจํฐ ๊ทธ๋ํฝ ๊ธฐ์ ์ฐ๊ตฌ์(Tecgraf)์์ ๋ด๋ถ์ ์ผ๋ก ๊ฐ๋ฐํด์ ์ฌ์ฉํ๋ ๊ธฐ์กด์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ฉ ์คํฌ๋ฆฝํ ์ธ์ด SOL๊ณผ DEL์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ ๋ ๊ฐ๋ ฅํ ์ธ์ด๊ฐ ์๊ตฌ๋์๋ค๊ณ ํ๋ค.[2]
2. ์ธ์ด์ ํน์ง[ํธ์ง]
2.1. ๊ฐ๋ฒผ์[ํธ์ง]
์ธํฐํ๋ฆฌํฐ(๋๋ ํ์ ํ JIT ์ปดํ์ผ๋ฌ)์ ์ฉ๋์ด ์ผ๋ฐฑ ์์ญKB[3] ์ ๋๋ก ์๊ณ ๊ต์ฅํ ๋น ๋ฅด๋ค. ๊ทธ ํํ ์ ์๋ ์์ ์ ๋๋ก[4] ๊ต์ฅํ ์ ์ ์์ ๋ฐ์ดํฐํ๋ง์ ์ง์ํ๊ธด ํ์ง๋ง ๊ทธ๋งํผ ๊ฐ๋ณ๋ค. ๋ค์ํ ํ๋ก๊ทธ๋จ์ ์ฝ๊ฒ ๋ถ์ผ ์ ์๋ ์ด์ ๋ ์ฉ๋๊ณผ ์๋์ ๋ถ๋ด์ด ์ ๊ธฐ ๋๋ฌธ. ๊ทธ๋ฌ๋ฉด์๋ ๋ค์ํ ํจ๋ฌ๋ค์์ ๊ฐ์ง๊ณ ์๋๋ฐ, ์ ์ฐจ์ ์ผ๋ก๋, ๊ฐ์ฒด์งํฅ์ ์ผ๋ก๋, ํจ์ํ์ผ๋ก๋ ์ด์ฉํ ์ ์๋ค.
2.2. ๋ฌธ๋ฒ์ ํน์ง[ํธ์ง]
์ธ์ด์ ๋ฌธ๋ฒ์ด ๊ต์ฅํ ๋จ์ํ ํธ์ด๋ค. ๋ค๋ง, C ์คํ์ผ์ ์ธ์ด๋ค๊ณผ ๋น๊ตํ์ ๋ ๋ค๋ฅธ ์ ์ด ๋ง๋ค๋ ๊ฒ์ด ํน์ง์ด๋ค.
- Lua์์๋
null์ด ์๋nil - ์ง๋ฆฌ๊ฐ์ boolean type ์ด ์์ด์
true๋ ์ฐธ,false๋ ๊ฑฐ์ง์ด๋ค. boolean ์ด ์๋ ๊ฒฝ์ฐnil์ด ๊ฑฐ์ง์ด๊ณ ๋๋จธ์ง๋ ๋ชจ๋ ์ฐธ์ด๋ค. ๊ทธ๋์ C ์๋ ๋ฌ๋ฆฌ 0 ๋ ์ฐธ์ด๋ค. ์ฝ๊ฒ ๋งํดfalse์nil๋ง ๊ฑฐ์ง์ด๋ค.[5] - ๊ธฐ๋ณธ์ ์ธ ์๋ฃํ์
nil, boolean, number, string, function, table, userdata, thread ==์ ๋ฐ๋ ์ฐ์ฐ์๋ก ๋ณดํต์!=,<>๋ฑ์ ๋ง์ด ์ฌ์ฉํ๋๋ฐ, Lua์์๋~=- ๋ ผ๋ฆฌ์ฐ์ฐ์๋ ํ ์ธ์ด์์
!, &&, ||๋ฑ์ ์ฌ์ฉํ๋๋ฐ lua์์๋ ๋จ์ด ๊ทธ๋๋กnot, and, or๋ก ์ด๋ค.[6] - bitwise ์ฐ์ฐ์๋ Lua 5.3์์ ์ถ๊ฐ๋์๋ค.
&, |, ~(์ดํญ ๋นํธ XOR), >>, <<, ~(๋จํญ ๋นํธ NOT) ^๊ฐxor๊ด๋ จ์ด ์๋pow, ์ฆ ๊ฑฐ๋ญ์ ๊ณฑA+=B๊ฐ์ ํ ๋น ์ฐ์ฐ์๋ ์ง์ํ์ง ์์ผ๋ฉฐ ๋ฌด์กฐ๊ฑดA = A + B์ฒ๋ผ ์์ฑํด์ผํ๋ค.- ๋ฌธ์์ด ํฉ์น๊ธฐ๋
A .. B self๋ผ๋ ์์ฝ์ด ์๋ ์์ฝ์ด๊ฐ ์กด์ฌ.[7]- ๋ฐ๋ณต์ ์ด๋ฌธ์
continue๊ฐ ์๋ค. goto๊ฐ ์๋ค.- 1 based index๋ค.
- ํจ์๋ฅผ ์ ์ํ๋๊ฒ ์๋๋ผ ํจ์๋ฅผ ๋ง๋ค์ด ๋ณ์์ ๋์ ํ๋ ๋ฐฉ์์ผ๋ก ์์ฑ์ด ๊ฐ๋ฅ(์ด๋ JavaScript๋ ๋์ผํ๋ค).
- ๊ธฐ๋ณธ ์๋ฃํ์
threadํ์ ์ด ์์ผ๋, ์ค์ ๋ก๋coroutine์ด๋ค. - ๋ฌธ์์ด ํจํด ๋งค์นญ์ด๋ผ๋ ์ ๊ท ํํ์๊ณผ ์ ์ฌํ ๊ธฐ๋ฅ์ ์ง์ํ๋ค. ๋ค๋ง, ์ ๊ท ํํ์๊ณผ ๋ค๋ฅด๊ณ ๊ธฐ๋ฅ๋ ๋ถ์กฑํ๋ค.
- ๋ค๋ฅธ ์ธ์ด๋ค๊ณผ๋ ๋ฌ๋ฆฌ ์ผํญ ์กฐ๊ฑด ์ฐ์ฐ์
(condition ? exprIfTrue : exprIfFalse)๋ฅผ ์ง์ํ์ง ์๋๋ค.condition and exprIfTrue or exprIfFalseํํ์ผ๋ก ๋์ฒด ๊ฐ๋ฅํ๋ค.
2.3. ํ ์ด๋ธ[ํธ์ง]
๋ค๋ฅธ ์ธ์ด์ ๋ฐฐ์ด๊ณผ๋ ๋ค๋ฅด๊ฒ ๋ค์ํ ์๋ฃํ์ ํค๋ก ์ฌ์ฉ๊ฐ๋ฅํ๋ฐ, ์ด๊ฒ์ ๊ฐ์ง๊ณ ๋จ์ํ ๊ตฌ์กฐ์ฒด, ๋ฐฐ์ด ๋ฟ๋ง ์๋๋ผ ๊ฐ์ฒด, ํด๋์ค, ์ธํฐํ์ด์ค ๋ฑ์ ๋ค ๊ตฌํํด ๋ผ ์ ์๋ค. ์ฌ์ค Lua์ ํ
์ด๋ธ์ ๋จ์ํ ์ ์ฅํ๋ ๊ฒ์ด ์๋๋ผ ๋ฉํํ
์ด๋ธ๊ณผ ๊ฐ์ด ์จ์ ํ
์ด๋ธ์ ๊ธฐ๋ฅ์ ๋ถ์ผ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ Lua๋ฅผ ์ ๋ค๋ฃจ๋ ค๋ฉด ํ
์ด๋ธ๊ณผ ๋ฉํํ
์ด๋ธ์ ์ ๋ค๋ฃฐ ์ ์์ด์ผ ํ๋ค.
2.4. ํจ์ํ ํ๋ก๊ทธ๋๋ฐ[ํธ์ง]
Lua๋ ์ผ๋จ์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ด ์ด๋์ ๋ ๋๋ค. ํจ์๋ฅผ ์ต๋ช
ํจ์๋ก ์์ฑํ ์๋ ์๊ณ ์ ๋ฌํ ์๋ ์๋ค(JavaScript์์ ์ง์ํ๋ ์ ๋์ ๋น์ทํ๋ค). ๊ทธ๋ฆฌ๊ณ ์ฌ์ค ํ์ผ๋ก ์ ์ฅํด์ ๋ถ๋ฌ์ค๋ ์คํฌ๋ฆฝํธ ์์ฒด๊ฐ ํจ์๋ค. ๋์ ์ฑ๋ฅ์ ์ํด์ ์คํ์ ํฌ๊ธฐ๊ฐ ๊ณ ์ ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ด๋ค ํจ์๋ ์ง ์ง์ญ๋ณ์๋ฅผ 255๊ฐ ์ด์ ๋ง๋ค ์๊ฐ ์๋ค. ๋์ ์ ์ญ๋ฒ์์ ์ ์ฅํ๋ _G๋ผ๋ ํ
์ด๋ธ์ด ์กด์ฌํ๋ค.
ํด๋ก์ ์ ์ต๋ช ํจ์๋ฅผ ์ง์ํ๋ค.[8]
ํด๋ก์ ์ ์ต๋ช ํจ์๋ฅผ ์ง์ํ๋ค.[8]
2.5. ํํธํ[ํธ์ง]
์ค์ํ Lua ์ปค๋ฎค๋ํฐ ํํธํ๊ฐ ์์๋์๋ค. Lua 5.3๋ฒ์ ์ด 64๋นํธ ๋ถ๋์์์ ํ์
[9]์ ๋ช
ํํ ์ง์ํ๊ธฐ ์ํด์ ์ ์ํ ํ์
์ ๋์
ํ ๊ฒ์ด ๊ธฐ์กด์ Lua์ฝ๋์ ํธํ์ฑ ๋ฌธ์ ๋ฅผ ์ผ์ผํค๊ฒ ๋ ๊ฒ์ด๋ค.[10] ๊ฒ๋ค๊ฐ LuaJIT์ ๊ฐ๋ฐํ๊ณ ์ฌ์ค์ ํผ์ ์ ์ง๋ณด์ํ๋ Mike Pall์ด ์์ ์ ์ํ ๋ฌธ์ ์ ๊ธฐํ ๋ช ๊ฐ์ง ์ด์ ๋ฅผ ๋ ๋ค์ด 5.3 ๋ฒ์ ์ ๊ณต๊ฐ์ ์ผ๋ก ํฌ๊ฒ ๋นํํ๊ณ LuaJIT์ Lua 5.1๊น์ง๋ง ์ง์ํ๊ณ ์์ ์ ๋์ด์ ๊ฐ๋ฐ์ ๊ด์ฌํ์ง ์๊ฒ ๋ค๊ณ ์ ์ธํด์ ๋ฌธ์ ๊ฐ ๋งค์ฐ ๋ณต์กํด์ก๋ค.[11] ๋๋ฌธ์ LuaJIT์ ์์กดํด ์ฑ๋ฅ ํฅ์์ ๊พํ๋ ๋๋ค์์ Lua ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ Lua 5.1๊น์ง๋ง ์ง์ํ๊ณ ํ์ ๊ฐ๋ฐ์ด ์งํ๋์ง ์๋ ์ฌํ์ ์ด๋ฅด๋ ๋ค. ํ์ฌ Lua ์ปค๋ฎค๋ํฐ๋ ์์ 5.3 ์ธํฐํ๋ฆฌํฐ๋ก๋ ์ถฉ๋ถํ ์ํฉ์ ๊ฐ๋ฐ์์, LuaJIT๊ณผ ๊ธฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๊ผญ ํ์ํ ๊ฐ๋ฐ์๋ค๋ก ์๋ถ๋์ด๋ฒ๋ ธ๋ค. ํ์ด์ฌ์ด ํ์ด์ฌ2์ ํ์ด์ฌ3๋ก ๋๋์ด ํํธํ๊ฐ ์งํ๋์ด 10๋
์ด ์ง๋ ์ง๊ธ๊น์ง ํด๊ฒฐ์ด ๋์ง ์์ ๊ฒ๊ณผ ๋น๊ฒฌ๋๋ค.
2.5.1. LuaJIT[ํธ์ง]
Lua์ JIT ์ปดํ์ผ๋ฌ๋ฉฐ, ์ฌํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ JIT๋ณด๋ค ๋ ์ฐ์ํ ์ฑ๋ฅ์ ๋ณด์ฌ์ค๋ค. ์ฃผ๋ก V8์ ๋น๊ต๋๋๋ฐ, ์๋ฃ๊ตฌ์กฐ ์ฑ๋ฅ์ ์ ์ธํ๋ฉด ์ ๋ฐ์ ์ผ๋ก Lua ์ชฝ์ด ์ฑ๋ฅ์ด ๋ ์ข๋ค. Python, Ruby์ ๋น๊ตํด๋ ์์ญ๋ฐฐ ์ ๋๊ฐ ๋ ๋น ๋ฅด๋ค.
JavaScript์ Lua๋ ๋ฌธ๋ฒ๊ณผ ํจ๋ฌ๋ค์์ด 90% ์ด์ ๋น์ทํ ์ฌ์ด์ธ์ด๊ฒฉ์ด์ง๋ง JIT ์ฑ๋ฅ์ ๊ตฌํ ์ธก๋ฉด์ ์์ด์๋ JavaScript๊ฐ ๊ฐ์ง ๋ฌธ๋ฒ ์ผ๋ถ๊ฐ ์ฑ๋ฅ ํฅ์์ ์ฝ์ ์ผ๋ก ์์ฉํ๋ค๊ณ ํ๋ค. ์ฐธ์กฐ ๋ํ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์์ด์ LuaJIT์ด ๋ ๋์ ์ต์ ํ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์๋ค. ๋ฐ๋ผ์ Node.js๋ฅผ LuaJIT ๊ธฐ๋ฐ์ผ๋ก ๋ค์ ์์ฑํ Luvit์ด๋ผ๋ ํ๋ก์ ํธ๊ฐ ํ์ฑํ๋์๋ค.
ํํ์ด์ง์ ๋ฐ๋ฅด๋ฉด ์ธํฐํ๋ฆฌํฐ๋ฅผ ์์ ์ด์ ๋ธ๋ฆฌ์ด๋ก ์์ฑํ์ผ๋ฉฐ, ์ด๋ฏธ ์๋นํ ์์ค์ ์ต์ ํ๊ฐ ๋์ด์๋ค๊ณ ํ๋ค. Python์ JIT ์ปดํ์ผ๋ฌ์ธ PyPy๊ฐ ์๊ธฐ ์์ ์ผ๋ก JIT์ ๊ตฌํํ๋ ๊ฒ๊ณผ ๋์กฐ๋๋ ๋ถ๋ถ. Lua๊ฐ ๊ทธ๋๋ง ๋จ์ํ ์ธ์ด๋ผ ์ด๋ฐ ์ผ์ด ๋๋ ๋ฏํ๋ค.
์ด ๋๋ฌธ์ธ์ง ์
๋ฐ์ดํธ๊ฐ ์์ฃผ ๋๋ ํธ์ ์๋๋ฐ, Lua 5.3์ด ๋์ค๊ณ ์๋ ๋์์๋ LuaJIT์ Lua 5.1 ๋ฌธ๋ฒ์ด ์ต์ ์ด๋ค[12]
๋ํ, ์ ๊ทธ๋๋ ์์ฌ์ด C์ธ์ด์์ ์ธํฐํ์ด์ค ์์ ์ LuaJIT์ FFI(Foreign Function Interface)๋ฅผ ์ด์ฉํ๋ฉด Low-Level C์ธ์ด ํจ์๋ค์ ๋ณ๋ค๋ฅธ ์์ ์์ด ์ง์ ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค. ์ด FFI ๋ฐฉ์์ผ๋ก ์ธํด ์คํฌ๋ฆฝํธ - ๋ค์ดํฐ๋ธ ์ฝ๋ ๊ฐ ํธ์ถ๊ท์ฝ์ ๋ง์ถ๊ธฐ ์ํ ๋ณ๋์ ์์ ์ด ์ฌ์ค์ ํ์๊ฐ ์์ด์ง๊ณ , C ์๋ฃํ์ ์ง์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ฉฐ ํธ์ถ ์ฑ๋ฅ์ ๋ค์ดํฐ๋ธ์ ๊ฒฌ์ค๋งํผ ๋นจ๋ผ์ง๊ธฐ ๋๋ฌธ์, ์ผ๋จ JIT์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๊ธฐ์กด Lua ๋ฐ์ธ๋ฉ ์ฝ๋๋ฅผ ์ฌ์ฉํ ์ผ์ด ๊ทนํ ์ ์ด์ง๋ค. ์ด FFI ๋ฐฉ์์ ์ดํ Python์ CFFI ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ง์ ์๊ฐ์ ์ฃผ์๋ค(Node.js์ node-ffi๋ ์๋นํ ์ํฅ์ ๋ฐ์ ๊ฒ์ผ๋ก ์ถ์ ๋๋ค).
๋ค์ดํฐ๋ธ์ ๊ฒฌ์ค๋งํผ ์๋๊ฐ ๋น ๋ฅด๊ณ , ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋งค์ฐ ์ ๊ธฐ ๋๋ฌธ์ ์ต๊ทผ NGINX์ LuaJIT์ ํฌํจ์์ผ์ ์ปค์คํฐ๋ง์ด์ง์ ํ OpenResty ์น ์๋ฒ๊ฐ ์ธ๊ธฐ๋ฅผ ๋๊ณ ์๋ค. CDN ์๋น์ค๋ก ์ ๋ช ํ Cloudflare์ ์๋ ์ฌ Top 13 ๊ท๋ชจ์ ์ธ๊ณ์์ ๊ฐ์ฅ ํฐ C2C ์๊ฑฐ๋ ์๋น์ค(์ง๋ง์ผ/์ฅ์ ์ ์๊ฐํ๋ฉด ๋๋ค)์ธ ํ์ค๋ฐ์ค์์ ์ฃผ-์น์๋ฒ๋ก ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ๋ ํ์ฌ์ ๊ฐ๋ฐ์๋ค์ด OpenResty ๊ฐ๋ฐ์ ์ฃผ๋ํ๊ณ ์๋ค(๋จ Cloudflare์ CDN ์๋น์ค๋ ์ฌ์ค NGINX์ LuaJIT์ผ๋ก ์ฝ๋๋ฅผ ์ฌ๋ ค ์ปค์คํฐ๋ง์ด์งํ ์๋น์ค๋ค์ด๋ค. ๊ทธ๋์ ํ์ฌ์ ๋ฌ๋ฆฌ ์ง์ ํ CDN ์๋น์ค๊ฐ ์๋๋ผ๋ ๋นํ๋ ์๋ค).
์ํ๊ณ ๋ก ์ ๋ช ํ ๊ตฌ๊ธ ๋ฅ๋ง์ธ๋๊ฐ ์ํ๊ณ ์ ๊ธฐ๋ฐ์ธ Q-Learning์ ๊ตฌํํ ๋ ์ฌ์ฉ๋ Torch ๋จธ์ ๋ฌ๋ ๋ฏธ๋ค์จ์ด๋ LuaJIT์ผ๋ก ์์ฑ๋์ด ์๋ค(๋ฅ๋ง์ธ๋ ์ฌ์ ๊ตฌ์ธ๊ณต๊ณ ๋ ๊ทธ๋์ C/C++์ Lua ์คํฌ๋ฆฝํธ๊ฐ ํ์์ญ๋์ผ๋ก ์ ํ์๋ค).
JavaScript์ Lua๋ ๋ฌธ๋ฒ๊ณผ ํจ๋ฌ๋ค์์ด 90% ์ด์ ๋น์ทํ ์ฌ์ด์ธ์ด๊ฒฉ์ด์ง๋ง JIT ์ฑ๋ฅ์ ๊ตฌํ ์ธก๋ฉด์ ์์ด์๋ JavaScript๊ฐ ๊ฐ์ง ๋ฌธ๋ฒ ์ผ๋ถ๊ฐ ์ฑ๋ฅ ํฅ์์ ์ฝ์ ์ผ๋ก ์์ฉํ๋ค๊ณ ํ๋ค. ์ฐธ์กฐ ๋ํ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์์ด์ LuaJIT์ด ๋ ๋์ ์ต์ ํ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์๋ค. ๋ฐ๋ผ์ Node.js๋ฅผ LuaJIT ๊ธฐ๋ฐ์ผ๋ก ๋ค์ ์์ฑํ Luvit์ด๋ผ๋ ํ๋ก์ ํธ๊ฐ ํ์ฑํ๋์๋ค.
ํํ์ด์ง์ ๋ฐ๋ฅด๋ฉด ์ธํฐํ๋ฆฌํฐ๋ฅผ ์์ ์ด์ ๋ธ๋ฆฌ์ด๋ก ์์ฑํ์ผ๋ฉฐ, ์ด๋ฏธ ์๋นํ ์์ค์ ์ต์ ํ๊ฐ ๋์ด์๋ค๊ณ ํ๋ค. Python์ JIT ์ปดํ์ผ๋ฌ์ธ PyPy๊ฐ ์๊ธฐ ์์ ์ผ๋ก JIT์ ๊ตฌํํ๋ ๊ฒ๊ณผ ๋์กฐ๋๋ ๋ถ๋ถ. Lua๊ฐ ๊ทธ๋๋ง ๋จ์ํ ์ธ์ด๋ผ ์ด๋ฐ ์ผ์ด ๋๋ ๋ฏํ๋ค.
๋ํ, ์ ๊ทธ๋๋ ์์ฌ์ด C์ธ์ด์์ ์ธํฐํ์ด์ค ์์ ์ LuaJIT์ FFI(Foreign Function Interface)๋ฅผ ์ด์ฉํ๋ฉด Low-Level C์ธ์ด ํจ์๋ค์ ๋ณ๋ค๋ฅธ ์์ ์์ด ์ง์ ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค. ์ด FFI ๋ฐฉ์์ผ๋ก ์ธํด ์คํฌ๋ฆฝํธ - ๋ค์ดํฐ๋ธ ์ฝ๋ ๊ฐ ํธ์ถ๊ท์ฝ์ ๋ง์ถ๊ธฐ ์ํ ๋ณ๋์ ์์ ์ด ์ฌ์ค์ ํ์๊ฐ ์์ด์ง๊ณ , C ์๋ฃํ์ ์ง์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ฉฐ ํธ์ถ ์ฑ๋ฅ์ ๋ค์ดํฐ๋ธ์ ๊ฒฌ์ค๋งํผ ๋นจ๋ผ์ง๊ธฐ ๋๋ฌธ์, ์ผ๋จ JIT์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๊ธฐ์กด Lua ๋ฐ์ธ๋ฉ ์ฝ๋๋ฅผ ์ฌ์ฉํ ์ผ์ด ๊ทนํ ์ ์ด์ง๋ค. ์ด FFI ๋ฐฉ์์ ์ดํ Python์ CFFI ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ง์ ์๊ฐ์ ์ฃผ์๋ค(Node.js์ node-ffi๋ ์๋นํ ์ํฅ์ ๋ฐ์ ๊ฒ์ผ๋ก ์ถ์ ๋๋ค).
๋ค์ดํฐ๋ธ์ ๊ฒฌ์ค๋งํผ ์๋๊ฐ ๋น ๋ฅด๊ณ , ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋งค์ฐ ์ ๊ธฐ ๋๋ฌธ์ ์ต๊ทผ NGINX์ LuaJIT์ ํฌํจ์์ผ์ ์ปค์คํฐ๋ง์ด์ง์ ํ OpenResty ์น ์๋ฒ๊ฐ ์ธ๊ธฐ๋ฅผ ๋๊ณ ์๋ค. CDN ์๋น์ค๋ก ์ ๋ช ํ Cloudflare์ ์๋ ์ฌ Top 13 ๊ท๋ชจ์ ์ธ๊ณ์์ ๊ฐ์ฅ ํฐ C2C ์๊ฑฐ๋ ์๋น์ค(์ง๋ง์ผ/์ฅ์ ์ ์๊ฐํ๋ฉด ๋๋ค)์ธ ํ์ค๋ฐ์ค์์ ์ฃผ-์น์๋ฒ๋ก ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ๋ ํ์ฌ์ ๊ฐ๋ฐ์๋ค์ด OpenResty ๊ฐ๋ฐ์ ์ฃผ๋ํ๊ณ ์๋ค(๋จ Cloudflare์ CDN ์๋น์ค๋ ์ฌ์ค NGINX์ LuaJIT์ผ๋ก ์ฝ๋๋ฅผ ์ฌ๋ ค ์ปค์คํฐ๋ง์ด์งํ ์๋น์ค๋ค์ด๋ค. ๊ทธ๋์ ํ์ฌ์ ๋ฌ๋ฆฌ ์ง์ ํ CDN ์๋น์ค๊ฐ ์๋๋ผ๋ ๋นํ๋ ์๋ค).
์ํ๊ณ ๋ก ์ ๋ช ํ ๊ตฌ๊ธ ๋ฅ๋ง์ธ๋๊ฐ ์ํ๊ณ ์ ๊ธฐ๋ฐ์ธ Q-Learning์ ๊ตฌํํ ๋ ์ฌ์ฉ๋ Torch ๋จธ์ ๋ฌ๋ ๋ฏธ๋ค์จ์ด๋ LuaJIT์ผ๋ก ์์ฑ๋์ด ์๋ค(๋ฅ๋ง์ธ๋ ์ฌ์ ๊ตฌ์ธ๊ณต๊ณ ๋ ๊ทธ๋์ C/C++์ Lua ์คํฌ๋ฆฝํธ๊ฐ ํ์์ญ๋์ผ๋ก ์ ํ์๋ค).
2.6. Python๊ณผ์ ๋น๊ต[ํธ์ง]
ํ์ด์ฌ๊ณผ ์์ฃผ ๋น๊ต๊ฐ ๋๋๋ฐ, ๋ ์ธ์ด์ ์ด๊ธฐ ๊ฐ๋ฐ ๋ชฉํ์ ์ฐจ์ด๊ฐ ํ์ฌ์ ๋ ์ธ์ด๊ฐ ๊ฐ๋ ๊ฑฐ์ ๋ชจ๋ ์ฐจ์ด์ ์์ธ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค. ํ์ด์ฌ์ ๊นจ๋ํ ๋ฌธ๋ฒ์ ๊ณ ๊ธ(high-level) ๋ฒ์ฉ(general) ํ๋ก๊ทธ๋๋ฐ์ธ์ด๊ฐ ๊ฐ๋ฐ ๋ชฉํ์๊ณ ๋ถ์์ ์ผ๋ก ๋ค๋ฅธ ์ธ์ด์์ ์ฌ์ด ์ ์ฐฉ(glue) ๊ธฐ๋ฅ์ด ์ ๊ณต๋๋ ๋ฐ๋ฉด์, Lua๋ C/C++ ํ๋ก๊ทธ๋จ์ ๋ดํฌ(embed)๋๋ ๊ฒ์ ๊ธฐ๋ณธ ์ฌ์ฉ๋ก๋ก ๊ฐ์ ํ๊ณ ๊ฐ๋ฐ๋์๊ณ ๋ถ์์ ์ผ๋ก ๊ณ ๊ธ(high-level) ๋ฒ์ฉ(general) ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก๋ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด๋ค. ์ฆ, ์ธํฐํ๋ฆฌํธํ ์คํฌ๋ฆฝํธ ์ธ์ด๋ผ๋ ๊ณตํต์ ์ ์ ์ธํ๋ฉด ๊ฐ์กฐํ๊ณ ์๋ ์ ์ด ๊ฑฐ์ ์ ๋ฐ๋์ด๋ค. ๊ทธ๋ฆฌ๊ณ ํ์ด์ฌ์ด ์ ์ฐฉ(gluing)์ด ์ฌ์ด ์ธ์ด์ด์ง ๋ดํฌ(embedding)๊ฐ ์ฌ์ด ์ธ์ด๋ ์๋๋ผ๋ ์ ๋ ์ฃผ๋ชฉํ ๋งํ๋ค.
๋ฐ๋ผ์ ํ์ด์ฌ ์ปค๋ฎค๋ํฐ์์ ์ ์ฐ์ด๋ ํํ๋๋ก '๋ฐฐํฐ๋ฆฌ๊ฐ ํฌํจ๋'[13] ํ์ด์ฌ์ ์ด๋์ ๋ ๋จ๋ ์ผ๋ก ํ๋ก๊ทธ๋จ์ ๋ง๋ค ์ ์๋ ํ๊ฒฝ์ธ ๋ฐ๋ฉด, Lua๋ ๊ธฐ๋ณธ์ค์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ๋ง์ ํฌํจํ๊ณ ์์ด ๋จ๋ ์ผ๋ก ์์ฉํ๋ก๊ทธ๋จ์ ๋ง๋ค๋ ค๋ฉด ์์ ๊ผฝํ๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ[14]๋ฅผ ํฌํจํ๊ณ ๋ ์ด๊ฒ์ ๊ฒ ์ง์ ๊ตฌํํด์ผ ํ๋ ์ด๋ ค์์ด ์๋ค. ๋๋ฌด ์์ด ๋ถํธํ๋ ๋ฐฐํฐ๋ฆฌ๊ฐ ํฌํจ๋ LuaDist๋ Lua for Windows๊ฐ์ ํ๋ก์ ํธ๋ ์๋ค.
๋ฌผ๋ก ๊ด์ ์ ๋ฐ๊พธ์ด์ C/C++ ํ๋ก๊ทธ๋จ์ ๋ดํฌํ ๋๋ฅผ ๊ฐ์ ํ๋ฉด, ํ์ด์ฌ์ ๊ธฐ๋ณธ์ผ๋ก import๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ[15]๊ฐ ๋ง์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ํฐ๋ฐ ๋นํด ์ฌ์ค์ ์๋ฌด๊ฒ๋ ์์ด ๊ทน๋๋ก ๊ฐ๋ณ๊ณ ๋น ๋ฅธ ๊ฒ์ด Lua์ ์ฅ์ ์ด๋ผ๊ณ ํ๊ฒ ๋ค.[16]
๊ทธ๋ฆฌ๊ณ ํ์ด์ฌ ์ปค๋ฎค๋ํฐ์์๋ Lua์ ๋น๊ตํด์ embedding ๊ธฐ๋ฅ์ชฝ์ผ๋ก ๋ถ์กฑํจ์ ์ธ์งํ๊ณ , ์ต๊ทผ ์์ญ ํ์ฅ์ ์๋ํ๊ณ ์๋ค. ํ์ด์ฌ์ด ์คํฌ๋ฆฝํธ์ฉ์ผ๋ก ๋ดํฌ๋ ์ ๋ช ํ ํ๋ก๊ทธ๋จ์ผ๋ก๋ 3dx Max, Blender๊ฐ ์๋ค.๋ ๋ค ๊ทธ ์์ฒด๋ก ๋ฉ์น ํฐ ํ๋ก๊ทธ๋จ[17]
๋ฐ๋ผ์ ํ์ด์ฌ ์ปค๋ฎค๋ํฐ์์ ์ ์ฐ์ด๋ ํํ๋๋ก '๋ฐฐํฐ๋ฆฌ๊ฐ ํฌํจ๋'[13] ํ์ด์ฌ์ ์ด๋์ ๋ ๋จ๋ ์ผ๋ก ํ๋ก๊ทธ๋จ์ ๋ง๋ค ์ ์๋ ํ๊ฒฝ์ธ ๋ฐ๋ฉด, Lua๋ ๊ธฐ๋ณธ์ค์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ๋ง์ ํฌํจํ๊ณ ์์ด ๋จ๋ ์ผ๋ก ์์ฉํ๋ก๊ทธ๋จ์ ๋ง๋ค๋ ค๋ฉด ์์ ๊ผฝํ๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ[14]๋ฅผ ํฌํจํ๊ณ ๋ ์ด๊ฒ์ ๊ฒ ์ง์ ๊ตฌํํด์ผ ํ๋ ์ด๋ ค์์ด ์๋ค. ๋๋ฌด ์์ด ๋ถํธํ๋ ๋ฐฐํฐ๋ฆฌ๊ฐ ํฌํจ๋ LuaDist๋ Lua for Windows๊ฐ์ ํ๋ก์ ํธ๋ ์๋ค.
๋ฌผ๋ก ๊ด์ ์ ๋ฐ๊พธ์ด์ C/C++ ํ๋ก๊ทธ๋จ์ ๋ดํฌํ ๋๋ฅผ ๊ฐ์ ํ๋ฉด, ํ์ด์ฌ์ ๊ธฐ๋ณธ์ผ๋ก import๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ[15]๊ฐ ๋ง์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ํฐ๋ฐ ๋นํด ์ฌ์ค์ ์๋ฌด๊ฒ๋ ์์ด ๊ทน๋๋ก ๊ฐ๋ณ๊ณ ๋น ๋ฅธ ๊ฒ์ด Lua์ ์ฅ์ ์ด๋ผ๊ณ ํ๊ฒ ๋ค.[16]
๊ทธ๋ฆฌ๊ณ ํ์ด์ฌ ์ปค๋ฎค๋ํฐ์์๋ Lua์ ๋น๊ตํด์ embedding ๊ธฐ๋ฅ์ชฝ์ผ๋ก ๋ถ์กฑํจ์ ์ธ์งํ๊ณ , ์ต๊ทผ ์์ญ ํ์ฅ์ ์๋ํ๊ณ ์๋ค. ํ์ด์ฌ์ด ์คํฌ๋ฆฝํธ์ฉ์ผ๋ก ๋ดํฌ๋ ์ ๋ช ํ ํ๋ก๊ทธ๋จ์ผ๋ก๋ 3dx Max, Blender๊ฐ ์๋ค.
2.7. JavaScript์์ ๋น๊ต[ํธ์ง]
๊ต์ฅํ ์ ์ฌํ ๋ฉด์ด ๋ง์ ๋ ์ธ์ด๋ค. ๋ ๋ค JIT๋ ์๋ค๋ ๊ฒ๋ ์ ์ฌํ ์ ์ด๋ค. ๊ทธ๋์ JavaScript์ ์๋ ๊ฒ์ Lua๋ก ์ฎ๊ธฐ๋ ๊ฒฝ์ฐ๋ ์๋๋ฐ ์๋ก Node.js๋ฅผ Lua๋ก ์ฎ๊ธด Luvit์ด๋ผ๋ ๊ฐ...
3. ์ฉ๋[ํธ์ง]
- ๊ฐ๋ฐ์ ํธ์๋ฅผ ์ํด์ Lua๋ฅผ ๋ด๋ถ์ ์ผ๋ก ํ์ฉํ๋ ์ผ ์ด์ธ์๋, ์์ ๊ฒ์ ์ฝ๋๋ฅผ Lua๋ก ์์ฑํ๋ ๊ฒฝ์ฐ๋ ์๋ค. ์๋ฅผ ๋ค๋ฉด RPG ๊ฒ์ ๋ฑ์์ ๊ฐ๋ณ NPC์ AI๋ ๊ธฐํ ํ๋ ์ ์๋ฅผ ์ํ ์คํฌ๋ฆฝํธ๋ก๋ ์ฐ์ด๊ณ ์๋ค.
- API๋ฅผ ์ ์ ๋ค์๊ฒ ๊ณต๊ฐํ์ฌ MOD ์ ์์ด๋ ๊ฒ์์ ์ปค์คํ UI ์ค์ ์คํฌ๋ฆฝํธ ์ธ์ด๋ก ์ฐ์ด๊ธฐ๋ ํ๋ค.
3.1. ์ค์ ์ฌ์ฉ ์[ํธ์ง]
- ๊ณ ์ ๊ฒ์์ธ ์์ญ์ด ์ฌ์ ๋น๋ฐ ์๋ฆฌ์ฆ์ ๊ฐ๋ฐ ์ธ์ด๊ฐ SCUMM์์ Lua๋ก ๋ณ๊ฒฝ๋๋ฉด์, ๊ฒ์ ๋ด์ ์์ฃผ ๋ฑ์ฅํ๋ ์ ์ง์ธ SCUMM bar๊ฐ Lua bar๋ก ๊ฐ๋ช ๋ ๊ฒ์ ์ ๋ช ํ ๊ฐ๊ทธ๋ค. Lua๊ฐ ํ๋ก๊ทธ๋๋จธ๋ค(ํนํ ๊ฒ์ ํ๋ก๊ทธ๋๋จธ๋ค) ์ฌ์ด์์ ์ธ๊ธฐ๋ฅผ ๋๊ฒ๋ ์์์ ์ด๋ค.
- ์๋ ์ค๋ธ ์ํฌ๋ํํธ์์ ์ ์ ๋ค์ด UI๋ฅผ ์ง์ ์ ์ํ ์ ์๊ฒ ๋๋ฉด์ ์ผ๋ฐ ๊ฒ์ด๋จธ๋ค์๊ฒ๋ ์ธ์ง๋๋ฅผ ์ป์๋ค. Lua๊ฐ ๊ตญ๋ด์ธ์ ์ผ๋ฐ ๊ฒ์ด๋จธ๋ค์๊ฒ ๋๋ฆฌ ์๋ ค์ง๊ฒ๋ ์์์ ์ด๋ค. ์๋ ์ค๋ธ ์ํฌ๋ํํธ์ ์ปค๋ค๋ ์ฑ๊ณต ๋๋ถ์, Lua๋ฅผ ์๋ ์ค๋ธ ์ํฌ๋ํํธ ์ ์ฉ ์คํฌ๋ฆฝํธ ์ธ์ด๋ก ์ฐฉ๊ฐํ ๊ตญ๋ด์ธ์ ๊ฒ์ด๋จธ๊ฐ ๋งค์ฐ ๋ง๋ค. 5.1๋ฒ์ ์ ์ฌ์ฉํ๋ค.
- ๋ผ๊ทธ๋๋กํฌ ์จ๋ผ์ธ์์ NPC์ AI์ ํธ๋ฌธํด๋ฃจ์ค์ AI, ์ฉ๋ณ์ AI์ Lua๊ฐ ์ฐ์์ผ๋ฉฐ, ์ด ๊ฐ์ด๋ฐ ํธ๋ฌธํด๋ฃจ์ค์ ์ฉ๋ณ์ ์ ์ ๊ฐ ์ง์ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค. 3์ฐจ ์ง์ ๊ตฐ์ด ๋ฑ์ฅํ ์ฆ์์ ์ฉ๋ณ์ AI๋ฅผ ๋ณ๊ฒฝํ์ฌ ๊ฑฐ์ 0ํ๋ ์ ์์ค์ ์คํฌ์ด ๊ฐ๋ฅํ๋ค๋๊ฒ ์ฌ๊ธฐ์ ๊ธฐ ์๋ ค์ ธ ๋๋ ๋๋ ์ฐฝ์ฉ๋ณ ๋ฌด๋ช ์ฌ 3์ธต ๊ณ ๊ณ ์ฑ์ ์ธ์น ์ ์ด ์๋ค.
- ๊ฒ๋ฆฌ ๋ชจ๋์์๋ Lua๋ฅผ ์ง์ํ๊ณ , ์ผ๋ถ ์์ค ์์ง ๊ธฐ๋ฐ ๊ฒ์(๋๋ ๋ชจ๋)๋ค๋ Lua๋ฅผ ์ฌ์ฉํ๋ค.
- GTA 4์๋ Lua ์คํฌ๋ฆฝํธ ๋ชจ๋๊ฐ ์๋ค. GTA ์ฐ ์๋๋ ์์ค์ ๋ฉํฐํ๋ ์ด์ด์ ํ๋์ธ MTA: San Andreas์ ์๋ฒ๋ฅผ ์์ฑํ ์ธ์ด๋ค. TAS ์์์ ๋ง๋๋ ๋ฐ์๋ ์ผ๋ถ ์ฌ์ฉํ๋ค.
- ํ๊ฒ์์์ ์ ๊ณต์ค์ธ ์คํ ๋ง์ผํ ๊ฒ์ ํด์ธ ์์ด๋๊ฒ์์ ๊ธฐ๋ณธ ์ธ์ด. ์ด๋ณด ํ๋ก๊ทธ๋๋จธ๋ค์ ์ํด์ ๋ฐฐ๋ ค๋ฅผ ํด์ค ๊ฒ์ด๋ผ๊ณ .
- ๋ง์ธํฌ๋ํํธ์ ๋ชจ๋ ์ปดํจํฐํฌ๋ํํธ์ ํ๋ก๊ทธ๋จ์ ์์ฑํ ์ธ์ด.
- ๋ก๋ธ๋ก์ค(Roblox)์ ๋ชจ๋ ๊ฒ์์ด ์ด ๋ฃจ์ ๊ธฐ๋ฐ์ผ๋ก ๋์๊ฐ๋ค. ์ฌ๋ด์ผ๋ก ๋ก๋ธ๋ก์ค์ ํต(์คํฌ๋ฆฝํธ)์ ๊ฒ์ ๋ด ์์คํ ์ ๋ณํ์์ผ์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด๋ ๋ฃจ์๋ก ์์ฑ๋๋ค.
๊ทธ๋ฌ๋๊น ๊ฐ๋ฐ์๋ค์ ํต๋ ๋ง๋ค ์ ์๋ค๋ ์๊ธฐ๋ค - 2015๋ ์๋ Corona sdk๋ผ๋ ๊ฒ ๋์จ ๋๋ถ์ Lua๋ง ๋ฐฐ์์ ๊ฒ์ ํ๋ ๋๋ฑ ๋ง๋ค์ด ๋ด๋ ๊ฒ ๊ฐ๋ฅํด์ก๋ค. 2015๋ 12์ ๊ธฐ์ค์ผ๋ก iOS, ์๋๋ก์ด๋ ๋ชจ๋ ์ง์๋๋ค.
- Love2d๋ผ๋ C++(SDL)์ ์ ์ฐฉ์์ผ ๋ง๋ ๊ฒ์ ๊ฐ๋ฐ ํ๋ ์์ํฌ๊ฐ Lua๋ฅผ ์ฌ์ฉํด ์ฝ๋ฉํ๋ค. Not Tetris 2, Not Pacman, ํฌํ ๋ง๋ฆฌ์ค ๋ฑ ๊ฝค๋ ํฅํํ ๊ฒ์๋ค์ ํ์์์ผฐ์ง๋ง ์ธ์ง๋๊ฐ ๊ทธ๋ฅ ๋์ง ์๋ค.
ํ๊ตญ์๋ ์ปค๋ฎค๋ํฐ์กฐ์ฐจ ์๋ค - ํผ๋์์ง์ด cocos 2d-x์ Lua ๋ชจ๋์ ํตํด ๊ฐ๋ฐ๋์๋ค. ์์ฒด ์คํฌ๋ฆฝํธ์ธ LNX ์คํฌ๋ฆฝํธ ๋ํ ์ปดํ์ผ ๊ณผ์ ์ ํตํด Lua ์ฝ๋๋ก ๋ณํํ ๋ค ์ฌ์ฉ๋๋ค.
- ์คํ ๋งค๋์์์๋ Lua๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๋ฏนํจํด์ ๋ง๋ค ์ ์๋ค. ๊ธฐ์กด์ XML๋ฐฉ์์ ์คํฌ๋ฆฝํธ์์ ๊ฐ์ํ๊ฐ ๋๊ฒ ์๋ฌธ ์ค๋ช ๋งํฌ
- ๊ฒ์ ํฌ๋ฃจ์ธ์ด๋ ํน์ฆ์๋ ์ฐ์๋ค.
- ์คํํฌ๋ํํธ1 ์ ์ฆ๋งต ํธ์ง๊ธฐ์ธ SCM draft 2์ ํ๋ฌ๊ทธ์ธ TEP์ ๊ธฐ๋ฐ์ธ์ด๋ค.
- ๋ค์ฝ๋๋ ์คํ๋์ค์ ์คํฌ๋ฆฝํธ๋ก Lua๋ฅผ ์ฌ์ฉํ๋ค.
- ์๋ง ์ ์์ฉ ์ํํธ์จ์ด์ธ Aegisub์์๋ Lua ์คํฌ๋ฆฝํธ๋ฅผ ์์ฉํด ์๋ํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค.
- Ti-nSpire ๊ณ์ฐ๊ธฐ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค. ๊ณตํ์ฉ ๊ณ์ฐ๊ธฐ๋ ๋ณต์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ง์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ, Ti์ฌ ์ ํ์ ๊ฒฝ์ฐ Lua, C์ธ์ด, Ti-BASIC ๋ฑ์ ์ธ์ด๋ฅผ ์ง์ํ๋ค. Lua์ ๊ฒฝ์ฐ ์ปดํจํฐ๋ก ํ๋ก๊ทธ๋๋ฐํด์ nSpire์ผ๋ก ๋ณด๋ด๋ ๋ฐฉ๋ฒ์ผ๋ก ํ๋ก๊ทธ๋๋ฐํ๋ค.
- ์์ดํจ๋๋ก ์ฝ๋ฉํด์ ๋ง๋ Lua ๊ฐ๋ฐ ํด๋ ์๋ค. ์ด๋ฆ์ ๊ณต๊ฐ ๋น์ Codify, ํ์ฌ Codea์ด๋ค. ์ ํํ๋ Lua๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉํ์ง๋ง ์ฑ๋ด์์ ๊ฐ๋ณ์ ์ผ๋ก ํจ์๋ API ๋ฑ์ ์ ๊ณตํ๋ค.
- ํ์ฐ๋ ํ ์ด์ ์คํฌ๋ฆฝํธ์ MOD๋ Lua๋ก ์์ฑ๋๋ค.
- ์ฌ์ํฐ 4์ ์ผ๋ถ ํน์ ๊ฑด๋ฌผ ๊ธฐ๋ฅ์ด๋ ์ด์ ๋ฏธ์ ์ Lua ์คํฌ๋ฆฝํธ๋ก ์์ฑ๋์ด ์๋ค. ๊ทธ๋ฌ๋ ํ๋ฌ๊ทธ์ธ dat ํ์ผ ์์ ์ ์ฅ๋์ด ์์ด ์ด๊ฑฐ๋ ํธ์งํ๋ ค๋ฉด ๋ณ๋์ ์๋ํฐ๊ฐ ํ์ํ๋ค.
- Command: Modern Air / Naval Operations์์ ์๋๋ฆฌ์ค๋ฅผ ์ ์ํ ๋ ์ฌ๋ฌ ๋ฐฉ๋ฉด์ผ๋ก ์ฌ์ฉํ๋ค. ์๋ฅผ ๋ค๋ฉด ํฌ๊ธฐ๋ ์์ก๊ธฐ์์ ๋ณ๋ ฅ์ ๋ด๋ฆฌ๋ ๊ฒ๋ ์์ก์์ ์ด ์ ์์ผ๋ก ํจ์น๋๊ธฐ ์ ๊น์ง๋ ์ ์์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์๋๋ฆฌ์ค ์ ์์๊ฐ Lua ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํด์ผ ํ๋ค.
- ์คํํฌ๋ํํธ ๋ฆฌ๋ง์คํฐ ๋งต ์๋ํฐ์์ ์ ์ฆ๋งต ์ ์์ SCM Draft๋ก ์์ ํ ๋ ํธ๋ฆฌ๊ฑฐ์ ๋ ธ๊ฐ๋ค๋ฅผ ํ๊ธฐ์ ์ผ๋ก ์ค์ฌ์ฃผ๋ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ ์ ์๋๋ฐ ์ด๊ฒ์ด Lua์ธ์ด๋ก ์์ฑ๋๋ค.
- Wireshark ํ๋ฌ๊ทธ์ธ ์ ์์ ์ฌ์ฉ๋๋ค.
- Cheat Engine ์คํฌ๋ฆฝํธ ์ ์์ ์ฌ์ฉ๋๋ค.
- ๊ฒ์๊ฐ๋์ธ์ ์คํฌ๋ฆฝํธ ํ์ผ๋ก ์ด๋ค.
- minetest์์ API๋ฅผ lua๋ก ์ ๊ณตํ๊ณ ์๋ค.
- ๋ฉ์ดํ์คํ ๋ฆฌ์์๋ ์ฌ์ฉํ๋ค. ๋ค๋ง ์ ํํ ์ด๋ป๊ฒ ์ฌ์ฉ๋๋์ง๋ ๋ถ๋ช ์ด๋ค.
- Nmap์ port ์ค์บ์ ํ์ฉ๋๋ ํ๋ก๊ทธ๋จ์ด๋ฉฐ, NSE(Nmap Scripting Engine)๋ก ์ฝ๋๋ฅผ ์์ฑํ ๋ Lua๊ฐ ์ฌ์ฉ๋๋ค.
- GTA5์ ์ ์ ์คํฌ๋ฆฝํธ ์ ์์๋ lua ์ธ์ด๊ฐ ์ฌ์ฉ๋๋ค.
- ์นด์ค์จ๋ผ์ธ ์์ ์คํ๋์ค ๋งต ์ ์์ lua๊ฐ ์ฌ์ฉ๋๊ธฐ๋ ํ๋ค.
[1] Roberto Ierusalimschy. 1960๋
์์ผ๋ก ์ปดํจํฐ๊ณผํ์์ด๋ฉฐ ์๋จ์ ๋ฆฌ์ฐ ๊ตํฉ์ฒญ ๋ํ๊ณผ ์คํ ํฌ๋ ๋ํ์์ ๋ถ๊ต์๋ก ์ญ์ํ ์ ์ด ์๋ค. ์ํค๋ฐฑ๊ณผ์์ ์ฑ์จ๋ฅผ ์ด์๋ฃจ์๋ฆผ์ค์(...)๋ผ๊ณ ํ๊ธฐํ๊ณ ์๋ค
[2] The evolution of Lua
[3] ์๋์ ์ผ๋ก ๋ฉ์น๊ฐ ํฐ LuaJIT์กฐ์ฐจ 300KB ์ ๋ ๋๋ค.
[4] 5.3๋ฒ์ ์ ์ ์๊ฐ ์ถ๊ฐ๋์๋ค. ์ด๋๋ฌธ์ Lua ์ปค๋ฎค๋ํฐ ํํธํ๊ฐ ์งํ์ค์ด๋ค. ์๋ ์ฐธ๊ณ .
[6] ์ด ์ ์ ํ์ด์ฌ๊ณผ ๋น์ทํ๋ค.
[7] ์์ฝ์ด(reserved keywords)๋ก ๋ถ๋ฅ๋์ง๋ ์์ง๋ง, ์ฝ๋ก ์ ์ฌ์ฉํ ํจ์ ํธ์ถ์์ self ๋ณ์๋ฅผ ๋ค๋ฅธ OOP ์ธ์ด์์ ์ ๊ณตํ๋ this๋ self ๋ณ์์ฒ๋ผ ํจ์ ์์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค
[10] ๊ธฐ๋ณธ ์ซ์ ํ์
์ ์ฌ์ ํ number ๋ฟ์ด๋ค. math.type()์ ํตํด์ ์๋ธ ํ์
์ ํ์ธํด์ผ๋ง 64๋นํธ ๋ถ๋์์์ ํ์
์ธ ๊ฒฝ์ฐ์๋ double์ด๋ผ๊ณ ํ ๊ฒ์ด์ง ํท๊ฐ๋ฆฌ๊ฒ float, ์ ์ํ์ธ ๊ฒฝ์ฐ์๋ integer๋ผ๊ณ ๊ตฌ๋ถ๋์ด ํ์๋๋ค.
[11] ์ดํ์ ์ฌ๋๋ค์ด ๋์ฒด maintainer๋ฅผ ๊ณต๊ฐ๋ชจ์งํ์ผ๋ ์ ๋นํ ์ฌ๋์ ์ฐพ๋๋ฐ ์คํจํ๋ค.
[12] ์ ์ ํ ๋๋ก ์ฃผ์ ๊ฐ๋ฐ์ Mike Pall์ด ๊ฐ๋ฐ ํฌ๊ธฐ๋ฅผ ์ ์ธํ๋ค.
[13] ๊ธฐ๋ณธ์ผ๋ก ํฌํจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๊ธฐ๋ฅ์ด ํ๋ถํด ๋ค๋ฅธ ์ธ๋ถ ๋ชจ๋์ด ํ์์๋ค๋ ๋ป.
[15] embedding ์ํฉ์์๋ ์ ์ฐ์ด์ง ์๋ ๊ฒ๋ค๋ ๊ธฐ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ง์ด ๋ค์ด์๋ค.
[16] ํ์ด์ฌ ๊ฐ๋ฐ์๊ฐ ์์ฑํ ๋ค์์ ๋
ผ์๋ฅผ ์ฐธ๊ณ . embedding์ด๋ผ๋ ๋ถ์ผ๋ง ํ์ ํ์ ๋ Lua๊ฐ ๋ ์ง๊ด์ ์์ ์ค๋ช
ํ๊ณ embedding ๋ชฉ์ ์ผ๋ก ํ์ด์ฌ์ ๊ผญ ์จ์ผ ํ๋ค๋ฉด ์๊ฐํด๋ณผ ์ ์๋ ๋์์ ์ ์ํ๊ณ ์๋ค.
[17] Lua๋ฅผ ์ง์ ์ธ๊ธํ๋ฉฐ ํ์ด์ฌ๋ ์ด์ชฝ์ผ๋ก ์ข ๋ ์ ํ ์ ์์ง ์์๊น ๋
ผ์ํ๋ ์์: The Future of Python