انتشار زبان برنامه نویسی Haxe 4.0

در دسترس انتشار جعبه ابزار Haxe 4.0که شامل زبان برنامه نویسی چند پارادایم سطح بالا به همین نام با تایپ قوی، کامپایلر متقابل و کتابخانه استاندارد توابع است. این پروژه از ترجمه به C++، HashLink/C، JavaScript، C#، Java، PHP، Python و Lua و همچنین کامپایل به JVM، HashLink/JIT، Flash و Neko بایت کد با دسترسی به قابلیت های بومی هر پلتفرم هدف پشتیبانی می کند. کد کامپایلر توزیع شده توسط تحت مجوز GPLv2، و یک کتابخانه استاندارد و یک ماشین مجازی توسعه یافته برای Haxe نکو تحت مجوز MIT

زبان است بیان محور با تایپ قوی مفاهیم برنامه نویسی شی گرا، عمومی و کاربردی پشتیبانی می شوند.
نحو Haxe نزدیک به ECMAScript و گسترش می یابد ویژگی‌های آن مانند تایپ استاتیک، استنتاج خودکار، تطبیق الگو، ژنریک، حلقه‌های مبتنی بر تکرار، ماکروهای AST، GADT (انواع داده‌های جبری عمومی)، انواع انتزاعی، ساختارهای ناشناس، تعاریف آرایه‌های ساده، عبارات کامپایل شرطی، پیوست کردن ابرداده به فیلدها. ، کلاس ها و عبارات، درون یابی رشته ای ('My name is $name')، نوع پارامترها ("New Main‹String›('foo')") و خیلی بیشتر.

آزمون کلاس {
تابع استاتیک main() {
افراد var = [
"الیزابت" => "برنامه نویسی"،
"Joel" => "طراحی"
];

برای (نام در people.keys()) {
var job = افراد[نام];
trace('$name برای امرار معاش $کار می کند!');
}
}
}

اصلی نوآوری ها نسخه 4.0:

  • نحو جدید برای تعیین نوع تابع "(name:String, age:Int)->Bool" یا "(String, Int)->Bool" به جای "String->Int->Bool".
  • نحو تابع پیکان "(a, b) -> a + b" به جای "function(a, b) return a + b" است.
  • محافظت در برابر مشکلات مربوط به استفاده از مقادیر Null (ویژگی آزمایشی، به صورت اختیاری برای فیلدها، کلاس ها یا بسته های خاص فعال می شود).
  • کلمه کلیدی "نهایی" برای فیلدهای کلاس و متغیرهای محلی است که تغییر ناپذیر هستند. "نهایی" همچنین می تواند برای تعریف توابع استفاده شود تا از رد شدن آنها توسط وراثت جلوگیری شود و برای کلاس ها/اینترفیس هایی که نمی توانند ارث بری شوند.
  • پشتیبانی استاندارد یونیکد برای نوع پایه "String" در همه اهداف کامپایل به جز Neko.
  • مفسر داخلی از ابتدا بازنویسی شده است که اکنون تحت نام آن قرار گرفته است اوال. به لطف مفسر جدید، اسکریپت ها و ماکروها بسیار سریعتر اجرا می شوند. حالت اشکال زدایی تعاملی پشتیبانی می شود.
  • سیستم هدف جدید برای کامپایل (هدف) هش لینک - یک زمان اجرا با کارایی بالا که به طور خاص برای Haxe طراحی شده است، از کامپایل کردن بایت کد برای JIT یا C پشتیبانی می کند، ادغام آسان با C و همچنین دسترسی به انواع عددی و اشاره گرهای سطح پایین دارد.
  • هدف جدید JVM - به شما امکان می دهد با پرش از مرحله تدوین کد جاوا با اضافه کردن پرچم "-D jvm" هنگام هدف گیری در جاوا، بایت کد jvm تولید کنید.
  • توانایی استقرار درون خطی در نقطه فراخوانی توابع یا سازنده ها، حتی اگر به عنوان چنین تعریف نشده باشند.
  • امکان درج پسوندهای ایستا هنگام اعلام یک نوع (مانند "enum") با استفاده از "@:using(path.ToExtension)".
  • انواع چکیده اکنون از یک نسخه "set" از عملگر "@:op(a.b)" برای بارگذاری مجدد عبارات "obj.foo = bar" پشتیبانی می کنند.
  • نحو حلقه "for" اکنون از تکرار کلید-مقدار پشتیبانی می کند: "for (key => value in collection) {}".
  • پشتیبانی از استفاده از نشانه گذاری xml مانند در عبارات: "var a = ‹hi/›;". در حال حاضر این ویژگی فقط برای تجزیه با ماکروها در دسترس است و در مرحله طراحی است.
  • نحو برای فیلدهای اختیاری در نماد "کامل" انواع ساختارهای ناشناس این است: "{ var ?f:Int; }" (یک جایگزین برای کوتاه "{ ?f:Int }").
  • مقادیر Enum اکنون می توانند مقادیر پیش فرض برای آرگومان های تابع باشند: "function foo‹T›(گزینه:Option‹T› = None)".
  • دستور "enum abstract Name(BasicType) {}" دیگر به پیشوند "@:" در "enum" نیاز ندارد.
  • شماره گذاری خودکار برای شمارش های انتزاعی:

    enum abstract Foo(Int) {
    var A; // 0
    var B; // 1
    }
    نوار انتزاعی enum (رشته) {
    var A; // "آ"
    var B; // "B"
    }

  • کلمه کلیدی "خارجی" دیگر نیازی به استفاده از پیشوند "@:" ندارد.
  • گزینه " را حذف کردپیاده سازی می کند Dynamic" برای دسترسی به فیلدهای کلاس از طریق رشته ها. برای کلاس های خارجی یا از طریق پیاده سازی با یک نوع انتزاعی در دسترس است.
  • دستور "A & B" برای تقاطع نوع اضافه شده است، که در حال حاضر فقط برای ساختارهای ناشناس و محدودیت های پارامتر نوع اعمال می شود. نحو محدودیت قدیمی حذف شده است.
  • ایجاد نمونه های خالی «Map» از طریق نحو «var map:Map‹Int, String› = []; شبیه به یک آرایه
  • ساختار داده "haxe.ds.ReadOnlyArray" اضافه شد.
  • اکنون ابرداده ها می توانند فضاهای نام ("@:prefix.name function() {…}") داشته باشند. به طور مشابه با تعاریف: "#if (some.flag ... #end".
  • پروتکل سرویس جدید برای IDE های مورد استفاده در افزونه برای VSCode.
  • تعاریف خارجی به روز شده (خارجی) برای API های وب و موارد گمشده اضافه شده است.

منبع: opennet.ru

اضافه کردن نظر