์ด ๋ฌธ์„œ์˜ ์›๋ณธ์€ ์™ธ๋ถ€ ์œ„ํ‚ค์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.
1. ๊ฐœ์š”2. ์–ธ์–ด์  ํŠน์ง•
2.1. ๊ฐ€๋ฒผ์›€2.2. ๋ฌธ๋ฒ•์  ํŠน์ง•2.3. ํ…Œ์ด๋ธ”2.4. ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ2.5. ํŒŒํŽธํ™”
2.5.1. LuaJIT
2.6. Python๊ณผ์˜ ๋น„๊ต2.7. JavaScript์™€์˜ ๋น„๊ต
3. ์šฉ๋„
3.1. ์‹ค์ œ ์‚ฌ์šฉ ์˜ˆ



print("Hello, world!")


Lua (๋ฃจ์•„)
http://www.lua.org/

1. ๊ฐœ์š”[ํŽธ์ง‘]

1993๋…„์— ๊ฐœ๋ฐœ๋œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด. ๋ธŒ๋ผ์งˆ ๋ฆฌ์šฐ๋ฐ์ž๋„ค์ด๋ฃจ์˜ ๊ตํ™ฉ์ฒญ๋Œ€ํ•™๊ต์—์„œ ํ˜ธ๋ฒ ๋ฅดํˆฌ ์˜ˆ๋ฃจ์ž˜๋ง์Šคํ‚ค[1] ๋ฐ 2๋ช…์ด ๊ณต๋™์ œ์ž‘ํ–ˆ์œผ๋ฉฐ ์ด๋ฆ„๋„ ๋‹ฌ์„ ์˜๋ฏธํ•˜๋Š” ํฌ๋ฅดํˆฌ๊ฐˆ์–ด ๋‹จ์–ด์—์„œ ๋”ฐ์™”๋‹ค. ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋ฅผ ํ•˜๋‚˜์˜ ๋ชฉ์ ์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ต‰์žฅํžˆ ์ž‘๊ณ  ๊ฐ€๋ฒผ์šด ์ธํ„ฐํ”„๋ฆฌํ„ฐํ˜• ์–ธ์–ด์ด๋‹ค. ํ˜„์žฌ ์•ˆ์ •๋ฒ„์ „์€ 5.4์ด๋‹ค.

ํƒœ์ƒ ์ž์ฒด๊ฐ€ 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]

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 ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ•„์ˆ˜์—ญ๋Ÿ‰์œผ๋กœ ์ ํ˜€์žˆ๋‹ค).

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]

2.7. JavaScript์™€์˜ ๋น„๊ต[ํŽธ์ง‘]

๊ต‰์žฅํžˆ ์œ ์‚ฌํ•œ ๋ฉด์ด ๋งŽ์€ ๋‘ ์–ธ์–ด๋‹ค. ๋‘˜ ๋‹ค JIT๋„ ์žˆ๋‹ค๋Š” ๊ฒƒ๋„ ์œ ์‚ฌํ•œ ์ ์ด๋‹ค. ๊ทธ๋ž˜์„œ JavaScript์— ์žˆ๋Š” ๊ฒƒ์„ Lua๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋Š”๋ฐ ์˜ˆ๋กœ Node.js๋ฅผ Lua๋กœ ์˜ฎ๊ธด Luvit์ด๋ผ๋“ ๊ฐ€...

3. ์šฉ๋„[ํŽธ์ง‘]

  • Lua๋ฅผ ๋‚ดํฌํ•  ๊ฒฝ์šฐ์— C/C++ ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ์žฌ์ปดํŒŒ์ผ์ด๋‚˜ ๋ฆฌ๋กœ๋”ฉ์—†์ด ๋ฐ”๋กœ ์„ค์ • ๋ณ€ํ™”๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ์  ๋•Œ๋ฌธ์— ํŠนํžˆ ๊ฒŒ์ž„์—…๊ณ„์—์„œ ๋งŽ์ด ์“ฐ์ธ๋‹ค.
  • ๊ฐœ๋ฐœ์˜ ํŽธ์˜๋ฅผ ์œ„ํ•ด์„œ 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 ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‘์šฉํ•ด ์ž๋™ํ™” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Lua๋ฅผ Java๋กœ ๋งŒ๋“  Luaj๋ฅผ ์ด์šฉํ•ด ์ž๋ฐ”์—์„œ ์ง์ ‘ Lua 5.1 ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค! ๋‹จ์ ์€ ๊ด€๋ จ ์ •๋ณด๊ฐ€ ์ ๋‹ค๋Š” ๊ฒƒ. Lua 5.3์„ Java์— ์‹ฌ๊ธฐ ์œ„ํ•ด ๋งŒ๋“  Rembulan๋„ ์žˆ๋‹ค.
  • 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 ์ปค๋ฎค๋‹ˆํ‹ฐ ํŒŒํŽธํ™”๊ฐ€ ์ง„ํ–‰์ค‘์ด๋‹ค. ์•„๋ž˜ ์ฐธ๊ณ .
