Haxe: Platformlar Arası Geliştirmenin En İyi Saklanan Sırrı
Yayınlanan: 2022-03-11Modern programlama dili Haxe bazı çevrelerde iyi bilinir, ancak bunu okuyan birçok kişi onu hiç duymamış olacaktır. Yine de niş durumunun sizi aldatmasına izin vermeyin. 2005'te ilk ortaya çıkışından bu yana, sadık - oldukça sessiz olsa da - takipçileri tarafından savaşta test edildi. İş, oyun ve hatta akademik bağlamlarda geliştirme için pragmatik ve olgun bir özellik kombinasyonuna sahiptir.
Disney, Hasbro ve BBC Haxe kullanıyor, peki neden daha fazla geliştirici bunu duymadı? Belki de çok yönlülüğü, Haxe programlama dili için tek bir "öldürücü uygulama" olmadığı anlamına gelir.
Ya da belki de, ölmekte olan Flash platformundan bir geçiş yolu olan en eski öldürücü uygulamalarından birinin bazı yönlerden biraz niş olması nedeniyledir. Saygın gündelik oyun pazarı, Adobe'nin belirsizliğinin gölgesi altında son birkaç yıldır bocalıyor ve şimdi nihayet, Flash tabanlı herhangi bir şeyin resmi olarak 2020'ye kadar hareket etmesi gerektiği açık.
İş yazılım mühendisleri ve web geliştiricileri -aslında birçok oyun geliştiricisi de- "Flash" sesini duyabilir ve hemen sesini kapatabilir. Bu nedenle Haxe Vakfı, FlashDevelop IDE'yi alıp daha çok Haxe IDE, HaxeDevelop olarak yeniden markalaştırdı.
Ancak, özellikle de oldukça alakalı olmaya devam ettiğinde, bir çağrışımdan kurtulmak zor olabilir. Örneğin, sosyal oyunları 75 milyon kullanıcıya sahip FlowPlay, Flash'tan son iki yıllık 1.4 milyon satırlık kod geçişi için Unity ve HTML5 yerine Haxe'yi seçti. (Daha fazla ayrıntı vaka çalışmasında mevcuttur.)
Belki de Haxe Vakfı'nın oyun dışı yazılım geliştiricileri için hala çekici olsa da bunun gibi kullanım örneklerini vurgulayabilmesi zordur. Ancak bunun sizi küçük bir keşiften alıkoymasına izin vermeyin.
Haxe ile Büyük Anlaşma nedir?
Debian projesi, Haxe'yi "evrensel bir programlama dili" olarak tanımlar. Bunun birkaç yönü var.
Genel olarak, Haxe dili, (iyi) kodun yeniden kullanılması anlamına gelir . Bununla demek istediğim: Haxe kodunu birçok platformda yeniden kullanabilir, onu mevcut Haxe ve Haxe olmayan kodlarla entegre edebilirsiniz ve iyi olarak, Haxe dili, tür güvenliği gibi birçok denenmiş ve gerçek paradigmayı kullanıma sunar.
Çok yönlülük temasıyla devam edersek, bu, birkaç ana kullanım senaryosu kategorisine dönüşüyor - tabii ki Flash geçişi bir yana.
Sıfırdan platformlar arası bir uygulama veya oyun geliştirmek. Haxe, masaüstü, mobil ve web platformlarını tek dilli bir kaynak tabanından hedefleyebilir. Platformlar arası programlama dilleri yeni bir şey değil ve platformlar arası masaüstü ve mobil uygulamalar ve oyunlar için özel çözümler var. Ancak Haxe, yalnızca birden çok platformu değil, birden çok paradigmayı, örneğin HTML5 ve yerel ikili dosyaları hedefleyebilmesi anlamında biraz daha özel bir şey yapıyor.
Tek bir dil “hepsine hükmedecek”. Tolkien referansını bağışlayın, ancak tıpkı Node.js'nin bir web sitesinin ön ve arka ucunda aynı dili kullanma çağını selamlaması gibi, istemci-sunucu mimarisine benzeyen herhangi bir proje Haxe'yi her iki yarı için de kullanabilir.
Örneğin, FontStruct web uygulaması, hem ön uçta bir HTML5 tuvali üzerinde hem de arka uçta Java2D aracılığıyla çizim yapmak için Haxe'yi kullanır. (Ancak belirtildiği gibi, bu yaklaşım isteğe bağlıdır—Haxe, sizi bağlamamak için tasarlandığından, mevcut Haxe olmayan kodlarla da iyi çalışır.) Uygulama, oyun, işletme ve hatta mantığın tüm bağlamlarda, platformlarda tutarlı olmasını sağlamak, ve çıktı dilleri bu şekilde çok daha kolaydır.
Güvenlik yazmak için JavaScript'ten kaçmak. Bekle, TypeScript bunun için değil mi? Evet, JavaScript çıktısıyla sınırlı kalmak istiyorsanız. Buna karşılık Haxe dili, diğerlerinin yanı sıra Java, C++, C#, Python ve Lua'ya da aktarılabilir.
Bu arada, Haxe programlama dilini JavaScript'ten öğrenmek yeterince kolaydır - sözdizimi, örneğin Rebol'unki gibi büyük bir paradigma değişimi anlamına gelmez, böyle bir değişimin faydalarına rağmen. Haxe çekirdek geliştiricisi Dr. Andy Li, TypeScript ve Haxe arasında bugün hala geçerli olan daha derinlemesine bir karşılaştırma yazdı, ancak her iki dil de gelişmeye devam ediyor.
Bir derleyici için oldukça hızlı iş akışı. Bu, daha yeni eklenen bir parçadır (neko ondan önce bir seçenek olsa da): HashLink, derlemek için son derece hızlı olmakla birlikte çalışma zamanında işler için yeterince performanslı olmak arasında bir denge kurmuş gibi görünen çapraz platformlu bir sanal makinedir (VM). 3D oyun gibi. Ancak web tarafında bile Haxe, hem derleme zamanında hem de çalıştırma zamanında TypeScript'ten daha iyi performans gösterebilir.
Heyecan verici bir sınır. Haxe'nin kendisi açık kaynaklıdır ve sürekli eklenen yeni dil özellikleriyle aktif bir topluluğa sahiptir. Kendi en iyi korunan alt sırrı, sadece kendi başına birçok ilginç kullanım örneğine sahip olan ve kalbinizin içeriğine meta program yapmanıza izin veren derleme zamanı makro sistemi olabilir. (Aşağıda birkaç örnek veriyorum.)
Haxe'yi Başka Kim Kullanıyor?
Yeni başlayanlar için, oyun geliştiricileri, tabii ki: Madden NFL Mobile, Evoland II, Double Kick Heroes… bunlar ve yüzlerce başka yayınlanmış oyun, Haxe kullanılarak geliştirildi. Ancak Haxe, oyun alanının dışında da dalgalar yaratıyor:
- 2014'te TiVo , TiVo Premiere kutularındaki performansı %30'un üzerinde artırmak için Haxe'yi kullandı.
- Müşterileri arasında Haxe tabanlı “akıllı TV” sistemleri (her ikisi de büyük kullanıcı tabanları olan) için DAZN ve Telecine bulunan Massive Interactive, Haxe'yi yıllardır kullanıyor. UI mimarları Philippe Elsass, büyük web projeleriyle çalışma deneyiminde, Haxe'nin TypeScript'ten daha basit kullanım eğiliminde olduğunu ve derlenmesinin yaklaşık olarak daha hızlı olduğunu belirtti.
- Synolia, büyük Fransız markaları Carrefour ve La Fnac ve ayrıca Nickelodeon tarafından kullanılan çevrimiçi özelleştirme aracı Heidi için Haxe dilini kullanıyor. Synolia'ya göre, Haxe araç takımı, Flash'tan HTML5'e geçişi verimli bir şekilde yönetmelerine ve aynı zamanda mobil alanda yeni iş geliştirme fırsatlarını üstlenmelerine olanak sağladı. Bir SaaS uygulaması olan Heidi, Haxe araç seti, uygulamanın farklı katmanları ve hizmetleri arasında ortak kaynak kodunu paylaşmalarına izin verdi.
- Çok uluslu kuruluş Docler Holding , 2017 yılında Haxe Vakfı'nın stratejik ortağı oldu.
Haxe Ekosistemi Nasıldır?
Oyun ve Haxe söz konusu olduğunda, açık kaynaklı çerçeveler ve kitaplıklar açısından geniş, geniş bir dünyadır. Bağımsız bağımsız ekiplerden uluslararası müşterilerle başarılı stüdyolara kadar, Haxe kullanıcıları her yerde kod paylaşıyor:
- Flambe, Disney, Coca-Cola ve Toyota gibi markalar tarafından HTML5 oyunları geliştirmek için kullanılıyor.
- Heaps, Northgard'ı vuran son 3D stratejinin arkasındaki yüksek performanslı oyun çerçevesidir.
- Milyonlarca mobil oyuna güç veren hızlı geliştirme kitaplığı awe6, belki de gizli bir mücevher içinde gizli bir mücevherdir.
- Masaüstü ve mobilin yanı sıra XBox One, Nintendo Switch ve PlayStation 4'ü de hedefleyebilen Kha, üzerine inşa edilmiş 20'den fazla oyun motoruna sahip. Bu, tam Blender entegrasyonuna sahip olan ve son zamanlarda kendisi açık kaynak haline gelen Armory'yi içerir.
- Orijinal olarak Flash için eski Flixel kitaplığından sonra modellenen HaxeFlixel, çok sevilen Defender's Quest gibi oyunların arkasındaki popüler seçimdir.
- Birkaç yıl önce Angry Birds'ün Facebook limanı için kullanılan çerçeve olan Gamua'nın Starling'i artık açık kaynaklı bir Haxe limanına sahip.
- Flash API tabanlı OpenFL, yakında birden fazla konsolu (yani PlayStation 4, PlayStation Vita, XBox One ve Nintendo Switch) ek lisans ücreti ödemeden hedeflemenin bir yolu olacak. HaxeFlixel ve Starling, OpenFL'nin üzerine inşa edilmiştir, ancak ödüllü Papers, Please gibi bazı oyunlar doğrudan OpenFL'de geliştirilir.
- OpenFL'nin yıllar önce çatallandığı Native Media Engine, NME, hala ana sürümleri yayınlıyor.
- Belki HaxePunk'ın (FlashPunk'tan türemiştir) GitHub'ın Release Radar blogunda yer aldığını görmüşsünüzdür.
- Yüksek düzeyde optimize edilmiş Nape Physics Engine, daha karmaşık fizik gerektiren herhangi bir 2D oyun motoru veya simülatörü için mükemmeldir.
Elbette oyun geliştirme sahnesi, Haxe dil ekosisteminin daha görünür bir parçası. (Belki bu, Ludum Dare gibi oyun sıkışmalarının doğası gereğidir?) Ancak iş ve hatta kurumsal taraflar da kendini gösteriyor. Örneğin:
- Modüler uygulama çerçevesi hexMachina, diğer birçok özelliğin yanı sıra alana özgü dil (DSL) kullanımını ve model görünüm denetleyicisi (MVC) mimarisini destekler.
- UI düzen motoru HaxeUI aktif olarak gelişmektedir ve kurumsal desteğe sahiptir. 3DVista ve Kaizen for Pharma gibi ürünler, beraberinde üretim uygulamalarını da gönderdi.
- Sadece bu değil, ancak thx.core kitaplığı ve akrabaları, Lodash'ın JavaScript için yaptığı gibi, Haxe'ye genel amaçlı uzantılar sağlar.
- JavaScript'ten bahsetmişken, onu hedefleyen Haxe projeleri, hem Telecine hem de FlowPlay'in muazzam projelerini istemci tarafında hızlı yüklemelerini sağlarken ölçeklendirmelerine yardımcı olan Haxe Modular'dan faydalanabilir.
- Haxe'nin ekosistemi de mevcut teknolojilerle arayüz oluşturacak şekilde gelişmeye devam ediyor; örneğin artık bir GraphQL kitaplığı var.
- Son olarak, örnek Tinkerbell, her türlü faydalı görev için Haxe'nin makro sisteminden yararlanır. Web yönlendirme, birim testi ve SQL'i gömmek için çerçevelerin yanı sıra şablonlama ve CSS seçici ayrıştırmadan zaman uyumsuz/bekleme ve düşük öğrenme eğrisi reaktif durum işlemeye kadar her şey için kitaplıklar vardır.
Bunlar, Haxe dilinin kullanıcılarının şimdiye kadar aldıkları bazı yönlerden sadece öne çıkanlardır. Haxe.org, popülerliğe göre sıralanmış, etikete göre de göz atabileceğiniz kitaplıkların tam listesini tutar. Ama aynı zamanda Haxe Vakfı'nın yürüttüğü birkaç projeyi de vurgulamakta fayda var:
- DevOps açısı için resmi Haxe Docker deposu var.
- Kararlılık açısından, büyük bir sürüm güncellemesiyle bile, Haxe 4, Haxe 3'e bağlı projeleri olanlar için bazı uyumluluk yardımına sahip olacaktır.
Kulağa hoş geliyor, ancak sisteminizde bir geliştirme ortamına sahip olmak nasıl bir şey?

