sepisoad.com

index
blog

آشنایی با lua

منتشر شده در 2018-12-04 19:22:47.433326 توسط Sepehr Aryani

lua به عنوان یک scripting language جایگاه ویژه ای در بین تولیدکنندگان محصولات تجاری و همین طور اوپن سورس داره. lua در بازه گسترده ای از محصولات به کار برده شده از جمله:

شاید بیراه نباشه که بگیم چیزی که بیش از هرچیز دیگه به lua قدرت میده نوع طراحی منحصر به فرد اونه که این امکان رو برای برنامه نویس فراهم میکنه که اونو به صورت توکار درون برنامه ای که مثلا به زبان c نوشته شده قرار بده که به این قابلیت embeddability گفته میشه، جمله پیچیده شد، اجازه بدید کمی بیشتر توضیح بدم.

قبل از شکافتن موضوع بد نیست به صورت تیتر وار ویژگی های lua رو لیست کنیم و بعد هر کدوم رو مفصل تر باز کنیم.

lua یک:

  1. زبان اسکریپتی است

  2. دارای type system از نوع dynamic است

  3. مدیریت حافظه از نوع garbage collection دارد

  4. پشتیبانی از JIT در نسخه luajit

  5. کد هسته بسیار مختصر و قابل حمل

  6. مصرف بسیار پایین حافظه

  7. و البته سهولت embed شدن

بسیار خوب، مورد شماره ۱ به این معناست که برای اجرای برنامه نوشته شده به زبان lua احتیاج به خود کامپایلر lua داریم.

برخلاف برنامه هایی که به زبان هایی مثل C که از نوع AOT هستند نوشته شدن که بعد از مرحله کامپایل شما یک فایل اجرایی باینری تحویل میگیرید و برای اجرای برنامه دیگه احتیاجی به کامپایلر ندارید، برنامه های lua هر بار برای اجرا به صورت سورس به کامپایلر خورانده شده و اجرا میشن. ممکنه فکر کنید این ویژگی باید خیلی دست و پاگیر باشه ولی در ادامه خواهید دید که چه کاربردی داره.

مورد شماره ۲ به این معنیه که هیچ variable ی در lua تایپ ابدی نداره مثلا به کد زیر توجه کنید که کاملا درست و بدون مشکل اجرا میشه:

num1 = 1980 -- num1 is number
num2 = 7 -- num2 is number
num3 = num1 + num2 -- num3 is number
print(num3) -- prints 1987
num1 = "hooshang" -- num1 is now string
print(num1) -- prints hooshang

خوب اگه کد بالا رو در lua interpreter اجرا کنید خواهید دید که هیچ اعتراضی به شما نخواهد شد و کد شما خیلی بی سر و صدا اجرا میشه.

اتفاقی که میوفته اینه که در زمان اجرا یا runtime نوع value تشخیص داده میشه و به variable مورد نظر bind میشه. بنابراین در یک جا تایپ number به متغیر num1 مرتبط یا bind میشه و چند خط پایینتر تایپ string به num1 مرتبط میشه و مقداری که به اون اشاره میکنه تعویض میشه.

ویژگی dynamic typing طرفداران و منتقدان خودش رو داره ولی در مورد lua این ویژگی خودش باعث ساده شدن طراحی اون شده و در عین حال استفاده از lua رو راحت تر میکنه.

ویژگی ۳ به این معنی هست که دیگه مدیریت حافظه به عهده برنامه نویس نیست و lua خودش تشخیص میده کی یه بخش یا خونه از حافظه رو آزاد کنه که باز هم نگرانی های مربوط به مدیریت حافظه از روی دوش برنامه نویس برداشته میشه و کار سریعتر پیش میره.

ویژگی شماره ۴ که در نسخه luajit وجود داره این امکان رو به lua میده که در زمان اجرای برنامه (runtime) بخش های پر اجرای برنامه بهینه بشن و به مرور سرعت اجرای اون بخش ها بالاتر بره.

ویژگی شماره ۵ کمک میکنه که برنامه های lua رو بتونیم روی پلتفرم های مختلف اجرا کنیم. در واقع lua به زبان C و با استاندارد C 89 نوشته شده و توسعه دهنده ها از قرار دادن هر کدی که قابلیت حمل اونو کم میکنه اجتناب کردن. بنابر این شما میتونید lua رو همزمان روی سرورهای عظیم و chip های ۸ بیتی اجرا کنید. این ویژگی lua باعث محبوبیت اون در زمینه IOT شده.

ویژگی شماره ۶ در واقع نتیجه مستقیم ویژگی شماره ۶ هست و این امکان رو به lua میده که روی دستگاه هایی که فقط چند کیلو بایت حافظه دارن اجرا بشه. باز هم اشاره میکنم به IOT.

ویژگی شماره ۷ عالی ترین ویژگی lua از نظر من هست که اجازه میده کل کامپایلر lua رو توی برنامه ای که به زبان دیگه نوشته میشه جا کرد که باعث میشه بتونیم برنامه تولید شده به روز رسانی کرد و حتی توسعه داد بدون اینکه نیاز باشه برنامه رو دوباره کامپایل کرد.

lua از پایه براین اساس طراحی شده تا بشه اونو به صورت توکار از داخل برنامه های نوشته شده به زبان های دیگه بویژه C اجرا کرد. به این صورت که شما بخش هسته ای و ثابت برنامه رو به زبان C می نویسید و بعد با قرارداد کامپایلر lua درون برنامه C باقی برنامه رو از طریق lua توسعه داد.

شاید بعضی از شما بازی World of Warcraft رو بشناسید. این بازی به شما این اجازه رو میده که با استفاده از lua بتونید ویژگی های جدیدی به بازی اضافه کنید یا ازش کم کنید. کاراکترها رو دستکاری کنید و برای کاراکترها سناریو های متفاوت بنویسید. همه این کارها حتی بدون اینکه یک خط از کد هسته بازی رو ببینید قابل انجام هست.

چرا؟ چونکه در دل فایل باینری بازی lua قرارداده شده که میتونه اسکریپ شما رو بفهمه و اجرا کنه.

خوب فکر کنم تا اینجا کافی باشه. احتمالا باز هم از lua براتون بنویسم. لطفا نظرات خودتونو برام ایمیل کنید یا برام توعیت بزنید. همیطور میتونید در لینکدین نظرات خودتون رو با من به اشتراک بزارید. ممنون از اینکه وقت گذاشنید و این مطلب رو خوندید.

Send
Share
©️ 2018 Sepehr Aryani
made with zaart