[5] ์ด ์ ์€ ๋ฃจ๋น„์–ธ์–ด์™€ ๋น„์Šทํ•˜๋‹ค
[6] ์ด ์ ์€ ํŒŒ์ด์ฌ๊ณผ ๋น„์Šทํ•˜๋‹ค.
[7] ์˜ˆ์•ฝ์–ด(reserved keywords)๋กœ ๋ถ„๋ฅ˜๋˜์ง€๋Š” ์•Š์ง€๋งŒ, ์ฝœ๋ก ์„ ์‚ฌ์šฉํ•œ ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ์— self ๋ณ€์ˆ˜๋ฅผ ๋‹ค๋ฅธ OOP ์–ธ์–ด์—์„œ ์ œ๊ณตํ•˜๋Š” this๋‚˜ self ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ํ•จ์ˆ˜ ์•ˆ์—์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค
[8] ์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด Lua์—๋Š” ํด๋กœ์ €๋งŒ ์กด์žฌํ•˜๊ณ , ๋‚˜๋จธ์ง€๋Š” syntactic sugar.
[9] ์š”์ฆ˜ C/C++์˜ double์€ ๋Œ€๊ฐœ IEEE754ํ‘œ์ค€ 64๋น„ํŠธ ๋ถ€๋™์†Œ์ˆ˜์  ํƒ€์ž…
[10] ๊ธฐ๋ณธ ์ˆซ์ž ํƒ€์ž…์€ ์—ฌ์ „ํžˆ number ๋ฟ์ด๋‹ค. math.type()์„ ํ†ตํ•ด์„œ ์„œ๋ธŒ ํƒ€์ž…์„ ํ™•์ธํ•ด์•ผ๋งŒ 64๋น„ํŠธ ๋ถ€๋™์†Œ์ˆ˜์  ํƒ€์ž…์ธ ๊ฒฝ์šฐ์—๋Š” double์ด๋ผ๊ณ  ํ•  ๊ฒƒ์ด์ง€ ํ—ท๊ฐˆ๋ฆฌ๊ฒŒ float, ์ •์ˆ˜ํ˜•์ธ ๊ฒฝ์šฐ์—๋Š” integer๋ผ๊ณ  ๊ตฌ๋ถ„๋˜์–ด ํ‘œ์‹œ๋œ๋‹ค.
[11] ์ดํ›„์— ์‚ฌ๋žŒ๋“ค์ด ๋Œ€์ฒด maintainer๋ฅผ ๊ณต๊ฐœ๋ชจ์ง‘ํ–ˆ์œผ๋‚˜ ์ ๋‹นํ•œ ์‚ฌ๋žŒ์„ ์ฐพ๋Š”๋ฐ ์‹คํŒจํ–ˆ๋‹ค.
[12] ์ „์ˆ ํ•œ ๋Œ€๋กœ ์ฃผ์š” ๊ฐœ๋ฐœ์ž Mike Pall์ด ๊ฐœ๋ฐœ ํฌ๊ธฐ๋ฅผ ์„ ์–ธํ–ˆ๋‹ค.
[13] ๊ธฐ๋ณธ์œผ๋กœ ํฌํ•จ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๊ธฐ๋Šฅ์ด ํ’๋ถ€ํ•ด ๋‹ค๋ฅธ ์™ธ๋ถ€ ๋ชจ๋“ˆ์ด ํ•„์š”์—†๋‹ค๋Š” ๋œป.
[14] ์ฃผ๋กœ LuaRocks์—์„œ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.
[15] embedding ์ƒํ™ฉ์—์„œ๋Š” ์ž˜ ์“ฐ์ด์ง€ ์•Š๋Š” ๊ฒƒ๋“ค๋„ ๊ธฐ๋ณธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋งŽ์ด ๋“ค์–ด์žˆ๋‹ค.
[16] ํŒŒ์ด์ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ๋‹ค์Œ์˜ ๋…ผ์˜๋ฅผ ์ฐธ๊ณ . embedding์ด๋ผ๋Š” ๋ถ„์•ผ๋งŒ ํ•œ์ •ํ–ˆ์„ ๋•Œ Lua๊ฐ€ ๋” ์ง๊ด€์ ์ž„์„ ์„ค๋ช…ํ•˜๊ณ  embedding ๋ชฉ์ ์œผ๋กœ ํŒŒ์ด์ฌ์„ ๊ผญ ์จ์•ผ ํ•œ๋‹ค๋ฉด ์ƒ๊ฐํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ๋Œ€์•ˆ์„ ์ œ์•ˆํ•˜๊ณ  ์žˆ๋‹ค.
[17] Lua๋ฅผ ์ง์ ‘ ์–ธ๊ธ‰ํ•˜๋ฉฐ ํŒŒ์ด์ฌ๋„ ์ด์ชฝ์œผ๋กœ ์ข€ ๋” ์ž˜ ํ•  ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ ๋…ผ์˜ํ•˜๋Š” ์˜์ƒ: The Future of Python