Hızlı Başlangıç
Win, Mac veya Linux için, ilk adım Haxe'yi indirmektir. Oradaki yükleyici birkaç farklı şey sağlayacaktır:
- Haxe derleyicisinin kendisi , bu da terminalinizden veya komut isteminizden
haxe
çalıştırmanıza izin verir. - Haxe standart kitaplığı , düşük seviyeli temellere izin verir, aynı zamanda bazı daha yüksek seviyeli genel amaçlı desteğe de izin verir. Örneğin, XML, ZIP işleme ve MySQL erişiminin tümü burada kolaylaştırılmıştır.
-
haxelib
komutuyla yeni paketler kurmanıza izin veren Haxelib paket yöneticisi . (Not: Özellikle Haxe'i profesyonel bir bağlamda kullanmayı düşünüyorsanız, Haxelib'in sağladığından daha gelişmiş paket yönetimi için lix'e göz atmaya değer.) - Neko , hızlı ve verimli yeniden derlemeye ve hata ayıklamaya izin veren bir sanal makine hedefi.
(Bununla birlikte, kurulum yapmanın birden fazla yolu vardır. Örneğin, zaten npm
yüklediyseniz, OpenFL'nin kurulum talimatlarında Haxe'yi Yeoman komutları aracılığıyla kurma seçeneği vardır. Homebrew ve Chocolatey de benzer yollar sağlar.)
Her neyse, Haxe'ye sahip olduğunuzda, onu komut satırından kendi başına kullanabilirsiniz, ancak geliştiriciler genellikle bir IDE kullanmayı tercih ederler. FlashDevelop/HaxeDevelop hala esas olarak yalnızca Windows altında desteklenmektedir. Diğer seçeneklerin çoğu çapraz platformdur (Win/Mac/Linux):
- VSCode'un Haxe eklentisi iyi destekleniyor.
- IntelliJ IDEA ayrıca bir Haxe eklentisine sahiptir.
- Oyun çerçevesi Kha'nın Kode Studio (Win/Mac/Linux) adlı kendi IDE'si vardır.
- Sublime Text ve Atom'un her ikisi de, bazıları platforma özel olan diğer birçok düzenleyicide olduğu gibi Haxe eklentilerine sahiptir.
Bu hızlı başlangıç kılavuzunun amaçları doğrultusunda VSCode ile gideceğiz. Haxe Extension Pack'i Ctrl+P ve ext install haxe-extension-pack
yoluyla almak en basiti olabilir, ancak minimalistseniz, temel Haxe eklentisinin kendisi için ext install vshaxe
ve hangisini seçip seçmek isteyebilirsiniz. Paketin isteyebileceğiniz diğer parçaları.
Haxe Projesi Oluşturma
Haxe dili birçok hedefe aktarılabildiğinden, bunun her biri için nasıl yapıldığını yönetmek bir derleme dosyası kullanılarak daha kolay hale getirilir. Ancak, başlamak için tek ihtiyacımız olan, .hx
uzantılı tek bir Haxe sınıfı dosyasıdır.
İçine koyacağımız koda gelince, try.haxe.org'dan Array Comprehension örneğini alalım ve Test.hx
adlı bir dosyaya koyalım:
class Test { static function main() { var a = [for (i in 0...10) i]; trace(a); // [0,1,2,3,4,5,6,7,8,9] var i = 0; var b = [while(i < 10) i++]; trace(b); // [0,1,2,3,4,5,6,7,8,9] } }
Şimdi, Test.hx
konumundan Haxe'yi yorumlama modunda, yani bu iki trace()
çağrısının çıktısını görmek için hiç aktarmadan çalıştırabilirsiniz:
$ haxe -main Test --interp Test.hx:4: [0,1,2,3,4,5,6,7,8,9] Test.hx:8: [0,1,2,3,4,5,6,7,8,9]
Harika, işe yarıyor!
Haxe Kodunu JavaScript'e Aktarma
Bunu, bir web sayfanızdaki bazı JavaScript aracılığıyla dünyayla paylaşmak istediğinizi varsayalım. Bu, Haxe'de yerleşiktir ve şu kadar kolay:
$ haxe -main Test -js haxe-test.js
Node.js kuruluysa, komut satırından çıktıyı şu şekilde kontrol edebilirsiniz:
$ node my-cool-test.js [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ] [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
Aksi takdirde, haxe-test.js
kod kullanıma hazırdır; onu bir web sayfasına eklerseniz, yüklendiğinde çıktıyı web tarayıcınızın geliştirici konsolunda görürsünüz.
Yerel İkili Dosyaya Aktarma ve Derleme
Geliştirmekte olduğunuz masaüstü için yerel bir ikili dosya da istediğinizi varsayalım. Bunu yapmak için, C++ hedefine aktaracağız, böylece .cpp
çıktısını yerel bir ikili dosyaya derlemek için C++ kullanabiliriz (kurulu olduğunu varsayarsak). Bunun için hxcpp
ihtiyacımız olacak, bu yüzden onu yüklememiz gerekecek:
$ haxelib install hxcpp
Bundan sonra, bu komutla aynı anda hem transpilasyon hem de derleme yapabiliriz:
$ haxe -main Test -cpp bin
Ve sonra ikili dosyamız çalışmaya hazır:
$ bin/Test Test.hx:4: [0,1,2,3,4,5,6,7,8,9] Test.hx:8: [0,1,2,3,4,5,6,7,8,9]
(Windows'ta bunun yerine bin\Test.exe
olur.)
Haxe Derleme Dosyası (.hxml) Oluşturma
Müstehcen uzantıya rağmen, .hxml
dosyaları, HaxeDevelop ve FlashDevelop tarafından kullanılan .hxproj
dosyalarının aksine XML değildir, ancak bu makalede bunu ele almayacağım. Aşağıda, yukarıda yaptığımız aktarım işlemini gerçekleştirmek için bir build-all.hxml
nasıl görünür:
-main Test # tells Haxe our main class is Test (case-sensitive) --each # all of the above commands will be applied to each target -js haxe-test.js # our first transpilation target --next # no other options, time to move to the next target -cpp bin # our second transpilation (and compilation) target
Öneklerdeki farka dikkat edin: -main
, -js
ve -cpp
doğrudan haxe
ileteceğiniz her bir parametredir, --each
ve --next
(iki tire) ise bir üst düzeydedir ve derleyiciye ne yapacağını söyler diğer parametrelerle.
Artık sadece haxe build-all.hxml
çalıştırarak hem JavaScript hem de yerel hedeflere ulaşabilirsiniz.
JavaScript'e aktarmak ve ardından sonucu Node kullanarak hemen çalıştırmak istiyorsanız, run-js.hxml
şöyle göründüğü haxe run-js.hxml
:
-main Test -js haxe-test.js -cmd node haxe-test.js
Benzer şekilde, yerel ikili dosya için bir "oluştur ve çalıştır" şöyle görünür (Linux'ta, yani Windows için bir varyasyon gerekir):
-main Test -cpp bin -cmd bin/Test
VSCode'a ne dersiniz? Bu kısım basittir: Yüklediğiniz uzantı, bu .hxml
dosyalarını otomatik olarak alır ve size bir açılır menüde otomatik olarak oluşturulmuş derleme görevleri (bir tasks.json
olmadan) vererek, hangi derleme dosyasını kullanacağınızı seçmenize izin verir.
Not: Birden fazla VSCode pencereniz açıksa dikkatli olun - bu yazıdan itibaren bu, Ctrl+B yoluyla oluşturmada sorunlara neden olabilir. (Yine de komut satırını kullanabilirsiniz, sorun değil.)
4
Yukarıdaki kurulumu izlediyseniz, indirme sayfasının Haxe yükleyicisinin hem 3.x hem de 4.x dallarına bağlantılar içerdiğini fark etmiş olabilirsiniz.
Haxe derleyicisinin son teknoloji sürümü 4, birçok yeni özelliği beraberinde getiriyor. Bir durumda, bu aynı zamanda makro sisteminin gücünün bir kanıtıdır: Haxe derleyicisi, kısa lambda işlevleri için destekten yoksundu, bu nedenle slambda kitaplığı, makrolar aracılığıyla onlar için destek uyguladı. Sürüm 4'ten itibaren, destek derleyiciye dahil edilmiştir ve kitaplık kullanımdan kaldırılmaktadır.
Peki Haxe 4 masaya başka neler getiriyor?
Çok fazla dikkat çekici olması gerekmez. Bunun yerine, Haxe 4'ün birçok küçük iyileştirmesi var. Ne de olsa Haxe , belki de benzer projelerden daha küçük ve daha odaklı bir ekip tarafından geliştirilen oldukça olgun bir teknolojidir - ve belki de Haxe'ye benzer herhangi bir projeyi aramak biraz zor olabilir.
En ilginç özelliklerinin çoğu bir süredir zaten mevcuttu. Örneğin, Haxe'nin Neko veya HashLink üzerinden hızlı bir iş akışı sağladığını yukarıda belirtmiştim. Ancak 2016'dan beri bir derleme sunucusu da içeriyor. Bu, VM olmayan hedefler için, büyük bir kitaplığa bağlı bir projenin yeniden derlenmesinin, bellek içi önbelleğe alma nedeniyle çok daha hızlı olacağı anlamına gelir; bu, kod tamamlama için Haxe IDE'ler tarafından da kullanılabilir.
Ancak özellikle Haxe 4 şunları görecek:
- Makro yürütme 4 kat daha hızlı.
- PHP5 desteği bırakılıyor.
- İki dil arasında biraz farklı olsalar bile, TypeScript kullanıcılarının muhtemelen hoş karşılayacağı bazı sözdizimsel güncellemeler yapıldı. Yani, ok işlevleri ve yeni işlev türü sözdizimi.
Haxe Eğitimleri
Her zaman doğrudan Haxe'nin standart API'sine veya sözdizimi belgelerine dalabilirsiniz, ancak yeni başlayanlar için daha uygun bazı Haxe malzemeleri de mevcuttur.
Videolara odaklanmayı tercih ederseniz, Seattle'daki Haxe ABD Zirvesi 2018, daha fazla içeriden görüş kazanmak için diğer yıllardakilerle birlikte atölye çalışmalarına sahiptir.
Ancak bazen daha kolay başlamanızı sağlayan şey, daha spesifik bir öğreticidir. HaxeFlixel'de bir zindan paletli oyununun nasıl oluşturulacağına dair baştan sona öğretici gibi. Ayrıca, sahne arkasında neler olup bittiğini daha fazla açıklayan bir dizi HaxeFlixel öğreticisi de var. 3D ucunda, Armory'yi kullanmaya başlamayla ilgili bir Haxe öğreticisi var.
Veya belki de XML'in hızlı işlenmesi hakkında bir Haxe öğreticisi istiyorsunuz - bu, şu anda birkaç yaşında olan ancak yine de oldukça alakalı olan birçok öğreticiden biridir. Daha önce de belirttiğim gibi, birçok sınır olsa da, Haxe'de geliştirmenin temellerinin çoğu bu noktada sabittir, bu nedenle öğreticiler çok hızlı bir şekilde bayatlamaz. (Yaptıkları yerde, genellikle Haxe çekirdeğinin kendisine değil, belirli bir kitaplığa bağımlılıktan kaynaklanır.)
Gördüğünüz gibi, Haxe dilini alabilir veya sizi birçok farklı yöne götürebilir. Umarım Haxe'nin çeşitli ve büyüleyici dünyasına bu girişi beğenmişsinizdir ve Haxe'nin teknolojisiyle ne yapacağınızı duymak için sabırsızlanıyorum!