Haxe İncelemesi: Haxe 4 Özellikleri ve Güçlü Yönleri
Yayınlanan: 2022-03-11Önceki Haxe incelememiz, o sırada çıkacak olan Haxe 4'e bir bakışla sona erdi. Haxe 4'ün resmi sürümüyle (ve kısa bir süre sonra, iki hata düzeltme eki sürümü - sürüm 4.0.1 ve 4.0.2), yeni bir Haxe incelemesinin zamanı geldi. . Bu gelişen programlama diline yapılan en son eklemeler nelerdir? Haxe programlama dili topluluğu nereye gidiyor? Haxe oyun motorları hala ana dayanak noktası mı?
Haxe İncelemesi: Haxe 4'ün Yeni Özellikleri
Son ana sürümden bu yana üç yıldan fazla süren geliştirmeyle, Haxe programlama dilinin 4. sürümü makro performansını, geliştirici deneyimini ve söz dizimini iyileştirir. Geliştirmelerinden üçü hala deneysel olarak kabul ediliyor ancak vurgulanmaya değer: yeni JVM bayt kodu hedefi, satır içi işaretleme desteği ve boş güvenlik kontrolleri.
Haxe 4'te Deneysel JVM Bayt Kodu Derleme Hedefi
Haxe 4'ün yeni JVM bayt kodu hedefi, büyük bir derleme adımını keserek Haxe aracılığıyla Java geliştirmeyi biraz daha verimli hale getiriyor: Java'nın kendi derleyicisinin ( javac
) Haxe'nin aktarıcısının Java kaynak kodu çıktısını derlemesinin ikinci bir adımı yoktur.
Haxe 4 ile bu derleme yöntemi, Java geliştirici kitine (JDK) olan bağımlılığı da tamamen ortadan kaldırır ve gelecekte uygulanacak etkileşimli hata ayıklamanın kapısını açar.
hxjava
ana sürümü Haxe 4 uyumlu olana kadar, temel kurulum, Haxe ve Haxelib'in yüklenmesini ve ardından haxelib install hxjava 4.0.0-alpha
çalıştırılmasını içerir. Bu yapıldığında, geliştirme akışı basittir:
# transpile directly to JVM bytecode with Haxe (-D jvm would also work): haxe --main HelloWorld --java jar_output --define jvm # run JVM bytecode with Java: java -jar jar_output/HelloWorld.jar
Doğrudan JVM derlemesinin Haxe 4'te hala deneysel durumda olduğu göz önüne alındığında, birkaç uyarı ile birlikte gelir:
- Android'e özgü bazı sorunlar var.
- Çalışma zamanı performansı, eninde sonunda dolaylı yöntemden daha hızlı olacak olsa bile, o kadar iyi değildir.
Bununla birlikte, Java tabanlı teknolojilerden yararlanan herkes için doğru yönde atılmış dikkate değer bir adımdır.
Haxe 4'te Deneysel Satır İçi İşaretleme Desteği
JSX, kimse var mı? Haxe 4, satır içi işaretlemeyi etkinleştirerek geliştiricilerin örneğin HTML'yi doğrudan Haxe kaynak kodu içinde yazmasına olanak tanır:
var dom = jsx( <div> <h1>Hello!</h1> <p>This is a paragraph.</p> </div> );
jsx()
statik bir makro işlevi olabileceğinden, bu, bir projenin, işaretlemenin geliştiricinin uygulamak istediği XML-ish spesifikasyonuna uyup uymadığına dair derleme zamanı kontrollerine sahip olmasına izin verir. XML desteğinin kendisi Haxe API'sinde yerleşik olduğundan, kontrol Xml.parse()
kullanabilir, ancak temel "XML-ish" ayrıştırılabilirliği için buna bile gerek yoktur:
static macro function jsx(expr) { return switch expr.expr { case EMeta({name: ":markup"}, {expr: EConst(CString(s))}): macro $v{"XML MARKUP: " + s}; case _: throw new haxe.macro.Expr.Error("not an xml literal", expr.pos); } }
Bu özelliğin amacı, Haxe'yi oyun geliştirme balonunun dışına itmeye yardımcı olmaktır (kesinlikle orada da kullanımları olmasına rağmen). Derleyici düzeyinde uygulanması yeterince geneldir - bu nedenle yukarıdaki makroda Haxe API'sine ihtiyaç duymaz - ancak belirli DSL'leri kontrol etmek, derleyici ekibinin ve topluluğun çözmesi gereken bir sonraki sorudur.
Haxe 4'te Deneysel Sıfır Güvenliği
1965'te boş referansın icadından bu yana, boş güvenlik sorunu, Haxe programlama dilininki gibi boş yazılabilen ortamlarda geliştiricilerin genellikle belası olmuştur. Aleksandr Kuzmenko, GitHub'ın 10 milyonu aşan boş gösterici referans hatalarını düzeltmeyi taahhüt ettiğini tahmin ediyor.
Haxe 4, belirli bir tanımdan hemen önce bir @:nullSafety
satırı ekleyerek etkinleştirilebilen yerleşik derleme zamanı boş güvenlik makrolarına sahiptir. @:nullSafety(Loose)
(varsayılan) ve @:nullSafety(Strict)
modlarında gelir ve gerektiğinde @:nullSafety(Off)
ile devre dışı bırakılabilir. Strict
mod, güvenlik açısından devre dışı bırakılmış bir bağlamda bile null atayabilecek alan mutasyonları için işlev çağrılarını inceleyecektir.
Ruby geliştiricileri, kullanışlı güvenli navigasyon operatörünün (Ruby'de ?.
) radarda olup olmadığını merak edebilir. Henüz değil, ancak Haxe'deki programlamanın birçok yönüyle olduğu gibi, bunun için bir makro var (bunun yerine !.
kullandığına dikkat edin.)
Haxe 4 ile Geliştirici Deneyimi (DX): Sözdizimi Eklemeleri, Sözdizimsel Şeker ve Daha Fazlası
Haxe programlama diline DX ile ilgili eklemeler ve Haxe IDE desteği, Haxe 4 deneyimini çeşitli cephelerde diğer programlama dilleriyle en az seviyeye getiriyor. Bazı açılardan, Haxe herkesin her şeyi olmaya çalışır, ancak derleyici ekibi, diğer dillerden en kullanışlı özellikleri ve kuralları entegre etme konusunda düşünceli bir yaklaşım benimser.
Sonuç olarak, Haxe programlama dili ve standart API, kararlılıklarından, duyarlılıklarından ve tutarlılıklarından ödün vermeden gelişir. Bu Haxe incelemesindeki her şey abartıya kaçmayacak gibi görünüyor ve asıl mesele de bu: DX gelişiyor ve bu sadece gösterişli “özelliklerin peşinden gitmek”ten yana.
Yine de olması gereken bir denge var: Haxe'nin değişiklikleri, diğer dillerin izlediği kalıpların farkında olarak yapılır ve Haxe 4 kesinlikle daha popüler dillerden yeni gelenlere hitap etmek için çaba gösterir.
Yeni "İşlev Türü" Sözdizimi
Bu notta, Haxe artık işlev türlerini temsil etmenin iki ana yolunu desteklemektedir. Eski sözdizimi, orijinal özellik teklifine göre "otomatik körleme ve kısmi uygulamanın desteklendiğini, ancak desteklenmediğini öne sürüyor":
Int -> String -> Void
Yeni sözdizimi, DX'i geliştiren adlandırılmış bağımsız değişkenlere izin verir:
(id:Int, name:String) -> Void
Ancak DX bir yana, Haxe 4'ün işlev türleri için yeni sözdizimini kullanmak, eski, alt sözdizimi gelecekteki bir ana sürümde kaldırılabileceğinden, içine girmek için iyi bir alışkanlıktır.
Sözdizimsel Şeker… Bir çeşit
Belki çığır açıcı değildir, ancak Haxe 4'ün sözdizimsel iyileştirmeleri, hem belirli geliştirme geçmişlerine sahip mevcut Haxe geliştiricileri (örneğin ES6) hem de onlardan Haxe'ye ilk kez gelenler için hoş bir haber olacaktır.
Ok işlevi (“kısa lambda”) sözdizimi artık desteklenmektedir; bu, Haxe'nin durumunda aşağı yukarı yalnızca function
ve return
yazmak için bir kısayoldur. Anahtar-değer ve indeks-değer yineleme sözdizimleri (sırasıyla haritalar ve diziler için) artık desteklenmektedir. Statik uzantıları kullanan tür bildirimleri, karşılık gelen statik uzantı yöntemlerinin kullanıldığı her yerde bunlara ihtiyaç duymak yerine, global olarak yalnızca bir using
ifadesini kullanabilir.
Numaralandırmalar ve enum özetlerinin başka bazı iyileştirmeleri vardır; bunlardan biri, ikincisinin makroların kapsamından doğrudan derleyici desteğine sahip olmasıdır. Benzer şekilde taşınan diğer özellikler arasında son sınıflar, son arayüzler ve harici alanlar bulunur.
Makrolara dayanan bazı özellikler makrolara bağlı kaldı, ancak yine de geliştirildi. Operatör aşırı yüklemesi, alan ayarlayıcıları içerecek şekilde yükseltildi ve meta veriler artık .
@:prefix.subprefix.name
'deki gibi ayırıcılar.
Yukarıdaki değişiklikleri sözdizimsel şeker olarak adlandırmak, kuşkusuz aşırı basitleştiricidir, ancak okuyucular, daha fazla ayrıntıya ihtiyaç duydukları yerde, Haxe 4'ün sürüm notlarından bağlantılı orijinal önerileri inceleyebilirler.
Daha Fazla Haxe 4 DX Artışı
eval
çeşitli derlenmiş hedefler için etkileşimli hata ayıklama zaten mümkün olsa da, yeni değerlendirme hedefi, yorumlanan kod için etkileşimli hata ayıklamayı mümkün kılar. Basit bir örnek için, herhangi bir Haxe “Merhaba, Dünya” öğreticisinin proje dizinini alabilir, whatever-you-want.hxml
adlı bir dosya ekleyebilirsiniz:

