Haxe 4.0 programlama dilinin piyasaya sürülmesi

Mevcut araç seti sürümü 4.0Güçlü yazım, çapraz derleyici ve standart işlev kitaplığı ile aynı adı taşıyan çok paradigmalı üst düzey programlama dilini içerir. Proje, her hedef platformun yerel özelliklerine erişimle birlikte C++, HashLink/C, JavaScript, C#, Java, PHP, Python ve Lua'ya çevirinin yanı sıra JVM, HashLink/JIT, Flash ve Neko bayt koduna derlemeyi destekler. Derleyici kodu tarafından dağıtıldı GPLv2 lisansı altında ve Haxe için geliştirilmiş standart bir kütüphane ve sanal makine bazı MIT lisansı altında.

Dil ifade odaklı güçlü yazımla. Nesneye yönelik, genel ve işlevsel programlama kavramları desteklenir.
Haxe sözdizimi ECMAScript'e yakındır ve genişler statik yazma, otomatik tür çıkarımı, desen eşleştirme, jenerikler, yineleyici tabanlı döngüler, AST makroları, GADT (Genelleştirilmiş Cebirsel Veri Türleri), soyut türler, anonim yapılar, basitleştirilmiş dizi tanımları, koşullu derleme ifadeleri, alanlara meta veriler ekleme gibi özellikleri , sınıflar ve ifadeler, dize enterpolasyonu ('Benim adım $name'), tür parametreleri ("new Main‹String›('foo')") ve daha fazla.

sınıf Testi {
statik işlev ana() {
var insanlar = [
"Elizabeth" => "Programlama",
"Joel" => "Tasarım"
];

for (insanlar.anahtarlardaki ad()) {
var iş = kişiler[isim];
trace('$isim geçimini sağlamak için $iş yapıyor!');
}
}
}

Ana yenilikler sürüm 4.0:

  • "String->Int->Bool" yerine "(name:String, age:Int)->Bool" veya "(String, Int)->Bool" işlev tipini belirtmek için yeni sözdizimi.
  • Ok işlevi sözdizimi "işlev(a, b) a + b'yi döndür" yerine "(a, b) -> a + b" şeklindedir.
  • Null değerlerinin kullanımıyla ilişkili sorunlara karşı koruma (deneysel özellik, isteğe bağlı olarak belirli alanlar, sınıflar veya paketler için etkinleştirilir).
  • "final" anahtar sözcüğü, sınıf alanları ve değişmez olan yerel değişkenler içindir. "final" ayrıca, miras yoluyla ve devralınamayan sınıflar/arayüzler için geçersiz kılınmalarını önleyecek işlevleri tanımlamak için de kullanılabilir.
  • Destek Neko dışındaki tüm derleme hedeflerinde "Dize" temel türü için Unicode standardı.
  • Sıfırdan yeniden yazılan yerleşik tercüman artık bu adın altında geliyor Değerlendir. Yeni yorumlayıcı sayesinde komut dosyaları ve makrolar çok daha hızlı çalışıyor. Etkileşimli hata ayıklama modu desteklenir.
  • Derleme için yeni hedef sistemi (hedef) Hashlink - Haxe için özel olarak tasarlanmış, JIT veya C için bayt koduna derlemeyi destekleyen yüksek performanslı bir çalışma zamanı, C ile kolay entegrasyonun yanı sıra düşük seviyeli sayısal türlere ve işaretçilere erişime sahiptir.
  • Yeni JVM hedefi - Java'da hedefleme yaparken "-D jvm" bayrağını ekleyerek Java kodu derleme adımını atlayarak jvm bayt kodu oluşturmanıza olanak tanır.
  • Bu şekilde bildirilmemiş olsalar bile, işlevlerin veya yapıcıların çağrılması noktasında satır içi dağıtım yeteneği.
  • Dahil edilme olasılığı statik uzantılar "@:using(path.ToExtension)" kullanarak bir tür ("enum" gibi) bildirirken.
  • Soyut türler artık "obj.foo = bar" ifadelerini yeniden yüklemek için "@:op(ab)" operatörünün "set" sürümünü destekliyor.
  • "For" döngüsü sözdizimi artık anahtar/değer yinelemesini desteklemektedir: "for (key => koleksiyondaki değer) {}".
  • İfadelerde xml benzeri işaretleme kullanma desteği: “var a = ‹hi/›;”. Şimdilik bu özellik yalnızca makrolarla ayrıştırma için mevcut ve tasarım aşamasında.
  • Anonim yapı türlerinin “tam” gösterimindeki isteğe bağlı alanların sözdizimi şöyledir: “{ var ?f:Int; }" ("{ ?f:Int }" kısasına bir alternatif).
  • Enum değerleri artık işlev bağımsız değişkenleri için varsayılan değerler olabilir: "function foo‹T›(option:Option‹T› = Yok)".
  • "enum abstract Name(BasicType) {}" sözdizimi artık "enum"da "@:" önekini gerektirmiyor.
  • Soyut numaralandırmalar için otomatik numaralandırma:

    enum abstract Foo(Int) {
    var A; // 0
    var B; // 1
    }
    enum abstract Bar(String) {
    var A; // "A"
    var B; // "B"
    }

  • "extern" anahtar sözcüğü artık "@:" önekinin kullanılmasını gerektirmiyor.
  • Seçeneği kaldırıldı"uygular Sınıf alanlarına dizeler aracılığıyla erişmek için Dinamik". Harici sınıflar için veya soyut bir türe göre uygulama yoluyla kullanılabilir.
  • Şu anda yalnızca anonim yapılar ve tür parametresi kısıtlamaları için geçerli olan tür kesişimi için "A ve B" sözdizimi eklendi. Eski kısıtlama sözdizimi kaldırıldı.
  • Boş "Harita" örnekleri oluşturmak, "var harita:Map‹Int, String› = [];" sözdizimiyle yapılabilir. bir diziye benzer.
  • "haxe.ds.ReadOnlyArray" veri yapısı eklendi.
  • Meta veriler artık ad alanlarına sahip olabilir (“@:prefix.name function() {…}”). Tanımlara benzer şekilde: “#if (some.flag ... #end”.
  • Kullanılan IDE'ler için yeni hizmet protokolü VSCode için eklenti.
  • Web API'leri için harici tanımlar (harici) güncellendi ve eksik olanlar eklendi.

Kaynak: opennet.ru

Yorum ekle