ساخت زبان Functional جدید با الهام از Haskell ،Clojure و ML که روی JVM کار می‌کند!

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

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

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

زبان‌های Lisp مانند این امکان را به دولوپر می‌دهند که «Metaprogramming» انجام دهد؛ در این روش، برنامه‌نویس می‌تواند اقدام به تغییر رفتار زبان برنامه‌نویسی خود کند یا کدی بنویسد که خود آن، می‌تواند کدهای دیگری تولید کند. Lux این کار را از طریق ماکروهای Lisp مانند امکان‌پذیر می‌کند اما کامپایلر خودش را نیز به عنوان یک آبجکت (شیٔ) درون زبان برنامه‌نویسی قرار می‌دهد. به این ترتیب، با استفاده از Lux می‌توان مواردی مثل سیستم‌های تطبیق الگوی اختصاصی ساخت که در صورت نیاز می‌توانند توسط کاربر بازنویسی شوند.

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

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

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

New functional language for JVM builds on Haskell, Clojure, ML

0


مرتضی صمدی

فارغ‌التحصیل رشتهٔ نرم‌افزارم و موفق شدم تا‌به‌حال چندتا پروژهٔ نصفه‌و‌نیمه رو ناموفق رها کنم! جستجوگر خوبی هستم، طوری که تا‌به‌حال مشخصات بیشتر سخت‌افزارهای جدید مثلا اسمارتفون‌ها، کنسول‌ها و لپ‌تاپ‌ها رو میدونم؛ اطلاعات سیستم‌عامل‌های جدید مثل لینوکس، ویندوز و مک رو می‌خونم و امتحان می‌کنم، البته اگه بتونم. بازی‌های جدید رو میشناسم ولی بازی نمیکنم (چراش رو نمیدونم) و عاشق اینم که یک بار اتومبیل‌های قدیمی مثل فورد ماستنگ یا کامارو اس‌اس رو برونم.






از طریق این فرم، می توانید بدون ثبت نام نظر دهید و یا اگر قبلا ثبت نام کرده اید، با ورود ناحیه ی کاربری می توانید علاوه بر ثبت نظر، به مدیریت نظرات خود نیز بپردازید.
(فیلد اجباری)
(فیلد اجباری)
(فیلد اجباری)
(فیلد اجباری)