MoonScript یک زبان دینامیک اسکریپنویسی اپنسورس تحت لیسانس MIT است که به زبان Lua کامپایل میشود به طوری که این زبان قدرت یکی از پرسرعتترین زبانهای اسکریپتنویسی را همراه با مجموعهای غنی از فیچرها در اختیار دولوپرها قرار میدهد.
MoonScript هم میتواند به Lua کامپایل شود و بعداً ران شود و هم میتواند به صورت دینامیک همزمان با استفاده از Moonloader کامپایل و ران شود به طوری که این کار به سادگی با افزودن دستور "require "moonscript به منظور دستور دادن به زبان Lua که چهطور هر فایل MoonScript لود و ران شود، امکانپذیر است. به عنوان نمونهٔ برنامهٔ نوشتهشده با این زبان داریم:
class Thing
name: "unknown"
class Person extends Thing
say_name: => print "Hello, I am #{@name}!"
with Person!
.name = "MoonScript"
\say_name!
این زبان کاملاً قدرت رقابت با کامپایلرهای زبان Lua مانند LuaJIT و همچنین تمام کدها و لایبرریهای موجود برای Lua را دارا است چرا که مستقیم به کدهای Lua کامپایل میشود. همچنین ابزار CLI موناسکریپت به شما این امکان را میدهد تا مانند هر زبان سطح بالا و اسکریپتنویسی دیگری، برنامههای خود را مستقیم از داخل کامندلاین ران یا اجرا نمایید (برای بررسی کامل و دقیق این زبان، میتوانید به MoonScript Reference Manual وبسایت موناسکریپت مراجعه کنید.)
نمایی کلی از MoonScript
این زبان از Whitespace بهطور قابلتوجهی استفاده میکند و یک سینتکس تمیز در اختیار دولوپر قرار میدهد (برخلاف زبان Lua که معمولاً شلوغی در کیوردهایش موجب آزار دولوپر میشود!) در زیر نمونهای از سینتکس این زبان را میبینید:
export my_func
x = 2323
collection =
height: 32434
hats: {"tophat", "bball", "bowler"}
my_func = (a) -> x + a
print my_func 100
همچنین این زبان میتواند مستقیم از یک اسکریپت نوشتهشده با زبان Lua بدون هیچ واسطهای، پیش از کامپایل لود شود به علاوه اینکه حتی وقتی ارور یا اِکسپشنی رخ میدهد، این زبان میداند که چهطور به دولوپر بگوید که این مشکلات در کجای فایل اصلی رخ دادهاند.