Lux: زبان فانکشنالی با الهام از Haskell ،Clojure و ML که روی JVM کار می‌کند

Lux: زبان فانکشنالی با الهام از Haskell ،Clojure و ML که روی JVM کار می‌کند

Lux همانند Lisp روی ماشین مجازی جاوا (JVM) اجرا می‌شود اما با وعدهٔ قدرت و انعطاف‌پذیری بیشتر نسبت به دیگر زبان‌های برنامه‌نویسی در اختیار دولوپرها قرار گرفته است. این زبان ارائه شده تا اهدافی که زبان‌های مشابه در رسیدن به آن‌ها ناتوان بوده‌اند را برآورده سازد.

ایده گرفتن از انواع زبان‌های برنامه‌نویسی مختلف
دولوپرهای زبان برنامه نویسی Lux از سه منبع اصلی الهام گرفته‌اند که عبارتند از Haskell ،Clojure و ML اما در عین حال Lux با هر سهٔ آن‌ها متفاوت است. Clojure زبانی همچون Lisp‌ است که روی JVM اجرا می‌شود و منبع مهمی برای الهام گرفتن بوده است؛ البته Clojure مانند بسیاری از زبان‌های دیگر که از Lisp مشتق شده‌اند، دینامیک است ولی Lux زبانی استاتیک است که انتخاب چنین سیاستی در طراحی این زبان، باعث کاهش باگ‌ها و بهبود پرفورمنس شده است (زبان‌های دینامیک، دیتاتایپ‌های موجود در برنامه را در زمان اجرا به آن‌ها اختصاص می‌دهد و در آن‌ها نیازی به تعریف دیتاتایپ نیست که به عنوان مثال، زبان‌های اسکریپتی مانند روبی و پایتون از این دسته هستند. در زبان‌های استاتیک، دیتاتایپ (نوع داده) باید صریحاً مشخص شده باشد و این زبان‌ها در زمان کامپایل، به بررسی انواع داده‌‌ها می‌پردازند و در صورت بروز خطا، از کامپایل جلوگیری می‌کنند).

Lux همانند برخی زبان‌های دینامیک، این انعطاف‌پذیری را دارا است که برنامه‌نویسان بتوانند دیتاتایپ جدیدی بسازند؛ علاوه بر این، زبانی فانکشنال مانند Haskell شامل کلاس تایپ‌ها است اما Lux قصد دارد از این‌گونه محدودیت‌ها کمتر استفاده کند. برطرف کردن همهٔ محدودیت‌ها به صورت نِیتیو در خود این زبان وجود دارد و نیازی برای به‌کارگیری هیچ ترفند و هَکی نیست.

زبان‌های شبه‌ لیسپ (Lisp-like)، این امکان را به دولوپر می‌دهند که اصطلاحاً Metaprogramming انجام دهد؛ در این روش، برنامه‌نویس می‌تواند اقدام به تغییر رفتار زبان برنامه‌نویسی خود کند یا کدی بنویسد که خود آن، می‌تواند کدهای دیگری تولید کند. Lux این کار را از طریق ماکروها امکان‌پذیر می‌کند.

امکانات مدرن یک‌جا جمع می‌شوند
ویژگی‌های Lux فقط محدود به دنیای Lisp نیست؛ زبان‌های برنامه‌نویسی مدرنی همچون Go از امکانات ساده‌ای برای اجرای Concurrency (کانکارنسی یا هم‌زمانی) برخوردارند. Lux هم قول استفاده از این ویژگی‌ها را در آینده داده است اما به لطف بهره‌مندی از Software Transactional Memory یا به اختصار STM، چندین پروسهٔ مجزا می‌توانند به روشی که دیتابیس‌ها داده‌های خود را کنترل می‌کنند، به حافظه دسترسی داشته باشند (ویژگی‌هایی مانند STM برای دولوپرهایی که به زبان‌های فانکشنال تمایل دارند جالب خواهد بود؛ اما هنوز مشخص نیست STM چه تأثیری روی اپلیکیشن‌هایی که با Lux نوشته شده‌اند، خواهد داشت).

Lux نیز درست مانند Clojure به خاطر اجرا روی JVM مزایایی دارد؛ به دلیل استفادهٔ گسترده از JVM، طبیعتاً این زبان نیز هرکجا که JVM باشد، سروکله‌اش پیدا می‌شود. به هر حال Lux در اوایل زندگی خود به سر می‌برد و سازندگانش از قبل، آموزشی به اندازهٔ یک کتاب دربارهٔ زبان لوکس آماده کرده‌اند که در آن مثال‌های بی‌شماری دربارهٔ طرز استفاده از ویژگی‌های مختلف وجود دارد.

نسخه‌های جدیدتر این زبان شامل پشتیبانی آزمایشی از اندروید نیز می‌شود و تعداد زیادی ویژگی جدید به لایبرری استاندارد این زبان افزوده شده است که این تغییرات شامل پشتیبانی از JSON و Regex است که باعث می‌شود این زبان کمتر تازگی داشته باشد و برای توسعهٔ نرم‌افزارهای دنیای واقعی مفیدتر واقع شود (برای آشنایی بیشتر با مفهوم Regex، به مقالهٔ راهنمای رگولار اکسپرشن (Regular Expression) یا ریجکس (Regex) برای برنامه نویسان مبتدی مراجعه نمایید.)



مرتضی صمدی