انتشار زبان برنامه نویسی Crystal 1.5 منتشر شده است که توسعه دهندگان آن در تلاش هستند تا راحتی توسعه در زبان روبی را با عملکرد بالای برنامه کاربردی مشخصه زبان C ترکیب کنند. سینتکس Crystal نزدیک به Ruby است، اما کاملاً با Ruby سازگار نیست، اگرچه برخی از برنامه های Ruby بدون تغییر اجرا می شوند. کد کامپایلر به زبان کریستال نوشته شده و تحت مجوز آپاچی 2.0 توزیع شده است.
این زبان از بررسی نوع ایستا استفاده می کند که بدون نیاز به تعیین صریح انواع متغیرها و آرگومان های متد در کد پیاده سازی شده است. برنامههای کریستال در فایلهای اجرایی کامپایل میشوند و ماکروها ارزیابی میشوند و کد در زمان کامپایل تولید میشوند. در برنامه های Crystal امکان اتصال binding های نوشته شده به زبان C وجود دارد. موازی سازی اجرای کد با استفاده از کلمه کلیدی "spawn" انجام می شود، که به شما امکان می دهد یک کار پس زمینه را به صورت ناهمزمان، بدون مسدود کردن رشته اصلی، در قالب رشته های سبک وزن به نام فیبر اجرا کنید.
کتابخانه استاندارد مجموعه بزرگی از توابع رایج از جمله ابزارهایی برای پردازش CSV، YAML و JSON، مؤلفههایی برای ایجاد سرورهای HTTP و پشتیبانی WebSocket را ارائه میکند. در طول فرآیند توسعه، استفاده از دستور "کریستال بازی" راحت است که یک رابط وب (به طور پیش فرض localhost:8080) برای اجرای تعاملی کد در زبان کریستال ایجاد می کند.
تغییرات اصلی:
- کامپایلر یک بررسی برای مطابقت نام آرگومان ها در اجرای یک متد انتزاعی و در تعریف آن اضافه کرده است. در صورت عدم تطابق نام، اکنون یک اخطار صادر می شود: کلاس انتزاعی FooAbstract abstract def foo(شماره: Int32) : کلاس پایانی Nil Foo < FooAbstract def foo(نام: Int32) : Nil p نام انتهای 6 | def foo(name : Int32) : Nil ^— هشدار: پارامتر موقعیتی 'name' مطابق با پارامتر 'number' روش لغو شده FooAbstract#foo(شماره: Int32) است که نام دیگری دارد و ممکن است بر انتقال آرگومان نامگذاری شده تأثیر بگذارد.
- وقتی آرگومان را به یک متد تایپ نشده به مقدار یک متغیر اختصاص می دهیم، آرگومان اکنون به نوع آن متغیر محدود می شود. class Foo @x: Int64 def initialize(x) @x = x # پارامتر x تایپ خواهد شد @x end end
- به شما امکان می دهد حاشیه نویسی را به پارامترهای روش ها یا ماکروها اضافه کنید. def foo(@[MaybeUused] x); پایان # باشه
- پشتیبانی برای استفاده از ثابت ها به عنوان شاخص و نام در تاپل ها اضافه شده است. KEY = "s" foo = {s: "String", n: 0} foo[KEY].size را قرار می دهد
- روشهای جدید File#delete? به File API برای حذف فایلها و فهرستها اضافه شدهاند. و Dir#delete?، که اگر فایل یا دایرکتوری موجود نباشد، false را برمیگردانند.
- حفاظت از روش File.tempfile تقویت شده است، که اکنون به کاراکترهای پوچ در خطوطی که نام فایل را تشکیل می دهند اجازه نمی دهد.
- متغیر محیطی NO_COLOR اضافه شد که برجسته کردن رنگ را در خروجی کامپایلر و مفسر غیرفعال میکند.
- کار در حالت مترجم به طور قابل توجهی بهبود یافته است.
منبع: opennet.ru