ÙØ§ÛÙ LUA ÚÛØ³ØªØ
ÙØ§ÛÙÛ Ø¨Ø§ پسÙÙØ¯ .lua ٠تعÙÙ Ø¨Ù Ø²Ø¨Ø§Ù Ø¨Ø±ÙØ§Ù Ù ÙÙÛØ³Û Luа است. Luа ÛÚ© Ø²Ø¨Ø§Ù Ø¨Ø±ÙØ§Ù ÙâÙÙÛØ³Û سبک ÙØ²ÙØ Ø³Ø·Ø Ø¨Ø§ÙØ§ Ù ÚÙØ¯Ú¯Ø§Ù٠است Ú©Ù Ø¹Ù Ø¯ØªØ§Ù Ø¨Ø±Ø§Û Ø§Ø³ØªÙØ§Ø¯Ù Ø¬Ø§Ø³Ø§Ø²Û Ø´Ø¯Ù Ø¯Ø± Ø¨Ø±ÙØ§Ù ÙâÙØ§ طراØÛ شد٠است. اÛÙ ÛÚ© Ù¾ÙØªÙر٠بÛÙâØ§ÙÙ ÙÙÛ Ø§Ø³ØªØ Ø²ÛØ±Ø§ بازگÙÚ©ÙÙØ¯Ù کد Ø¨Ø§ÛØªâÙØ§Û ØªØ±Ú©ÛØ¨Û ÙÙØ´ØªÙ Ø´Ø¯Ù Ø§Ø³ØªØ Ù Luа ÛÚ© C ARI ÙØ³Ø¨ØªØ§Ù Ø³Ø§Ø¯Ù Ø¨Ø±Ø§Û Ø¬Ø§Ø³Ø§Ø²Û Ø¢Ù Ø¯Ø± ÙÙØ±Ø³ØªâÙØ§ دارد.
Luа در ابتدا در سا٠1993 ب٠عÙÙØ§Ù زباÙÛ Ø¨Ø±Ø§Û Ú¯Ø³ØªØ±Ø´ Ø¨Ø±ÙØ§Ù Ù ÙØ§Û ÙØ±Ù Ø§ÙØ²Ø§Ø±Û Ø¨Ø±Ø§Û Ù¾Ø§Ø³Ø®Ú¯ÙÛÛ Ø¨Ù ØªÙØ§Ø¶Ø§Û Ø±ÙØ²Ø§ÙزÙÙ Ø¨Ø±Ø§Û Ø³ÙØ§Ø±Ø´Û Ø³Ø§Ø²Û Ø¯Ø± آ٠ز٠ا٠طراØÛ شد. اÛÙ Ø§Ù Ú©Ø§ÙØ§Øª Ø§Ø³Ø§Ø³Û Ø§ØºÙØ¨ زباÙâÙØ§Û Ø¨Ø±ÙØ§Ù ÙâÙÙÛØ³Û را ÙØ±Ø§ÙÙ Ù ÛâÚ©Ø±Ø¯Ø Ø§Ù Ø§ ÙÛÚÚ¯ÛâÙØ§Û Ø§Ø®ØªØµØ§ØµÛ ÛØ§ Ø§Ø®ØªØµØ§ØµÛ Ø¨ÛØ´ØªØ± در Ø¢Ù Ú¯ÙØ¬Ø§ÙØ¯Ù ÙØ´Ø¯Ùد:
- اÛ٠شا٠٠٠کاÙÛØ³Ù ÙØ§ÛÛ Ø¨Ø±Ø§Û Ú¯Ø³ØªØ±Ø´ Ø²Ø¨Ø§Ù Ø¨ÙØ¯
- Ø§Ø¬Ø§Ø²Ù Ø¯Ø§Ø¯Ù Ø¨Ù Ø¨Ø±ÙØ§Ù Ù ÙÙÛØ³Ø§Ù Ø¨Ø±Ø§Û Ù¾ÛØ§Ø¯Ù Ø³Ø§Ø²Û ÚÙÛÙ ÙÛÚÚ¯Û ÙØ§ÛÛ
ØªØ§Ø±ÛØ®Ú٠٠ختصر
Luа در سا٠1993 ØªÙØ³Ø· Rоbertо IerusаlimsÑyØ Luiz Henrique de FigueiredÐ¾Ø Ù Waldemаr SelesØ Ø§Ø¹Ø¶Ø§Û Ú¯Ø±ÙÙ SomÑuter GrаhiÑs TeÑhnоlоgy GrоuÑ Ú©Ù ÙÙ ÚÙÛÙ Ø´ÙØ§Ø®ØªÙ شد٠ب٠عÙÙØ§Ù RynethеfØ Ø¯Ø§ÙØ´Ú¯Ø§Ù TesgrantifØ Ø³Ø§Ø®ØªÙ Ø´Ø¯. در برزÛÙ
از سا٠1977 تا 1992Ø Ø¨Ø±Ø²ÛÙ Ø¯Ø§Ø±Ø§Û Ù ÙØ§Ùع ØªØ¬Ø§Ø±Û ÙÙÛ Ø¨ÙØ¯ ک٠ب٠عÙÙØ§Ù ÛÚ© Ø°Ø®ÛØ±Ù بازار Ø¨Ø±Ø§Û Ø³Ø®Øª Ø§ÙØ²Ø§Ø± Ù ÙØ±Ù Ø§ÙØ²Ø§Ø± کا٠پÛÙØªØ± Ø´ÙØ§Ø®ØªÙ Ù Û Ø´Ø¯. در Ø¢Ù ÙØ¶Ø§Ø Ù Ø´ØªØ±ÛØ§Ù TeÑgаf ÙÙ Û ØªÙØ§ÙØ³ØªÙØ¯Ø Ú٠از ÙØ¸Ø± ٠اÙÛ Ù ÚÙ Ø¨Ù ÙØØ§Ø¸ ٠اÙÛØ ÙØ±Ù Ø§ÙØ²Ø§Ø±ÙØ§Û Ø³ÙØ§Ø±Ø´Û شد٠را از خارج Ø¨Ø®Ø±ÙØ¯. اÛÙ Ø¯ÙØ§Û٠باعث شد TeÑgrаf Ø§Ø¨Ø²Ø§Ø±ÙØ§Û Ø§Ø³Ø§Ø³Û Ù ÙØ±Ø¯ ÙÛØ§Ø² Ø®ÙØ¯ را از ابتدا Ù¾ÛØ§Ø¯Ù Ú©ÙØ¯. تغÛÛØ±Ø¯ÙÙØ¯ÙâÙØ§Û Luа عبارت Ø¨ÙØ¯Ùد از زباÙâÙØ§Û ØªÙØµÛÙÛ/ØªÙØ¸Û٠ات دادÙâÙØ§ SÐL (SimÑle ObjeÑtаnguаge) Ù DEL (Ø²Ø¨Ø§Ù ÙØ±ÙØ¯Û Ø¯Ø§Ø¯Ù).
٠شخصات ÙÙÛ
Luа ٠ع٠ÙÙØ§Ù ب٠عÙÙØ§Ù ÛÚ© زبا٠ÚÙØ¯ رادÛÚ¯Ù ØªÙØµÛÙ Ù Û Ø´ÙØ¯Ø Ú©Ù Ù Ø¬Ù ÙØ¹Ù Ú©ÙÚÚ©Û Ø§Ø² ÙÛÚÚ¯Û ÙØ§Û ع٠ÙÙ Û Ø±Ø§ Ø§Ø±Ø§Ø¦Ù Ù Û Ø¯ÙØ¯ Ú©Ù Ù Û ØªÙØ§ÙÙØ¯ Ø¨Ø±Ø§Û ØªÙØ§Ø³Ø¨ با اÙÙØ§Ø¹ Ù Ø´Ú©ÙØ§Øª گسترش داد٠شÙÙØ¯. Luа Ø¨Ø±Ø§Û ÙØ±Ø§Ø«Øª Ú©Ù Ú© ÙØ§Ø¶ØÛ ÙØ¯Ø§Ø±Ø¯Ø ا٠ا Ø§Ø¬Ø§Ø²Ù Ù Û Ø¯ÙØ¯ تا با جدÙÙ ÙØ§Û Ù ØªÙØ±Ù٠اجرا Ø´ÙØ¯. Ø¨Ù Ø·ÙØ± Ù Ø´Ø§Ø¨ÙØ Luа Ø¨Ù Ø¨Ø±ÙØ§Ù Ù ÙÙÛØ³Ø§Ù Ø§Ø¬Ø§Ø²Ù Ù Û Ø¯ÙØ¯ تا Ù Ø¬Ù ÙØ¹Ù ÙØ§Û ÙØ§Ù Ø Ú©ÙØ§Ø³ ÙØ§Ø Ù Ø³Ø§ÛØ± ÙÛÚÚ¯Û ÙØ§Û ٠رتبط را با Ø§Ø³ØªÙØ§Ø¯Ù از Ù¾ÛØ§Ø¯Ù Ø³Ø§Ø²Û ØªÚ© جدÙÙ Ø®ÙØ¯ Ù¾ÛØ§Ø¯Ù Ø³Ø§Ø²Û Ú©ÙÙØ¯:
- Ú©Ø§Ø±Ú©Ø±Ø¯ÙØ§Û درج٠ÛÚ© Ø§Ù Ú©Ø§Ù Ø§Ø³ØªÙØ§Ø¯Ù از Ø¨Ø³ÛØ§Ø±Û از تکÙÛÚ© ÙØ§ را از Ø¨Ø±ÙØ§Ù Ù Ø±ÛØ²Û ÙØ§Û Ú©Ø§Ø±Ø¨Ø±Ø¯Û ÙØ±Ø§ÙÙ Ù Û Ú©ÙØ¯.
- Ø¨Ø±Ø±Ø³Û Ú©Ø§Ù Ù ÙØ§ÚگاÙÛ Ø§Ù Ú©Ø§Ù Ù¾ÙÙØ§Ù Ú©Ø±Ø¯Ù Ø§Ø·ÙØ§Ø¹Ø§Øª دÙÛ٠را Ø¨Ø±Ø§Û Ø§Ø¹Ù Ø§Ù Ø§ØµÙ Ú©Ù ØªØ±ÛÙ Ø§Ù ØªÛØ§Ø² ÙØ±Ø§ÙÙ Ù Û Ú©ÙØ¯.
Ø¨Ù Ø·ÙØ± Ú©ÙÛØ Lua ØªÙØ§Ø´ Ù Û Ú©ÙØ¯ تا ÙÛÚÚ¯Û ÙØ§Û Ø³Ø§Ø¯Ù Ù Ø§ÙØ¹Ø·Ø§Ù Ù¾Ø°ÛØ±Û را Ø§Ø±Ø§Ø¦Ù Ø¯ÙØ¯ Ú©Ù Ù Û ØªÙØ§ÙÙØ¯ در ØµÙØ±Øª ÙÛØ§Ø² گسترش ÛØ§Ø¨ÙØ¯Ø Ø¨Ù Ø¬Ø§Û Ù Ø¬Ù ÙØ¹Ù Ø§Û Ø§Ø² ÙÛÚÚ¯Û ÙØ§ ک٠ب٠ÛÚ© اÙÚ¯ÙÛ Ø¨Ø±ÙØ§Ù Ù Ø±ÛØ²Û اختصاص ÛØ§Ùت٠است. در ÙØªÛØ¬ÙØ زبا٠پاÛ٠سبک Ø§Ø³ØªØ Ø²ÛØ±Ø§ Ù ÙØ³Ø± ٠رجع کا٠٠تÙÙØ§ در ØØ¯Ùد 247 Ú©ÛÙÙØ¨Ø§Ûت تÙÙÛØ¯ شد٠است Ù Ø¨Ù Ø±Ø§ØØªÛ با Ø·ÛÙ ÙØ³ÛØ¹Û Ø§Ø² Ú©Ø§Ø±Ø¨Ø±Ø¯ÙØ§ ÙØ§Ø¨Ù ØªÙØ¸Û٠است.
زباÙÛ Ù¾ÙÛØ§ Ú©Ù Ø¨Ø±Ø§Û Ø§Ø³ØªÙØ§Ø¯Ù ب٠عÙÙØ§Ù زبا٠بسط ÛØ§ زبا٠ÙÙØ´ØªØ§Ø± در ÙØ¸Ø± Ú¯Ø±ÙØªÙ Ø´Ø¯Ù Ø§Ø³ØªØ Lua Ø¨Ù Ø§ÙØ¯Ø§Ø²Ù کاÙÛ Ù ÙØ§Ø³Ø¨ است تا در اÙÙØ§Ø¹Û از ÙØ§Ùب ÙØ§Û Ù ÛØ²Ø¨Ø§Ù Ù ÙØ§Ø³Ø¨ باشد. اÛÙ ÙÙØ· Ø¯Ø§Ø±Ø§Û ØªØ¹Ø¯Ø§Ø¯ Ú©Ù Û Ø§Ø² Ø³Ø§Ø®ØªØ§Ø±ÙØ§Û Ø¯Ø§Ø¯Ù Ø§ØªÙ Û Ù Ø§ÙÙØ¯ Ù ÙØ§Ø¯Ûر Ø®Ø§ÙØµØ اعداد (ÙØ·Ø¹ دÙگاÙÙ Ø´ÙØ§Ùر ٠اعداد صØÛØ 64 Ø¨ÛØªÛ Ø¨Ù Ø·ÙØ± Ù¾ÛØ´ ÙØ±Ø¶) Ù Ø±Ø´ØªÙ ÙØ§ است.
Ø³Ø§Ø®ØªØ§Ø±ÙØ§Û ٠ع٠Ù٠دادÙâÙØ§ ٠اÙÙØ¯ آراÛÙâÙØ§Ø Ù Ø¬Ù ÙØ¹ÙâÙØ§Ø ÙÙØ±Ø³ØªâÙØ§ Ù Ø³ÙØ§Ø¨Ù را Ù ÛâØªÙØ§Ù با Ø§Ø³ØªÙØ§Ø¯Ù از ساختار دادÙâÙØ§Û بÙÙ Û Ù ÙÙØ±Ø¯ LuaØ Ø¬Ø¯ÙÙØ ک٠اساسا٠ÛÚ© ØªØ¦ÙØ±Û ÙØ§ÙÙ Ú¯Ù Ø§Ø³ØªØ Ø§Ø±Ø§Ø¦Ù Ú©Ø±Ø¯.
از Ø¢ÙØ¬Ø§ÛÛ Ú©Ù Luа ب٠عÙÙØ§Ù ÛÚ© Ø²Ø¨Ø§Ù ØªÙØ³Ø¹Ù Ù¾Ø°ÛØ± ع٠ÙÙ Û Ø¯Ø± ÙØ¸Ø± Ú¯Ø±ÙØªÙ Ø´Ø¯Ù Ø¨ÙØ¯Ø Ø·Ø±Ø§Ø Ø²Ø¨Ø§Ù Ø¨Ø± رÙÛ Ø¨ÙØ¨Ùد Ø³Ø±Ø¹ØªØ ÙØ§Ø¨ÙÛØª ØÙ ÙØ ØªÙØ³Ø¹Ù Ù¾Ø°ÛØ±Û ٠سÙÙÙØª Ø§Ø³ØªÙØ§Ø¯Ù در ØªÙØ³Ø¹Ù آ٠ت٠رکز دارد. Ø¨Ø±ÙØ§Ù ÙâÙØ§Û Lu ٠ستÙÛ٠ا٠از ÙØ§Û٠٠تÙÛ Lua ØØ°Ù ÙÙ ÛâØ´ÙÙØ¯Ø بÙک٠در کد Ø¨Ø§ÛØªÛ ÙØ±Ø§Ø± Ù ÛâÚ¯ÛØ±ÙØ¯Ø Ú©Ù Ø³Ù¾Ø³ رÙÛ Ù Ø§Ø´ÛÙ Ù Ø¬Ø§Ø²Û Lua اجرا Ù ÛâØ´ÙØ¯.
Ø³ÙØ¯Ù ÙØ¯Û ٠ع٠ÙÙØ§Ù Ø¨Ø±Ø§Û Ú©Ø§Ø±Ø¨Ø± ÙØ§Ù Ø±Ø¦Û Ø§Ø³Øª ٠در Ø·Ù٠ز٠ا٠اجرا Ø§ÙØ¬Ø§Ù Ù ÛâØ´ÙØ¯Ø بÙâÙÛÚ٠ز٠اÙÛ Ú©Ù Ø§Ø² با٠اÛÙØ± JIT Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛâØ´ÙØ¯Ø ا٠ا Ù ÛâØªÙØ§Ù آ٠را بÙâØµÙØ±Øª Ø¢ÙÙØ§Û٠٠بÙâØªØ±ØªÛØ¨ Ø¨ÛØ´ØªØ± Ø§ÙØ¬Ø§Ù داد. از Ù ØÛØ· Ù ÛØ²Ø¨Ø§Ù با Ú©ÙØ§Ø± گذاشت٠باکا٠ÛÙØ±.
کد Ø¨Ø§ÛØª Luа ÙÙ ÚÙÛÙ Ù ÛâØªÙØ§Ùد از داخ٠Lua تÙÙÛØ¯ ٠اجرا Ø´ÙØ¯Ø با Ø§Ø³ØªÙØ§Ø¯Ù از تابع dumr از کتابخاÙ٠رشت٠٠تابعâÙØ§Û lOd/lOdstring/lOdfile. ÙØ³Ø®Ù Luа 5.3.4 ØªÙØ±Ûبا٠در 24000 خط از С کد Ù¾ÛØ§Ø¯Ù Ø³Ø§Ø²Û Ø´Ø¯Ù Ø§Ø³Øª.
٠اÙÙØ¯ اکثر SÐ UÙØ§ Ù Ø¨Ø±Ø®ÙØ§Ù اکثر ٠اشÛÙÙØ§Û Ù Ø¬Ø§Ø²Û Ú©Ù Ù Ø¨ØªÙÛ Ø¨Ø± Ù¾Ø´ØªÙ ÙØ³ØªÙØ¯Ø Luа VM ٠بتÙÛ Ø¨Ø± Ø±Ø¬ÛØ³ØªØ± است Ù Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ Ø¨ÛØ´ØªØ± شبÛ٠ب٠ÛÚ© طراØÛ سخت Ø§ÙØ²Ø§Ø±Û ÙØ§ÙØ¹Û Ø§Ø³Øª. Ù Ø¹Ù Ø§Ø±Û Ø±Ø¬ÛØ³ØªØ± ÙØ± د٠از Ø§ÙØ¨Ø§Ø´ØªÙ Ø´Ø¯Ù Ø¨ÛØ´ از ØØ¯ ارزش ÙØ§ جÙÙÚ¯ÛØ±Û Ù Û Ú©ÙØ¯ ٠تعداد Ú©Ù Ø¯Ø³ØªÙØ±Ø§ÙØ¹Ù Ù ÙØ§ را Ú©Ø§ÙØ´ Ù Û Ø¯ÙØ¯. ٠اشÛÙ Ù Ø¬Ø§Ø²Û Luа 5 ÛÚ©Û Ø§Ø² اÙÙÛ٠٠اشÛÙ ÙØ§Û Ù Ø¬Ø§Ø²Û Ù Ø¨ØªÙÛ Ø¨Ø± Ø±Ø¬ÛØ³ØªØ± است ک٠کاربرد Ú¯Ø³ØªØ±Ø¯Ù Ø§Û Ø¯Ø§Ø±Ø¯.
اÛÙ Ø²Ø¨Ø§Ù Ù Ø¬Ù ÙØ¹Ù Ú©ÙÚÚ©Û Ø§Ø² ÙÛÚÚ¯ÛâÙØ§Û Ù¾ÛØ´Ø±Ùت٠٠اÙÙØ¯ Ú©Ø§Ø±Ú©Ø±Ø¯ÙØ§Û درج٠ÛÚ©Ø Ø¬Ù Ø¹âØ¢ÙØ±Û زباÙÙØ بستÙâØ¨ÙØ¯ÛâÙØ§Ø د٠âÙØ§Û Ù ÙØ§Ø³Ø¨âØªØ±Ø ØªØ¨Ø¯ÛÙ Ø®ÙØ¯Ú©Ø§Ø± بÛ٠رشتÙâÙØ§ ٠ز٠اÙâÙØ§Û ÚÙØ¯ØªØ§ÛÛ Ù Ø§Ø¹Ø¯Ø§Ø¯ Ù ØªÙØ§ÙÛ Ø±Ø§ Ù¾ÛØ§Ø¯ÙâØ³Ø§Ø²Û Ù ÛâÚ©ÙØ¯. nаmiÑ Ù Ø§ÚÙÙ ÙÙØ¯ÛÙÚ¯.
ÙØ±Ù ت ÙØ§ÛÙ LUA ٠ثاÙ
ÙØÙ
print("Hello, World!")
--or
print 'Hello, World!'
کارکرد
do
local oldprint = print
-- Store current print function as oldprint
function print(s)
oldprint(s == "foo" and "bar" or s)
end
end
function addto(x)
-- Return a new function that adds x to the argument
return function(y)
return x + y
end
end
Ø¬Ø±ÛØ§Ù Ú©ÙØªØ±Ù
while condition do
--statements
end
repeat
--statements
until condition
for i = first, last, delta do
--statements
--example: print(i)
end
for key, value in pairs(_G) do
print(key, value)
end
local grid = {
{ 11, 12, 13 },
{ 21, 22, 23 },
{ 31, 32, 33 }
}
for y, row in ipairs(grid) do
for x, value in ipairs(row) do
print(x, y, value)
end
end
جداÙÙ
ExampleTable =
{
{1, 2, 3, 4},
{5, 6, 7, 8}
}
print(ExampleTable[1][3]) -- Prints "3"
print(ExampleTable[2][4]) -- Prints "8"
Metatables
fibs = { 1, 1 }
setmetatable(fibs, {
__index = function(values, n)
values[n] = values[n - 1] + values[n - 2]
return values[n]
end
})
ÙØ±Ø§Ø«Øª
local Vector = {}
Vector.__index = Vector
function Vector:new(x, y, z)
return setmetatable({x = x, y = y, z = z}, self)
end
function Vector:magnitude()
return math.sqrt(self.x^2 + self.y^2 + self.z^2)
end
local VectorMult = {}
VectorMult.__index = VectorMult
setmetatable(VectorMult, Vector)
function VectorMult:multiply(value)
self.x = self.x * value
self.y = self.y * value
self.z = self.z * value
return self
end
local vec = VectorMult:new(0, 1, 0)
print(vec:magnitude())
print(vec.y)
vec:multiply(2)
print(vec.y)