MoonScript: زبان اسکریپت‌نویسی کاربرپسندی که به Lua کامپایل می‌شود

MoonScript: زبان اسکریپت‌نویسی کاربرپسندی که به Lua کامپایل می‌شود

MoonScript یک زبان دینامیک اسکریپ‌­نویسی است که به زبان Lua کامپایل می‌­شود و این در حالی است که این زبان قدرت یکی از پرسرعت‌­ترین زبا‌ن‌­های اسکریپت‌­نویسی را همراه با مجموعه‌­ای غنی از فیچرها به شما می­‌دهد.

مون‌اسکریپت هم می‌تواند به 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 کامپایل می‌شود.

ابزار کامندلاین این زبان به شما این امکان را می‌دهد که مانند هر زبان سطح بالا و اسکریپت‌نویسی دیگری، مون‌اسکریپت هم مستقیم از کامندلاین ران شود (برای بررسی کامل و دقیق این زبان می‌توانید، به بخش Reference Manual زبان مون‌اسکریپت مراجعه کنید.)

نمای کلی زبان مون‌اسکریپت
مون‌اسکریپت از Whitespace به‌طور قابل‌توجهی استفاده می‌کند و یک سینتکس تمیز در اختیار دولوپر قرار می‌دهد (برخلاف زبان Lua که معمولاً شلوغی در کیوردهایش موجب آزار دولوپر می‌شود.) در زیر نمونه‌ای از ساختار این زبان را می‌بینید:

export my_func
x = 2323

collection =
  height: 32434
  hats: {"tophat", "bball", "bowler"}

my_func = (a) -> x + a

print my_func 100

همچنین مون‌اسکریپت جداول مفهومی، بازگشت‌های به‌اصطلاح Implicit روی فانکشن‌ها، کلاس‌ها، وراثت، دستورات import و export و همچنین روش راحت ساخت آبجکت‌ها که بااستفاده از کیورد with است را اضافه کرده است؛ برای نمونه داریم:

import concat, insert from table

double_args = (...) ->
  [x * 2 for x in *{...}]

tuples = [{k, v} for k,v in ipairs my_table]

این زبان می‌تواند مستقیم از یک اسکریپت نوشته‌شده با زبان Lua بدون مراحل واسط پیش از کامپایل لود شود. حتی وقتی ارور یا اکسپشنی رخ می‌دهد، این زبان می‌داند که چه‌طور به شما بگوید که این مشکلات در کجای فایل اصلی رخ داده‌اند.

منبع


هادی فاخریان