--main HelloWorld --interp
…ve VSCode IDE'de etkileşimli hata ayıklamayı basitçe şu şekilde elde edin:
- VSCode'da proje dizininin açılması;
- Bir yere kesme noktası ekleme; ve
- F5'e basmak ve açılır menüden “Haxe Interpreter”ı seçmek.
Bu özellik ayrıca, java
gibi belirli bir hedef için derleme yapıyor olsanız bile ( --interp
kullanmak yerine) aynı şekilde etkileşimli olarak makro kodunda hata ayıklamanıza olanak tanır. Haxe ve VSCode'un yanı sıra tek kurulum gereksinimi Haxe VSCode uzantısıdır.
IDE Hizmetleri
IDE'lerden bahsetmişken, Haxe 4, en son VSCode Haxe uzantısı vshaxe'de zaten kullanılan yeni bir IDE hizmetleri protokolü sunar. Önemli bir performans artışının yanı sıra, bu, vshaxe'in aşağıdakiler de dahil olmak üzere bazı son derece yararlı DX iyileştirmeleri sağlamasına olanak tanır:
- (Uzun zamandır beklenen) otomatik ithalat
- Otomatik tamamlama vurgulu ipuçları, "Bu alan nereden geliyor?" sorusunu yanıtlamak gibi daha fazla ayrıntı gösterir.
- Beklenen tip tamamlama, postfix tamamlama ve geçersiz kılma tamamlama gibi çeşitli yeni yollarla çok kapsamlı otomatik tamamlama
- Kodu yazarken tuş vuruşu optimizasyonları
İlgili vshaxe değişiklik günlüğündeki mükemmel görsel demolar aracılığıyla bunların değerini görmek çok daha kolay. vshaxe
, etraftaki tek Haxe IDE değildir—HaxeDevelop ve Kode Studio Haxe'ye özgüdür ve IntelliJ IDEA, Sublime Text, Atom, vb. için Haxe IDE eklentileri vardır—ancak şu an açısından paketin önünde görünüyor Haxe 4'ün yeni IDE hizmetleri protokolünü kullanma ve ardından IntelliJ-Haxe.
Unicode Değişmezler
Gerçek Unicode dize değişmezlerini kullanmak isteyen geliştiriciler, Haxe 4'te bunun için destek bulacaktır, ancak dikkat edilmesi gereken bazı nüanslar vardır.
Salt Okunur Diziler
Standart Haxe API artık salt okunur dizilere sahiptir. Bunların kullanımı, örneğin, haxe.ds.ReadOnlyArray<Int>
türünde bir değişken bildirmek kadar kolaydır, ardından değerleri ayarlamaya, göndermeye veya pop değerlerine getirmeye çalışmak çeşitli derleyici hatalarına neden olur. final
anahtar sözcüğü bildirime ekleyin ve dizinin kendisine yeniden atanmasına da izin verilmeyecektir.
Çağrı sitesi satır içi
Çağrı sitesi satır içi oluşturma, geliştiricilerin işlevlerin satır içi olduğu yerler üzerinde ayrıntılı kontrol sağlayan yeni bir Haxe dili özelliğidir ve genel boyut-performans değiş tokuşunun aksi takdirde bir kaybet-kaybet kararı olabileceği sık çağrılan işlevleri optimize ederken kullanışlıdır.
Bunlar, zaten mükemmel olan Haxe programlama diline yapılan değerli eklemelerdir. Haxe 4 çıktıktan sonra Haxe topluluğundaki geliştiriciler nelerdir?
Haxe Oyun Motorlarının Ötesinde: Haxe 4 ile Web Geliştirme
Haxe'nin kullanıcı tabanına tarihsel olarak oyun programcıları hakim olmuştur. Ancak, hem ön hem de arka uç geliştirme için iş yığınları, mobil uygulamalar ve web gibi diğer segmentlerde Haxe'nin geniş ölçekte kullanıldığı birçok örnek var.
Bu amaçla, Haxe 4, yeniden oluşturulmuş HTML dış öğeleri sağlar; bu, js.html
standart API'sinin, MDN'nin tanımladığı gibi daha geniş web API'si ile güncel hale getirilmesinin yanı sıra, hataların düzeltilmesi ve eksik API'lerin eklenmesi anlamına gelir. (Örneğin, Haxe 4 artık Push API'sini içeriyor.)
Juraj Kirchheim'ın Weaving a Better Web with Haxe başlıklı konuşmasında, kurumsal bir ortamda çok daha verimli ve aynı zamanda daha sağlam olan Haxe tabanlı web çözümlerinin örneklerine işaret ediyor.
Ayrıca Rails mimari yaklaşımına (klasör hiyerarşisi açısından) karşı çıkıyor, ancak eksiksiz bir web çerçevesini bir Rails olarak tercih eden geliştiriciler yine de bir tane bulabilir. Diğer zamanlarda, geliştiricilerin eksiksiz bir web projesinin kaynağını gözden geçirmeleri faydalı olabilir; bu durumda, Haxe 4'ü destekleyen bir kalabalık hediye platformu olan Giffon'un halka açık deposuna bir göz atmaya değer. Aynı şekilde, web merkezli, açık- JavaScript'i bölen Haxe Modular gibi kaynak Haxe kitaplıkları, genel thx.core ve kardeş kitaplıkları ve saygıdeğer Haxe web araç takımı Tinkerbell, zaten Haxe 4'ü desteklemektedir. iş ve masaüstü uygulama geliştirme dahil çok daha geniş bir kapsamı hedefler; özellikle yeni Haxe dil sürümüne kadar sürekli olarak olgunlaşmaya devam etti.
Web, oyunlar, kurumsal…bir geliştirme ekibinin -hatta tek kişilik bir ekibin- hedeflediği platform ve uygulama tadı ne olursa olsun, Haxe geliştiricilerinin sonunda bağımlılıkları yönetme ile boğuşması gerekecek. Bunun için, Haxe geliştiricilerinin gözden geçirmesi için yararlı bir kaynak, Adam Breece'nin Scaling good other with other with scaling adlı konuşmasının slaytlarıdır.
Oyunlar için En İyi Programlama Dili Olarak Haxe
Oyun geliştirme için tek bir "en iyi" dil var mı? Bu öznel bir soru ve hakkında hararetli tartışmalar bulmak kolay. Yalnızca topluluğunun büyüklüğünden beklenebilecekten daha büyük olan Haxe'nin oyun geliştirme alanındaki başarısı kesinlikle tesadüfi değildir. Joe Williamson, 2019'da Ludum Dare 45 oyun reçelini kazanmayla ilgili bir röportajda bunun neden olabileceğine dair bir fikir veriyor ve bunun Haxe 4 ile devam etmesi muhtemel görünüyor.
Haxe'nin orijinal yaratıcısı Nicolas Cannasse, Shiro Games'ten Northgard ile üretimde Haxe 4'ü zaten kullanıyor. Motion Twin ayrıca Dead Cells için üretimde Haxe 4 kullanıyor. Her iki oyunun da Steam'de on binlerce olumlu yorumu var ve hem PC'ler (Win, Mac ve Linux) hem de konsollar için mevcut - her iki oyunun da daha küçük geliştirme ekiplerine ve milyonlarca kullanıcı tabanına sahip olduğu düşünüldüğünde gerçekten müthiş bir sonuç. Dead Cells'in radarlarında Android sürümü olan bir iOS sürümü bile var.
Kitaplık açısından, birkaç büyük Haxe oyun motoru kesinlikle Haxe 4'ün değişikliklerine ayak uyduruyor. Haxe 4 uyumlu motorlar arasında Kha (ve bunun üzerine inşa edilen birçok motorun bir kısmı - örneğin Armory), HaxeFlixel ve ana bağımlılığı OpenFL, NME ve Heaps bulunur - doğal olarak, çünkü Northgard ve Dead Cells bunu kullanır. HaxePunk ayrıca Haxe 4 uyumluluğu üzerinde çalışıyor; bir durumda, bir kütüphane olan Nape, Haxe 4 ile çalışmak üzere çatallandı.
Bazı geliştiriciler, halihazırda mevcut olan birçok motordan birini kullanmak yerine kendi motorlarını da yaparlar. Örneğin, kendi 3D Haxe oyun motorunu nasıl ve neden yazdığını detaylandıran Kirill Poletaev. Söz konusu motor şirket içi olduğundan, bunun henüz Haxe 4'e taşınmamış bir proje örneği olması mantıklı.
Haxe 4: Mükemmel Bir Alet Zincirinin Sorunsuz İlerlemesinin Sürdürülmesi
Haxe'nin bu kadar geniş bir kullanım alanına sahip olmasıyla, en önemli Haxe 4 özellikleri geliştiriciye göre değişiklik gösterecektir, bu nedenle bu Haxe incelemesi hiçbir şekilde ayrıntılı değildir. Aşağıdakiler dahil, Haxe 4'ün bazı değişiklikleri yukarıda eksik:
- JavaScript hedefi için ES6 çıktısının eklenmesi
- Özelliklerin (bazıları hala
hx3compat
kitaplığı aracılığıyla kullanılabilir) ve hedeflerin (PHP5 ve yakında AS3) kaldırılması - CLI bayrakları, yaygın araçlarla daha tutarlı hale getirilir (
-lib
.hxml
dosyalarının-L
veya--library
olarak değiştirilmesi gerekir). -
final
artık bir anahtar kelime olmanın yanı sıra (bu nedenle değişken adı olarak kullanılamaz),operator
veoverload
de yeni ayrılmış anahtar kelimelerdir.
Ayrıca bazı önemli değişiklikler de oldu, ancak bunlar o kadar az ki, aktif olarak bakımı yapılan birçok kitaplık Haxe 4 uyumluluğunu açıkça duyurmaya bile tenezzül etmiyor; genel olarak, Haxe 3'ten geçişin oldukça basit olduğu söyleniyor. Sonuçta, Haxe'nin hedeflerinden biri, çok sayıda hedef platform için hokkabazlık desteğinin ortasında istikrardır ve Haxe 4 burada hayal kırıklığına uğratmaz.
Peki ya yeni kullanıcılar? Sonunda, Haxe'nin oyunlar için en iyi kodlama dili olup olmadığına, Haxe ekosisteminin web geliştirme için en sağlam kitaplıkları mı yoksa Haxe'ye özgü araçların belirli bir iş akışı için en mantıklı DX'i mi sağladığına karar vermek okuyucuya kalmıştır. En azından, Haxe birçok alanda uygulanabilir bir rakip olmaya devam ediyor ve hemen hemen her geliştirici için gizli bir avantaj sunuyor.
Ek okuma: Haxe'de yeni olan geliştiriciler, John Gabriele tarafından hazırlanan oldukça yeni bir Haxe öğreticisiyle ve ayrıca Haxe 4.1.0 ve Haxe 4.1.1'in sürüm notlarıyla ilgilenebilirler.