درباره‌ی Wren

با آنچه Wren را منحصربه‌فرد می‌کند آشنا شوید


Wren یک زبان اسکریپت‌نویسی کوچک، سریع، کلاس‌محور و هم‌روند است. Smalltalk را در بسته‌ای به اندازه‌ی Lua، با چاشنی‌ای از Erlang و پیچیده در نحوه‌ی نگارشی آشنا و مدرن تصور کنید.

  • کوچک. ماشین مجازی زیر ۴٬۰۰۰ نقطه‌ویرگول است: کدی C خوانا و با کامنت‌هایی عاشقانه.

  • سریع. یک کامپایلر هوشمند تک‌مرحله‌ای، بایت‌کدی فشرده و کارآمد تولید می‌کند.

  • کلاس‌محور. کلاس‌ها و اشیاء در قلب ماجرا هستند.

  • هم‌روند. فیبرهای سبک‌وزن در خود زبان تعبیه شده‌اند.

  • اسکریپت‌نویسی. قابل جاسازی، بدون وابستگی، کتابخانه‌ای استاندارد و کوچک، و یک API آسان برای زبان C.

ماشین مجازی

قلب Wren ماشین مجازی آن است. ماشین مجازی Wren هسته‌ی زبان است و همه‌ی کد منبع Wren را اجرا می‌کند. این ماشین فقط یک کتابخانه است، نه یک برنامه‌ی مستقل. طوری طراحی شده که در یک برنامه‌ی میزبان بزرگ‌تر جاسازی شود.

Wren را می‌توانید جاسازی‌شده در پروژه‌هایی مثل این‌ها پیدا کنید:

  • TIC-80 - یک کامپیوتر خیالی برای ساختن، بازی کردن و به‌اشتراک‌گذاری بازی‌های کوچک (مشابه PICO8).
  • DOME - یک چارچوب چندسکویی برای ساخت بازی.
  • luxe - یک موتور بازی چندسکویی و سریع برای ساخت بازی‌ها.
  • Wren Console - یک REPL و CLI برای Wren که عمدتاً خودش با Wren نوشته شده است.

حتی می‌توانید Wren را داخل پروژه‌های خودتان جاسازی کنید. برای مقاصد Exercism، برنامه‌ی میزبانی که از آن استفاده می‌کنیم Wren Console است؛ این به ما اجازه می‌دهد اسکریپت‌های Wren خود را از ترمینال اجرا و آزمایش کنیم.

چرا Wren؟

Wren در ابتدا توسط Bob Nystrom، نام آشنای کتاب Crafting Interpreters، ساخته شد. او بیش از چند زبان را در کارنامه دارد، اما به‌طور مشخص توضیح می‌دهد چه چیزی به ساخت Wren انجامید:

چند زبان اسکریپت‌نویسی برای جاسازی در برنامه‌ها وجود دارد. Lua اصلی‌ترین آن‌هاست. TCL هم قبلاً بود. Guile هم هست، JavaScript روزبه‌روز بیشتر، و بعضی برنامه‌ها Python را جاسازی می‌کنند. من خودم قبلاً بازی می‌ساختم، پس وقتی می‌گویم «اسکریپت‌نویسی»، ذهنم به «اسکریپت‌نویسی بازی» می‌رود.

Lua زبان خوبی است: کوچک، ساده و سریع. اما، و این را به‌عنوان انتقاد نمی‌گویم، اگر به زبان‌هایی مثل C++ و Java عادت داشته باشید، کمی عجیب هم هست. نحوه‌ی نگارشش فرق می‌کند. معناشناسی‌اش، مخصوصاً مدل شیء، غیرمعمول است. هر کسی می‌تواند به اندیس‌گذاری از ۱ عادت کند، اما مواردی مثل «متاتیبل» واقعاً نشان می‌دهند که اشیاء بعدها به Lua چسبانده شده‌اند.

به نظرم جا برای زبانی هست که به سادگی Lua باشد، اما برای کسی با پیشینه‌ی شیءگرایی طبیعی به نظر برسد. Wren تلاش من برای همین است.

امتحانش کنید

می‌توانید یک آزمایش سریع همین داخل مرورگر وب خود انجام دهید (بدون نیاز به نصب). اگر می‌خواهید Wren را در یک رابط کاربری شیک امتحان کنید، شاید بد نباشد نگاهی به Wren Playground بیندازید.