Xaks - Haxe

Xaks
Haxe logo.svg
ParadigmaKo'p paradigma
TuzuvchiHaxe Foundation
Birinchi paydo bo'ldi2005; 15 yil oldin (2005)
Barqaror chiqish
4.1.4[1] / 2020 yil 11 sentyabr; 2 oy oldin (2020-09-11)
Matnni yozishStatik, dinamik izohlar orqali, nominal
Amalga oshirish tiliOCaml
PlatformaARM; IA-32, x86-64
OSAndroid, iOS; Linux, macOS, Windows
LitsenziyaGPL 2.0, kutubxona: MIT
Fayl nomi kengaytmalari.hx, .hxml
Veb-saythaxe.org
Ta'sirlangan
EcmaScript, OCaml, Java,

Xaks ochiq manbadir[2] yuqori darajadagi o'zaro faoliyat platforma dasturlash tili va kompilyator turli xil dasturlar va manba kodlarini ishlab chiqarishi mumkin hisoblash platformalari bitta kod bazasidan. Bu bepul va ochiq manbali dasturiy ta'minot, ostida chiqarilgan MIT litsenziyasi. In yozilgan kompilyator OCaml, ostida chiqarilgan GNU umumiy jamoat litsenziyasi (GPL) 2-versiyasi.

Haxe funktsiyalar to'plami va standart kutubxonani o'z ichiga oladi[3] qo'llab-quvvatlanadi barcha platformalar bo'ylab, kabi raqamli ma'lumotlar turlari, torlar, massivlar, xaritalar, ikkilik, aks ettirish, matematik, http, fayl tizimi va keng tarqalgan fayl formatlari. Haxe shuningdek, har bir kompilyator maqsadi uchun platformalarga xos API-larni o'z ichiga oladi.[4] Xa, OpenFL va Heaps.io bir kod bazasidan ko'p platformali tarkib yaratishga imkon beruvchi mashhur Haxe ramkalari.[5]

Xaks kelib chiqqan[6] qo'llab-quvvatlash g'oyasi bilan mijoz tomoni va server tomoni bitta tilda dasturlash va ular orasidagi aloqa mantig'ini soddalashtirish. Xaks tilida yozilgan kod bo'lishi mumkin tuzilgan ichiga JavaScript, C ++, Java, JVM, PHP, C #, Python, Lua[7] va Node.js.[8] Haxe to'g'ridan-to'g'ri kompilyatsiya qilishi ham mumkin SWF, HashLink va Neko, bayt kodi va shuningdek ishlaydi talqin qilingan rejim.[9]

Haxe mavjud kutubxonalarning tipik ma'lumotlarini o'z ichiga oladigan eksternlarni (aniqlovchi fayllarni) qo'llab-quvvatlaydi. C ++ sarlavha fayllari mavjud tuzilishini tasvirlab bera oladi ob'ekt fayllari. Bu fayllarda belgilangan qiymatlarni xuddi statik ravishda yozilgan Haxe ob'ektlari kabi ishlatishga imkon beradi. Externs-dan tashqari, har bir platformaning asl qobiliyatiga kirish uchun boshqa echimlar mavjud.

Ko'pchilik mashhur IDElar va manba kodi muharrirlari bor Haxe-ni rivojlantirish uchun qo'llab-quvvatlash.[10] Haxe Foundation tomonidan hech qanday ishlab chiqish muhiti yoki vositalar to'plami rasman tavsiya etilmaydi VS kodi, IntelliJ IDEA va HaxeDevelop Haxe rivojlanishini eng ko'p qo'llab-quvvatlaydi. Ning asosiy funktsiyalari sintaksisni ajratib ko'rsatish, kodni to'ldirish, qayta ishlash, disk raskadrovka va boshqalar har xil darajada mavjud.

Tarix

Haxening rivojlanishi 2005 yil oktyabrda boshlangan. Birinchisi beta-versiyasi 2006 yil fevral oyida chiqarildi. Haxe 1.0 2006 yil aprelida qo'llab-quvvatlanib chiqarildi Adobe Flash, JavaScript va Neko dasturlar. PHP-ni qo'llab-quvvatlash 2008 yilda, C ++ esa 2009 yilda qo'shilgan. C # va Java kabi ko'plab platformalar 2012 yilda kompilyatorni qayta tiklash bilan qo'shilgan.

