بسم الله hلرحمان الرحيم.
تعتبر لغة لوا (LUA) لغة برمجة مخصصة للبريمجات (Script language)، سريعة و فعالة الاداء، خفيفة الوزن، و قابلة للادراج في مختلف البرامج.
هذا هو التعريف الرسمي ( مترجم) للغة لوا.
قبل الحديث عن لغة لوا، لنتحدث قليلا عن ماهية لغات البرمحة الموجهة للبريمجات(Script language) و عن سبب وجودها في هذا العالم.
ادى انتشار استعمال جهاز الكمبيوتر، الى تزايد عدد البرامج التي توفر خدمات مختلفة للمستخدم. و مع مرور الوقت اخذت هذه البرامج في التطور مع تطور عتاد الاجهزة، و انتقلت من مجرد برامج بواجهة استخدام نصية، الى برامج معقدة توفر العديد من الخدمات بالاضافة الى واجهة استخدام مرئية.
حسنا هذه نبذة تاريخية مبسطة لما يعياشه المستخدم لهذه البرامج. أما فيما يخص مطوروا هذه البرامج،فالامور اتخذت منحى اخر، فكلما كان البرنامج مليئة بالخدمات المميزة، كلما زاد حجم الكود و تعقيده، و كلما تطلب الامر وقتا اكبر و فريقا اكبر.
من بين العقبات التي لاحت في الافق، هي زمن بناء البرنامج ( Compile Time )، اي الزمن المستغرق لترجمة الكود الى ملف تنفيذي. بما ان البرامج زاد تعقيدها و حجمها، فان زمن بناءها ارتفع بشكل مزعج ( من عدة دقائق، الى عدة ساعات احيانا في البرامج الضخمة) مما كان يؤدي الى هدر مكلف جدا للوقت. خصوصا اذا تم تغير سطر واحد في الكود، ثم قضاء 30دقيقة لرؤية النتيجة
من هنا جاءت فكرة يقوم اساسها على فصل الاجزاء الكثيرة التغير في الكود و الاجزاء الثابة، او فصل الكود عن معطياته. حيث ان الاجزاء الكثيرة التغير و معطيات الكود، يتم كتابتها في ملف منفصل، يمكن للبرنامج قراءته و استخلاص المعلومات منه. بهذه الطريقة لسنا بحاجة الى بناء البرنامج عند كل تغير، بل نقوم فقط بتغير ماهو موجود في الملف المنفصل، ثم تنفيذ البرنامج لرؤية النتيجة.
لنلاحظ هذا المخطط التوضيحي لبرنامج لا يعمل بمدأ الفكرة السابقة :
عند ابسط تغير ننتظر 10 دقائق مجددا:
اذا قمنا بعشر تعديلات متتابعة ( تعديل، بناء، تعديل، بناء...الخ) فسيستغرق ذلك وقتا كبيرا جدا ( خصوصا في مرحلة التنقيح ( Debug) ).
لنرى الان نفس البرنامج لكن هذه المرة يعتمد هذا الاخير على الفكرة السابقة :
البرنامج يؤدي نفس مهام البرنامج الاخر، لكن هذه المرة الاجزاء المتغير بكثرة تم فصلها عن كود البرنامج. الان متغير "اسم البرنامج" الموجود في كود البرنامج سيتم تغيره بواسطة الكود المكتوب في الملف، و بهذا نتفادى اعادة البناء. لنلقي نظرة :
تم تغير الاسم، دون المرور على مرحلة البناء، و بهذا تم حل معضلة ضياع الوقت.
ملاحظة :
طريقة العمل تتم بهذا الترتيب :
-كتابة/تعديل المعطيات ، او الاجراءات في ملف نصي بصيغة خاصة. لنسمه : "م"
-تشغيل البرنامج.
-البرنامج يقوم بفتح الملف "م"، ثم يمرره للمترجم الملفات"
-مترجم الملفات يقوم بقراءة الكود المكتوب في الملف "م"، يتحقق من عدم وجود اخطاء نصية او منطقية.
-يقوم المترجم بترجمة الكود الى معطيات/اجراءات يفهمها البرنامج ( هذه المرحلة تتم في زمن التشغيل (runtime) ).
-ينفذ البرنامج هذه التغيرات.
نلاحظ ان عدد العمليات اكبر من مجرد تغير مباشر في الكود الاصلي، لكن هذه العمليات سريعة جدا( ليست بسرعة الكود المبني، لكن سرعتها مقبولة جدا) و لهذا لا تأثر سلبا على البرنامج بالقدر الذي يقوم به زمن مرحلة البناء (مبدأ الجودة/الكلفة).
حسنا، بعدما تحدثنا عن مشكلة زمن بناء البرنامج، و رأينا كيفية حل هذه المشكلة، سنتطرق الان الى احد اهم خصائص لغات البرمجة الموجهة للبريمجات، الا و هي : الملحقات (plug in ).
لنأخذ المخطط السابق لبرنامجنا الخارق :
لنتخيل، ان مستخدما ما، لم يكتفي بما يوفره البرنامج من خدمات، و يريد اضافة الخدمة التي يريدها و لتكن "خدمة البحث". فكل ما عليه فعله هو كتابة كود في ملف نصي خاص (مقروء من طرف مترجم البرنامج). يقوم بعدها برنامجنا الخارق بتنفيذ الكود، و بالتالي يتم اضافة خدمة جديدة ، لنلاحظ هذا في المخطط التالي :
هذه ميزة رائعة لهذا النوع من لغات البرمجة.
البرامج الحالية لا تكاد تخلو من هذه الخاصية و كابسط مثال : متصفح فايرفوكس (fire fox) :
انتهينا الان من التعريف المبسط لماهية لغات البرمجة الموجهة للبريمجات. الحمد لله
لغة لوا، هي احدى هذه اللغات، تم تطويرها بلغة السي (C language) . تتميز هذه اللغة ببساطتها و سهولتها ، اضافة الى صغر حجمها و سرعتها (تترجم و تنفذ بسرعة). تم تطويرها بواسطة :
Roberto Ierusalimschy
Luiz Henrique de Figueiredo
Waldemar Celes
و ذلك سنة 1993، بالبرازيل
يمكن ادراج لغة لوا تقريبا في اي مكان و ذلك للعدد الكبير من المشاريع التي تعمل على نقلها لمنصات و لغات اخرى مثلا :
لغة السي شارب : LuaInterface
لغة الجافا : LuaJava
جهاز ننتندو دي اكس( nintendo Dsش): Micro Lua DS
جهاز سوني بي أس بي ( Sony PSPش):Lua Player
يمكن القاء نظرة على اغلب المشاريع هنا : http://luaforge.net
وقع اهتمامي على لغة لوا، لشهرتها في عالم تطوير الالعاب، حيث يفضلها المبرمجون لخصائصها المذكورة سابق. و لنذكر بعض الالعاب التي استعملت لغة لوا :
World of warcraft
The king of fighter XIII
Shank
Angry bird
L.A.noir
Fable II
القائمة طويلة جدا : http://en.wikipedia.org/wiki/Category:Lua-scripted_video_games
كما انه توجد محركات العاب لبرمجة الالعاب بلغة لوا، على سبيل المثال :
Löve
Spring engine
Glint 3d Engine
( لائحة البرامج و الالعاب المستعملة للغة لوا : http://lua-users.org/wiki/LuaUses)
قبل ان نختم هذا المقال، لنرى كيف نكتب بريمج بلغة لوا.
لغة لوا غير نوعية (non typed) و ديناميكية ، اي اننا لسنا مظطرين لتعين نوع المتغير عند انشائه، اذا كل متغير يمكن ان يحتفظ باي نوع من المعلومات(أو حتى الاجراءات، لكن سنرى ذلك في درس قادم).
ملاحظة : ينتهي اي امر يتم كتابته بلغة لوا بـ ; ، لكن استعمال هذا المعامل ليس اظطراريا، لكن انصح باستعماله).
لننشئ برنامجا يلقي التحية علينا :
message = "السلام عليكم";
print (message);
لنقم بنسخ الكود اعلاه و لصقه هنا : http://www.lua.org/cgi-bin/demo
و هو مترجم للغة لوا. نفذ :
رغم ان اصل لغة لوا برازيلي، الا انها تتكلم باللغة العربية بطلاقة
اتمنى ان تكون قد استمتعتم بهذا المقال، و سيكون لنا موعد اخر مع لوا في هذه المدونة ، انشاء الله.
سلام