- °³¿ä
- First-class function
- Lexical Scoping, Upvalue or External Local Variable, Closure
- Tail Call or Proper Tail Recursion
- Coroutine
- Metatable & Metamethod
- Protected mode
- Weak Table
1 °³¿ä
·ç¾Æ¿¡¼ ³ª¿À´Â ¿©·¯ °¡Áö ¿ë¾îµé¿¡ ´ëÇØ Á¤¸®Çغ¸°íÀÚ ÇÑ´Ù. C¶û ·ç¾Æ¶û ¼·Î È£ÃâÇÏ´Â °Íµµ ÁÁÁö¸¸, ·ç¾Æ¶ó´Â ¾ð¾î ÀÚü¿¡ ´ëÇØ¼ Á» ½ÉµµÀÖ°Ô ¾ËÁö ¸øÇÏ´Ï, ¹Ù±ùÂʸ¸ ¸Éµµ´Â ´À³¦ÀÌ µé¾ú±â ¶§¹®ÀÌ´Ù.
2 First-class function
ÇÔ¼ö¸¦ º¯¼ö¿¡´Ù ÇÒ´çÇϰųª, ¸®ÅϰªÀ¸·Î ¹ÝȯÇÒ ¼ö ÀÖ´Â ±â´ÉÀ» ¸»ÇÑ´Ù. ·ç¾Æ¿¡¼´Â ÇÔ¼ö°¡ ¸í½ÃÀûÀÎ À̸§À» °¡ÁöÁö ¾Ê°í, ¿À·ÎÁö º¯¼ö¸¦ ÅëÇØ ¾×¼¼½ºµÈ´Ù. ±×·¯¹Ç·Î À̸§À» ¹Ù²Ù°Å³ª, »èÁ¦°¡ °¡´ÉÇÏ´Ù. À̸¦ ÀÌ¿ëÇØ HigherOrderFunctionÀ̳ª FunctorObject¸¦ °£´ÜÇÏ°Ô ±¸ÇöÇÒ ¼ö ÀÖ´Ù.
function new_function()
return function(msg)
print(msg .. " World")
end
end
a = print
a("Hello")
a = new_function()
a("Hello")
3 Lexical Scoping, Upvalue or External Local Variable, Closure
internal ÇÔ¼ö°¡ external ÇÔ¼ö ¾È¿¡¼ Á¤ÀǵǾúÀ» ¶§, internal ÇÔ¼ö´Â external ÇÔ¼öÀÇ Áö¿ª º¯¼ö¸¦ ¸ðµÎ ¾×¼¼½ºÇÒ ¼ö ÀÖ´Ù. ÀÌ·± ±â´ÉÀ» lexical scopingÀ̶ó°í ÇÑ´Ù. ·ç¾Æ´Â lexical scopingÀ» Áö¿øÇÑ´Ù. ´ÙÀ½°ú °°Àº ¿¹¸¦ »ý°¢ÇØ º¸ÀÚ.
function external()
local i = 0
return function() -- ¹«¸í(anonymous) ÇÔ¼ö
i = i + 1
return i
end
end
¹«¸í ÇÔ¼ö ¾È¿¡¼ external ÇÔ¼ö ¾È¿¡ ÀÖ´Â i º¯¼ö¸¦ ¾×¼¼½ºÇϰí ÀÖ´Ù. ÀÌ °æ¿ì ¹«¸í ÇÔ¼ö¿¡°Ô ÀÖ¾î i´Â Àü¿ª º¯¼öµµ ¾Æ´Ï°í, ±×·¸´Ù°í Áö¿ª º¯¼öµµ ¾Æ´Ï´Ù. ÀÌ·± º¯¼ö¸¦ external local variable, ¶Ç´Â upvalue¶ó°í ºÎ¸¥´Ù.
À§ÀÇ ¿¹¿¡¼ °è¼ÓÇØ¼, external ÇÔ¼ö¸¦ È£ÃâÇØ ÇÔ¼ö °´Ã¼¸¦ º¯¼ö¿¡´Ù ÀúÀåÇÑ ´ÙÀ½, ÀúÀåÇÑ ÇÔ¼ö¸¦ È£ÃâÇß´Ù°í ÇÏÀÚ.
f = external()
f()
f ÇÔ¼ö, Áï ¹«¸í ÇÔ¼ö¸¦ È£ÃâÇÏ´Â ½ÃÁ¡¿¡¼ i º¯¼ö´Â ÀÌ¹Ì Á¸ÀçÇÏÁö ¾Ê´Â´Ù. ±×·¸´Ù¸é ¹«¸í ÇÔ¼ö´Â ¾îµð¼ i º¯¼ö¸¦ ã¾Æ¾ß Çϴ°¡? ·ç¾Æ´Â À̸¦ ó¸®Çϱâ À§ÇØ closure¶ó´Â °³³äÀ» µµÀÔÇß´Ù. Áï closure¶õ ÇÔ¼ö + ±× ÇÔ¼ö¿¡¼ ¾×¼¼½ºÇÏ´Â external local variableµéÀÇ ÁýÇÕÀÌ´Ù.
±×·¸´Ù¸é external ÇÔ¼ö¸¦ ¿©·¯¹ø È£ÃâÇÏ¸é ¾î¶»°Ô µÇ´Â°¡?
f = external()
g = external()
f¿Í g´Â ¼·Î ´Ù¸¥ closure, Áï ¼·Î ´Ù¸¥ external local variableµéÀ» °¡Áö°Ô µÈ´Ù. Áï f ÇÔ¼ö¸¦ °è¼Ó È£ÃâÇØ i °ªÀ» Áõ°¡½ÃŰ´õ¶óµµ, g ÇÔ¼öÀÇ i º¯¼ö¿Í´Â ¾Æ¹«·± »ó°üÀÌ ¾ø´Ù´Â ¸»ÀÌ´Ù.
4 Tail Call or Proper Tail Recursion
Å×ÀÏ ÄÝÀº ÀÓÀÇÀÇ ÇÔ¼ö°¡ ´Ù¸¥ ÇÔ¼ö(ÀÚ±â Àڽŵµ Æ÷ÇÔ)¸¦ ¸¶Áö¸· ¸í·É(instruction)À¸·Î È£ÃâÇÏ´Â °æ¿ì¸¦ ¸»ÇÑ´Ù. ´ÙÀ½°ú °°Àº °æ¿ì¿¡ Å×ÀÏ ÄÝÀÌ ÀϾÙ.
function f(x)
return g(x)
end
f ÇÔ¼ö°¡ g ÇÔ¼ö¸¦ È£ÃâÇÑ ÈÄ¿¡´Â ´õ ÀÌ»ó ÇÒ ÀÏÀÌ ¾ø´Ù. Áï g ÇÔ¼ö¸¦ È£ÃâÇÑ ´ÙÀ½¿¡ f ÇÔ¼ö·Î µ¹¾Æ¿Ã Çʿ䰡 ¾ø´Ù´Â ¸»ÀÌ´Ù. µû¶ó¼ f ÇÔ¼ö¿¡ ´ëÇÑ Á¤º¸¸¦ ½ºÅÿ¡´Ù º¸°üÇÒ Çʿ䰡 ¾ø´Ù. ·ç¾Æ´Â ÀÌ »ç½ÇÀ» Àû¿ëÇØ¼ Å×ÀÏ ÄÝÀ» ½ÇÇàÇÒ ¶§´Â ½ºÅà °ø°£À» »ç¿ëÇÏÁö ¾Ê´Â´Ù.
±×·¸´Ù¸é À̰ÍÀÌ ÀǹÌÇÏ´Â ¹Ù´Â ¹«¾ùÀΰ¡? ¹Ù·Î ¹«ÇÑ Àç±Í È£ÃâÀÌ °¡´ÉÇÏ´Ù´Â ¸»ÀÌ´Ù. Å×ÀÏ Äݸ¸À¸·Î ÀÌ·ç¾îÁø ÇÔ¼öÀÇ °æ¿ì, ¹«ÇÑÀ¸·Î Àç±ÍÈ£ÃâÀ» ÇØµµ ½ºÅà ¿À¹öÇ÷ΰ¡ ÀϾÁö ¾Ê´Â´Ù. ¾Æ·¡ÀÇ ÇÔ¼ö°¡ ÁÁÀº ¿¹ÀÌ´Ù.
function foo(n)
if n > 0 then return foo(n-1) end
end
¸¶Áö¸· ÇÔ¼ö¸¦ È£ÃâÇÑ ´ÙÀ½ ÇÒ ÀÏÀÌ ¾Æ¹« °Íµµ ¾ø¾î¾ß Å×ÀÏ ÄÝÀ̶ó´Â °ÍÀ» »ó±âÇÏ¸é ´ÙÀ½ÀÇ ±¸¹®µéÀÌ Å×ÀÏ ÄÝÀÌ ¾Æ´Ï¶ó´Â °ÍÀ» ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù.
return g(x) + 1 -- ´õÇϱ⠿¬»êÀ» ÇØ¾ß ÇÑ´Ù.
return x or g(x) -- µÑ Áß¿¡ Çϳª¸¦ °ñ¶ó ¸®ÅÏÇØ¾ß ÇÑ´Ù.
return (g(x)) -- g(x)ÀÇ ¹Ýȯ°ª Áß¿¡ Çϳª¸¦ °ñ¶ó ¸®ÅÏÇØ¾ß ÇÑ´Ù.
Áï ·ç¾Æ¿¡¼ Å×ÀÏ ÄÝ ±¸¹®ÀÇ Æ÷¸ËÀº ¹Ýµå½Ã return g(Àμöµé...)ÀÇ ÇüŸ¦ °¡Á®¾ßÇÑ´Ù. ±×·¯¹Ç·Î ´ÙÀ½°ú °°Àº ±¸¹®Àº Å×ÀÏ ÄÝÀÌ´Ù.
return x[i].foo(x[j] + a*b, i+j)
5 Coroutine
½º·¹µå¿Í ºñ½ÁÇÑ °³³äÀÌ´Ù. °¢°¢ ÀڽŸ¸ÀÇ ½ºÅðú Áö¿ª º¯¼ö µîÀ» °¡Áö°í ÀÖ°í, Àü¿ª º¯¼ö´Â ¼·Î °øÀ¯ÇÑ´Ù. ´Ü ½º·¹µå´Â ¾Ë´Ù½ÃÇÇ µ¿½Ã¿¡ ½ÇÇàµÇ³ª, ÄÚ·çÆ¾Àº ±×·¸Áö ¾Ê´Ù. Áï ÇÑ ¼ø°£¿¡ ÇϳªÀÇ ÄÚ·çÆ¾¸¸ÀÌ ½ÇÇàµÈ´Ù. ´Ù¸¥ ÄÚ·çÆ¾À» ½ÇÇàÇϱâ À§Çؼ´Â ÇöÀç ½ÇÇà ÁßÀÎ ÄÚ·çÆ¾ÀÇ µ¿ÀÛÀ» ÁßÁö½ÃÄÑ¾ß ÇÑ´Ù. ¶ÇÇÑ ¿ÜºÎ¿¡¼ ÄÚ·çÆ¾ÀÇ µ¿ÀÛÀ» ÁßÁö½Ãų ¼ö ¾ø´Ù. ºñ¼±Á¡Çü(Non-preemptive)À̶ó´Â ¸»ÀÌ´Ù.
6 Metatable & Metamethod
¸ÞŸ Å×À̺íÀº Å×À̺íÀÇ µ¿ÀÛÀ» Á¤ÀÇÇÏ´Â Å×À̺íÀÌ´Ù.
±»ÀÌ ºñ½ÁÇÑ °É µéÀÚ¸é, C++ÀÇ ¿ÀÆÛ·¹ÀÌÅÍ ¿À¹ö·ÎµùÀ» µé ¼ö ÀÖ°Ú´Ù. C++¿¡¼ ÀÓÀÇÀÇ Å¬·¡½º¸¦ ¸¸µç °æ¿ì, ±âº»ÀûÀ¸·Î "+" ¿¬»êÀÌ ºÒ°¡´ÉÇÏ´Ù. ÇÏÁö¸¸ "+" ¿¬»êÀÚ¸¦ ÀçÁ¤ÀÇÇØÁÖ¸é °¡´ÉÇØÁø´Ù.
·ç¾Æ¿¡¼µµ Å×À̺íÀÇ °æ¿ì, ±âº»ÀûÀ¸·Î´Â "+" ¿¬»êÀÌ ºÒ°¡´ÉÇÏ´Ù. ±×·¯³ª Å×ÀÌºí¿¡ ÀÓÀÇÀÇ ¸ÞŸ Å×À̺íÀ» ¼³Á¤Çϰí, ±× ¸ÞŸ Å×ÀÌºí¿¡ "__add" Çʵ带 Á¤ÀÇÇØ ÁÖ¸é, "+" ¿¬»êµµ °¡´ÉÇØÁø´Ù. "__add" Çʵ忡 µé¾î°¡´Â ÇÔ¼ö, Áï ¸ÞŸ Å×ÀÌºí¿¡ µé¾î°¡´Â ÇÔ¼ö¸¦ ¸ÞŸ ¸Þ¼µå¶ó°í ºÎ¸¥´Ù.
7 Protected mode
º¸È£ ¸ðµå°¡ ¾Æ´Ò °æ¿ì, ·ç¾Æ ³»ºÎ¿¡¼ ¹®Á¦°¡ »ý±â¸é, ·ç¾Æ ÄÁÅØ½ºÆ® ÀÚü°¡ ¿À¿°µÉ ¼ö ÀÖ´Ù. ÄÁÅØ½ºÆ® ÀÚü°¡ ¿À¿°µÈ °æ¿ì, ´õ ÀÌ»ó ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÒ ¼ö ¾ø´Ù. °æ¿ì¿¡ µû¶ó¼´Â È£½ºÆ® ÇÁ·Î±×·¥ÀÌ Á¾·áµÉ ¶§µµ ÀÖ´Ù.
º¸È£ ¸ðµå¿¡¼´Â ¹®Á¦°¡ »ý°Üµµ, ÄÁÅØ½ºÆ®°¡ ¿À¿°µÇÁö ¾Ê´Â´Ù.
C ÇÔ¼ö´Â ³í¿Ü´Ù. ·ç¾Æ¿¡¼ È£ÃâÇÑ C ÇÔ¼ö ³»ºÎ¿¡¼ ¿¡·¯°¡ ¹ß»ýÇÑ °æ¿ì, ·ç¾Æ°¡ ÇÒ ¼ö ÀÖ´Â ÀÏÀº °ÅÀÇ ¾ø±â ¶§¹®ÀÌ´Ù.
8 Weak Table
Å×ÀÌºí ¾È¿¡ ¿ÀºêÁ§Æ®(ÇÔ¼ö,Å×À̺í,Ç® À¯Àúµ¥ÀÌÅÍ)°¡ µé¾îÀÖ´Â °æ¿ì, ±× ¿ÀºêÁ§Æ®´Â Å×À̺íÀÌ »ç¶óÁöÁö ¾Ê´Â ÀÌ»ó, ±âº»ÀûÀ¸·Î °¡ºñÁö Ä÷º¼ÇÀÇ ´ë»óÀÌ µÇÁö ¾Ê´Â´Ù. À§Å© Å×À̺íÀ» ÀÌ¿ëÇϸé Å×ÀÌºí ¾ÈÀÇ ¿ÀºêÁ§Æ®µµ °¡ºñÁö Ä÷º¼ÇÀÇ ´ë»óÀÌ µÇµµ·Ï ÇÒ ¼ö ÀÖ´Ù.
ÀÓÀÇÀÇ Å×À̺íÀ» À§Å© Å×À̺í·Î ¸¸µé±â À§Çؼ´Â ¸ÞŸÅ×À̺í°ú __mode ¸ÞŸ¸Þ¼µå¸¦ ¼³Á¤ÇØÁà¾ßÇÑ´Ù. ÀÚ¼¼ÇÑ °ÍÀº LuaGarbageCollection ÆäÀÌÁö¿¡...
SeriousMoin v1 (koMoinMoin 1.0a4 Modified)