Haxe Nikolas Kannas va boshqa ishtirokchilar tomonidan ishlab chiqilgan va dastlab uning nomi berilgan haXe[11] chunki u qisqa, sodda va har qanday yangi texnologiyani muvaffaqiyatli amalga oshirish uchun muallif hazil bilan ta'kidlagan "ichida X" bor edi.[12]

Haxe - ochiq manbaning davomchisi ActionScript 2 kompilyator MTASC,[13] shuningdek, Nikolas Kannas tomonidan qurilgan va ostida chiqarilgan GNU umumiy jamoat litsenziyasi versiya 2 yoki undan keyingi versiyasi.

Tuzuvchi

Haxe tili kompilyatsiya qilishi mumkin bayt kodi to'g'ridan-to'g'ri bajarilishi mumkin virtual mashinalar u nishonga oladi. U kompilyatsiya qilishi mumkin manba kodi yilda C ++, JavaScript, PHP, C #, Java, Python va Lua. Xaksning tarjimoni ham bor baholash.[14] Xuddi shu tarjimon shuningdek, makroslarni ishga tushirish uchun kompilyatsiya vaqtidan foydalanadi, bu esa o'zgartirishga imkon beradi AST.

Bir nechta manba kodlarini kompilyatsiya qilishning ushbu strategiyasi ilhomlangan bir marta yozing, har qanday joyga yuguring paradigma. Shuningdek, u dasturchiga ish uchun eng yaxshi platformani tanlashga imkon beradi. Odatda Haxe dasturlari barcha platformalarda bir xil ishlaydi, ammo ishlab chiquvchilar platformaga xos kodni va foydalanishni belgilashlari mumkin shartli kompilyatsiya uning boshqa platformalarda to'planishiga yo'l qo'ymaslik.

Haxe kompilyatori optimallashtiruvchi kompilyator va foydalanadi maydon va funktsiya chizig'i, quyruq rekursiyasini yo'q qilish, doimiy katlama, tsiklni ochish va o'lik kodni yo'q qilish Tuzilgan dasturlarning ishlash vaqtini optimallashtirish uchun (DCE).[15] Haxe kompilyatori obunani taklif qiladi xavfsizlik, nol qiymatlari uchun kompilyatsiya vaqtini tekshiradi.

Maqsadlar

Haxe-da, qo'llab-quvvatlanadigan platformalar "maqsadlar" deb nomlanadi, ular quyidagi modullardan iborat:

  • Tegishli kodni yaratish uchun mas'ul bo'lgan kompilyator-backendlar.
  • Asosiy tilni qo'llab-quvvatlash doirasidan tashqariga chiqadigan ish vaqti uchun maxsus API-lar (platforma-maqsadlar).

Haxe-da quyidagi jadval platforma va tilni qo'llab-quvvatlashni hujjatlashtiradi. Haxe tili ishlab chiquvchilarga ko'plab platforma xususiyatlaridan foydalanish imkoniyatini beradi, ammo Haxe to'liq xususiyatli dvigatel emas, ularga ma'lum platformalar uchun tarkib yaratishni ta'minlaydigan ramkalar kerak bo'lishi mumkin.

