منبع باز و انتشار اولین نسخه مستقل زبان برنامه نویسی Luau، ادامه توسعه زبان Lua و سازگار با Lua 5.1 را اعلام کرد. Luau در درجه اول برای جاسازی موتورهای برنامه نویسی در برنامه ها طراحی شده است و هدف آن دستیابی به عملکرد بالا و مصرف کم منابع است. کد پروژه به زبان C++ نوشته شده و تحت مجوز MIT باز است.
Luau Lua را با قابلیتهای بررسی نوع و برخی ساختارهای نحوی جدید مانند لفظ رشتهای گسترش میدهد. این زبان با Lua 5.1 و تا حدی با نسخه های جدیدتر سازگار است. Lua Runtime API پشتیبانی میشود و به شما این امکان را میدهد که از Luau با کدها و پیوندهای موجود استفاده کنید. زمان اجرا زبان بر اساس یک کد Lua Runtime 5.1 بسیار بازسازی شده است، اما مفسر کاملاً بازنویسی شده است. در طول توسعه، برخی از تکنیک های بهینه سازی جدید برای دستیابی به عملکرد بالاتر در مقایسه با Lua استفاده شد.
این پروژه توسط Roblox توسعه داده شده است و در کدهای پلتفرم بازی، بازی ها و اپلیکیشن های کاربری این شرکت از جمله ویرایشگر Roblox Studio استفاده می شود. در ابتدا Luau پشت درهای بسته توسعه یافت، اما در نهایت تصمیم بر آن شد که آن را برای توسعه مشترک بیشتر با مشارکت جامعه به رده پروژه های باز منتقل کنیم.
ویژگی های کلیدی:
- تایپ تدریجی، اشغال یک موقعیت متوسط بین تایپ پویا و ایستا. Luau به شما امکان می دهد تا با تعیین اطلاعات نوع از طریق حاشیه نویسی های خاص، از تایپ ثابت در صورت نیاز استفاده کنید. انواع داخلی «هر»، «نیل»، «بولی»، «عدد»، «رشته» و «رشته» ارائه شده است. در عین حال امکان استفاده از تایپ پویا بدون تعریف صریح نوع متغیرها و توابع حفظ می شود. تابع foo(x: عدد، y: رشته): محلی بولی k: رشته = y:rep(x) بازگشت k == پایان "a"
- پشتیبانی از حروف الفبای رشته ای (مانند Lua 5.3) مانند "\0x**" (عدد هگزادسیمال)، "\u{**}" (نویسه یونیکد) و "\z" (پایان خط)، و همچنین توانایی تجسم قالب بندی اعداد (شما می توانید 1_000_000 را به جای 1000000 بنویسید)، لفظ برای اعداد هگزادسیمال (0x...) و اعداد باینری (0b......).
- پشتیبانی از عبارت "ادامه"، مکمل کلمه کلیدی "شکستن" موجود، برای پرش به یک تکرار حلقه جدید.
- پشتیبانی از عملگرهای انتساب ترکیبی (+=، -=، *=، /=، %=، ^=، ..=).
- پشتیبانی از استفاده از بلوکهای شرطی «if-then-else» در قالب عباراتی که مقدار محاسبه شده در طول اجرای بلوک را برمیگردانند. می توانید تعداد دلخواه عبارات elseif را در یک بلوک مشخص کنید. local maxValue = اگر a > b سپس a other b علامت محلی = اگر x < 0 سپس -1 elseif x > 0 سپس 1 else 0
- وجود حالت جداسازی (sandbox) که به شما امکان می دهد کدهای غیرقابل اعتماد را اجرا کنید. از این ویژگی می توان برای سازماندهی راه اندازی در کنار کد و کدی که توسط توسعه دهنده دیگری نوشته شده است استفاده کرد، به عنوان مثال، کتابخانه های شخص ثالث که ایمنی آنها را نمی توان تضمین کرد.
- محدودیت کتابخانه استاندارد که عملکردهایی که به طور بالقوه می توانند مشکلات امنیتی ایجاد کنند حذف شده اند. به عنوان مثال، کتابخانههای «io» (دسترسی به فایلها و راهاندازی فرآیندها)، «بسته» (دسترسی به فایلها و بارگذاری ماژولها)، «OS» (عملکردهایی برای دسترسی به فایلها و تغییر متغیرهای محیط)، «اشکالزدایی» (عملکرد ناامن با حافظه) ، "dofile" و "loadfile" (دسترسی FS).
- تهیه ابزار برای تحلیل کدهای استاتیک، شناسایی خطاها (لینتر) و بررسی استفاده صحیح از انواع.
- تجزیه کننده، مفسر بایت کد و کامپایلر با کارایی بالا را داشته باشید. Luau هنوز از کامپایل JIT پشتیبانی نمی کند، اما ادعا می شود که مفسر Luau از نظر عملکرد با LuaJIT در برخی شرایط کاملاً قابل مقایسه است.
منبع: opennet.ru