Tuzuvchi maqsadiChiqishPlatformaFoydalanishHaxe versiyasidan beri
JavaScript[3]manbaHTML5, NodeJS, PhoneGapServer, ish stoli, brauzer, mobil2006
C ++manbaWindows, Linux, MacOS, Android, iOS, kaft, WebOSServer, ish stoli, mobil, CLI, o'yin konsollari2009 (2.04)
PHP[3]manbaPHPServer2008 (2.0)
C #[3]manba.NET FrameworkServer, ish stoli, mobil2012 (2.10)
Java[3]manbaJavaServer, ish stoli2012 (2.10)
JVM[3]bayt kodiJava virtual mashinasiServer, ish stoli2019 (4.0)
Python[3]manbaPythonCLI, veb, ish stoli2014 (3.2)
Lua[3]manbaLuaCLI, veb, ish stoli, mobil2016 (3.3)
Neko[3]bayt kodiNekoVMServer, ish stoli, CLI2005
Flash / SWF[3]bayt kodiAdobe Flash Player 9+, Adobe AIR, TamarinIsh stoli, brauzer, server2005
HashLink[3]bayt kodiHashLink VM yoki HL / C (C fayliga kompilyatsiya qilish)Server, ish stoli, mobil, o'yin konsollari (C eksporti)2016 (3.4)

Haxe versiyasi 1.12 (2007) dan beri ActionScript 3 manba maqsadi (Adobe FlashPlayer uchun), bu 4.0 versiyasida Haxe-dan o'chirildi.

Xaksning afzalliklari

  • Xuddi shu til yordamida bir nechta platformalar va qurilmalarni maqsadga yo'naltirish qobiliyati
  • To'liq yozilgan koddan foydalanish qobiliyati
  • Haxe tili yordamida amalga oshiriladigan makroslardan foydalanish (sintaksis o'zgarishi)[16]
  • Kabi til xususiyatlari qo'shildi kengaytirish usullari va funktsional dasturlash
  • Haxe dasturlarining ishlash vaqti qo'lda yozilgan manbalar bilan taqqoslanadigan tezlikda.[17]

Til

Haxe - bu umumiy maqsadlar uchun mo'ljallangan til ob'ektga yo'naltirilgan dasturlash, umumiy dasturlash va turli xil funktsional dasturlash konstruktsiyalar. Kabi xususiyatlar takrorlash, istisnolar va kodni aks ettirish til va kutubxonalarning ichki funktsiyalari. Dasturlash tillari orasida odatiy bo'lmagan Haxe ikkalasi ham tip tizimini o'z ichiga oladi kuchli va dinamik. Tuzuvchi to'g'ridan-to'g'ri foydalanadigan turlarni tekshiradi xulosa chiqarish va kompilyatsiya vaqtidagi xatolarga yo'l qo'ying, lekin u shuningdek dasturchiga tekshirishni chetlab o'tishga va maqsadli platformaning dinamik ishlashiga ishonishga imkon beradi. Barcha mahalliy maqsadli API-lardan foydalanish mumkin.

Tizim turi

Haxe murakkab va moslashuvchan tipdagi tizimga ega. Uning turlari - sinflar, interfeyslar, funktsional usul turlari, noma'lum turlari, ma'lumotlarning algebraik turlari (ADTlar, chaqiriladi enum va Xakda) va mavhum turlari. Parametrik polimorfizm uchun tilni qo'llab-quvvatlaydigan sinflar, ADTlar va funktsiyalar turlari bilan mumkin umumiy dasturlash turini o'chirishga asoslangan. Bunga qo'llab-quvvatlash kiradi dispersiya yilda polimorfik funktsiyalar, bo'lmasa ham turi konstruktorlari.

The tizim turi bu statik uchun izohlar bo'lmasa dinamik yozish mavjud bo'lib, ularni qo'llab-quvvatlovchi maqsadlardan foydalanish uchun. Turini tekshirish quyidagilar nominal terish bundan mustasno noma'lum turlari qayerda tizimli yozish o'rniga ishlatiladi. Nihoyat, xulosa chiqarish qo'llab-quvvatlanadi, bu esa o'zgaruvchan deklaratsiyalarga imkon beradi izohlarni yozing.

Modullar va nomlar

Barcha Haxe kodlari modullarda joylashtirilgan bo'lib, ularga yo'llar yordamida murojaat qilinadi. Aslida, har biri .hx fayl bir nechta turlarni o'z ichiga olishi mumkin bo'lgan modulni ifodalaydi. Masalan, turini yaratish uchun A paketda my.pack ko'rsatilganidek, papka tuzilishi bo'lishi kerak mypack va fayl bo'lishi mumkin A.hx papkada to'plami.

 // my / pack / A.hx faylini yuboringpaket mening.to'plami;sinf A {}

Boshqa modullarda boshqa turlarini qo'yish orqali import qilish mumkin Import paket ta'rifi ostidagi bayonotlar, masalan. import my.pack.A;Modul quyidagilar kabi bir nechta turlarni o'z ichiga olishi mumkin. Ushbu moduldan bir vaqtning o'zida bitta turini import qilish mumkin import my.pack2.A;. Bir turi bo'lishi mumkin xususiy, bu holda unga faqat o'z ichiga olgan modul kira oladi.

paket mening.paket2;typedef A = {a:Ip}xususiy typedef B = {b:Ip}

Sinflar

Sinflar (kalit so'z sinf) Haxe-da Java yoki TypeScript-ga o'xshash. Ularning maydonlari navbati bilan har bir statik yoki har bir misol uchun usullar, o'zgaruvchilar yoki xususiyatlar bo'lishi mumkin. Haxe aksessuarlarni qo'llab-quvvatlaydi jamoat va xususiyva izohlar yordamida belgilanadigan kirishni boshqarish uchun yanada rivojlangan usullar. Kalit so'z yordamida usullar va doimiy o'zgaruvchilar o'zgarishi mumkin mos ravishda. Maydonlarni quyidagicha belgilash mumkin final zudlik bilan yoki konstruktorda initsializatsiya qilinishi kerak bo'lgan va funktsiyaga yozilishi mumkin bo'lmagan doimiylikni e'lon qilish final subklasslarda bekor qilinmaydigan sifatida belgilanadi.

Interfeyslar Haxe-da, masalan, Java-ga o'xshash.

interfeys ICreature {    jamoat var tug'ilish:Sana;    jamoat var ism:Ip;    jamoat funktsiya yoshi():Int;}sinf Pashsha asboblar ICreature {    jamoat var tug'ilish:Sana;    jamoat var ism:Ip;	    jamoat funktsiya yoshi():Int qaytish Sana.hozir().getFullYear() - tug'ilish.getFullYear();}

Generika

Haxe qo'llab-quvvatlaydi umumiy dasturlash. Quyida .ga misol keltirilgan identifikatsiya qilish funktsiyasi.

funktsiya shaxsiyat<T>(arg:T):T {	qaytish arg;}

Sanab o'tilgan turlari

Sanab o'tilgan turlari tilning muhim xususiyati; ular tip parametrlariga ega bo'lishi va rekursiv bo'lishi mumkin.[18] Ular uchun asosiy yordam ko'rsatiladi ma'lumotlarning algebraik turlari qo'shilishiga imkon beruvchi mahsulot turlari, shunga o'xshash tarzda Xaskell va ML. A almashtirish ifoda qo'llanilishi mumkin naqshlarni moslashtirish murakkab dasturlash muammolarini oqilona hal qilishga imkon beradigan enum qiymatiga:

enum Rang {	qizil;	yashil;	ko'k;	rgb(r:Int, g:Int, b:Int);}sinf Ranglar {	statik funktsiya toInt(v:Rang):Int {		qaytish almashtirish v {			ish qizil: 0xFF0000;			ish yashil: 0x00FF00;			ish ko'k: 0x0000FF;			ish rgb(r, g, b): (r << 16) | (g << 8) | b;		}	}	statik funktsiya validCalls() {		var qizil rang = toInt(Rang.qizil);		var rgbint = toInt(Rang.rgb(100, 100, 100));	}}

Parametrik enum turlariga Haxe standart kutubxona turlari Option misol bo'la oladi[19] va yo:[20]

enum Variant<T> {    Biroz(v:T);    Yo'q;}enum Yoki<L, R> {    Chapda(v:L);    To'g'ri(v:R);}

Haxe ham qo'llab-quvvatlaydi ma'lumotlarning umumlashtirilgan algebraik turlari (GADTlar).[21][22]

Anonim turlari

Anonim turlar ularning tuzilishini aniq belgilash orqali, matematik yozuvlar asosida tipni namoyish etish sintaksisidan foydalangan holda aniqlanadi. Ular funktsiya argumentlari uchun strukturaviy yozishni amalga oshirish uchun ishlatilishi mumkin (pastga qarang) va kalit so'z bilan taxallus berilishi mumkin typedef:

typedef AliasForAnon = { a:Int, b:Ip, v:Float->Bekor };

Funktsiya turlari

Funksiyalar Haxe-da birinchi darajali qiymatlardir. Ularning turi ko'plab funktsional tillarda keng tarqalgan argument turlari va argument turlari (lar) va qaytish turlari o'rtasida o'qlar yordamida belgilanadi. Biroq, shunga o'xshash taniqli misollardan farqli o'laroq Xaskell yoki ML tillar oilasi, barcha funktsiyalar bir xil funktsiyalar emas (faqat bitta argumentli funktsiyalar) va Haxe-da funktsiyalar bo'lishi mumkin emas qisman qo'llaniladi sukut bo'yicha. Shunday qilib, quyidagi turdagi imzolar yuqorida tillarga qaraganda turli xil semantikaga ega. Turi F1 funktsiyasidir Ip argument sifatida va turdagi qiymatni qaytaradi Float.

Turlari F1 vaF2 faqat bitta turni belgilang, bundan mustasno F2 tugatish va hujjatlar uchun foydali bo'lgan belgilangan parametrdan foydalanadi.

Turlari F4 va F5 bir xil turni bildiradi. Ikkalasi ham turdagi ikkilik funktsiyani qaytaradigan ikkilik funktsiyalardir F3. Uchun F5 funktsiya turi ichida funktsiya turini e'lon qilish uchun sintaksis ishlatiladi.

typedef F1 = Ip -> Float;typedef F2 = (matn: String) -> Float;typedef F3 = (Xol: Int, matn: satr) -> Float;typedef F4 = (Xol: Int, matn: satr) -> F3;typedef F5 = (Xol: Int, matn: satr) -> ((Xol: Int, matn: satr) -> Float);

Mavhum turlari

Haxe tipidagi tizimga so'nggi qo'shimchalar - bu kontseptsiya mavhum turlari. Haxe-da ishlatilganidek, bu odatdagidan farq qiladi mavhum turi. Ular o'lchov birliklari turlarini amalga oshirish kabi mavjud bo'lgan turlarini aniq maqsadlarda qayta ishlatishga imkon beradigan, aniq bo'lmagan konvertatsiya qilish uchun ishlatiladi. Bu bir xil turdagi qiymatlarni aralashtirish xavfini sezilarli darajada kamaytiradi, lekin turli xil ma'nolarga ega (masalan, mil ga nisbatan mil).

Quyidagi misol metrik tizim standart hisoblanadi, deb hisoblaydi, eski ma'lumotlar uchun milga o'tish zarur. Haxe avtomatik ravishda millarni kilometrlarga aylantirishi mumkin, ammo teskari emas.

mavhum Kilometr(Float) {    jamoat funktsiya yangi(v:Float) bu = v;} mavhum Milya(Float) {    jamoat funktsiya yangi(v:Float) bu = v;    @: ga jamoat mos ravishda funktsiya Kilometr():Kilometr qaytish (yangi Kilometr (bu / 0.62137));} sinf Sinov {  statik var km:Kilometr;  statik funktsiya asosiy(){    var 100 mil = yangi Milya(100);    km = 100 mil;     iz(km); // 160.935  }}

Misoldan ko'rinib turibdiki, "km = one100Miles;" topshirig'i uchun aniq konvertatsiya qilish kerak emas. to'g'ri ish qilish.

Strukturaviy yozuv

Ko'p funktsional dasturlash tillarida, tizimli yozish katta rol o'ynaydi. Dan foydalanib, Haxe uni noma'lum turlar mavjud bo'lganda ishlatadi nominativ yozuv ning ob'ektga yo'naltirilgan dasturlash, faqat nomlangan turlar ishtirok etganda. Haxe-dagi noma'lum turlar tilning yopiq interfeyslariga o'xshashdir Boring yozishga kelsak. Go interfeyslaridan farqli o'laroq, noma'lum turdan foydalanib qiymat yaratish mumkin.

sinf FooBar {	jamoat var foo:Int;	jamoat var bar:Ip;	jamoat funktsiya yangi() {		foo = 1;		bar = "2";	}	funktsiya anyFooBar(v:{foo:Int, bar:Ip})		iz(v.foo);	statik funktsiya sinov() {		var fb = yangi FooBar();		fb.anyFooBar(fb);		fb.anyFooBar({foo: 123, bar: "456"});	}}

Ichki me'morchilik

Tuzuvchi

Haxe kompilyatori bitta frontend va bir nechta backendlarga bo'linadi. Frontend an hosil qiladi mavhum sintaksis daraxti (AST) manba kodidan va tekshirishni amalga oshiradi, makro kengayish va optimallashtirish AST. Turli xil orqa tomonlar tarjima qilish qayta ishlangan ASTni manba kodiga qo'shish yoki yaratish bayt kodi, ularning maqsadlariga qarab.

Tuzuvchi yozilgan OCaml. Kodni to'ldirishni ta'minlash uchun uni server rejimida ishlatish mumkin birlashgan rivojlanish muhiti (IDE) va tezroq kompilyatsiya qilish uchun keshni saqlab turing.[23]

Haxe-ga o'tkazgichlar

Mavjud kodni ishlatishga yordam berish uchun Haxe hamjamiyati bir nechta manba kodlari konvertorlarini yaratdi.

Shuningdek qarang

Adabiyotlar

  1. ^ "Hakslarni yuklab olish ro'yxati".
  2. ^ "Ochiq kodli Haxe litsenziyasi".
  3. ^ a b v d e f g h men j k Xaks standart kutubxonasiga kirish, Haxe Docs
  4. ^ Maqsadga xos API, Haxe standart kutubxonasiga kirish, Haxe Docs
  5. ^ Doucet, Lars (2014-06-24). "Hurmatli Adobe: Haxe-ni qo'llab-quvvatlang, asboblaringizni saqlang". Gamasutra.
  6. ^ "Haxe intervyu". Io Programmo. 2009-04-01: 1-6. Iqtibos jurnali talab qiladi | jurnal = (Yordam bering)
  7. ^ "Salom Lua! - Xaks".
  8. ^ "hxnodejs".
  9. ^ "Tuzuvchi maqsadlari".
  10. ^ Haxe-ni qo'llab-quvvatlovchi IDElar ro'yxati, Haxe Foundation
  11. ^ "Nikolasning Haxe rasmiy pochta ro'yxatida imlo o'zgarishi to'g'risida e'lon qilishi".
  12. ^ "Xaks-pochta orqali yuborilgan ro'yxatdagi ism". Arxivlandi asl nusxasi 2007-03-28.
  13. ^ MTASC kompilyatori, MTASC veb-sayti
  14. ^ "Eval - yangi Haxe so'l tarjimoni".
  15. ^ "Tuzuvchi xususiyatlari".
  16. ^ "Xaksdagi makrolar".
  17. ^ Dyachenko, Vadim (2013-12-05). "On" Siz Haxe-da yaxshi HTML5 o'yinlarini qila olmaysiz"". Hayotdan keyin sariq.
  18. ^ "Enumdan foydalanish tafsilotlarini aks ettiruvchi xaks-ma'lumotnoma". Arxivlandi asl nusxasi 2012-05-11.
  19. ^ "haxe / Option.hx ishlab chiqishda · HaxeFoundation / haxe". Github.
  20. ^ "haxe / Either.hx rivojlanish jarayonida · HaxeFoundation / haxe". Github.
  21. ^ "Til xususiyatlari". Haxe - O'zaro faoliyat platformalar uchun vositalar to'plami. Haxe Foundation. Olingan 30 aprel 2015.
  22. ^ "haxe / TestGADT.hx ishlab chiqishda · HaxeFoundation / haxe". Github.
  23. ^ Server rejimining buyruq satri: haxe --wait [host:] port

Tashqi havolalar