Keluaran bahasa pengaturcaraan Haxe 4.0

Ada keluaran toolkit Haxe 4.0, yang merangkumi bahasa pengaturcaraan peringkat tinggi berbilang paradigma dengan nama yang sama dengan penaipan yang kuat, pengkompil silang dan perpustakaan fungsi standard. Projek ini menyokong terjemahan kepada C++, HashLink/C, JavaScript, C#, Java, PHP, Python dan Lua, serta kompilasi kepada JVM, HashLink/JIT, Flash dan Neko bytecode, dengan akses kepada keupayaan asli setiap platform sasaran. Kod pengkompil diedarkan oleh di bawah lesen GPLv2, dan perpustakaan standard dan mesin maya yang dibangunkan untuk Haxe Neko di bawah lesen MIT.

Bahasa ialah berorientasikan ekspresi dengan taip yang kuat. Konsep pengaturcaraan berorientasikan objek, generik dan berfungsi disokong.
Sintaks Haxe berdekatan dengan ECMAScript dan mengembang cirinya seperti penaipan statik, inferens autotaip, padanan corak, generik, berasaskan lelaran untuk gelung, makro AST, GADT (Jenis Data Algebra Umum), jenis abstrak, struktur tanpa nama, takrif tatasusunan dipermudah, ungkapan kompilasi bersyarat , melampirkan metadata pada medan , kelas dan ungkapan, interpolasi rentetan ('Nama saya ialah $nama'), jenis parameter ("Rentetan Utama baruβ€Ί('foo')"), dan banyak lagi.

Ujian kelas {
fungsi statik main() {
var orang = [
"Elizabeth" => "Pengaturcaraan",
"Joel" => "Reka bentuk"
];

untuk (nama dalam people.keys()) {
var job = orang[nama];
trace('$nama melakukan $kerja untuk sara hidup!');
}
}
}

Utama inovasi versi 4.0:

  • Sintaks baharu untuk menentukan jenis fungsi "(nama:String, umur:Int)->Bool" atau "(String, Int)->Bool" dan bukannya "String->Int->Bool".
  • Sintaks fungsi anak panah ialah "(a, b) -> a + b" dan bukannya "function(a, b) return a + b".
  • Perlindungan terhadap masalah yang berkaitan dengan penggunaan nilai Null (ciri eksperimen, pilihan didayakan untuk medan, kelas atau pakej tertentu).
  • Kata kunci "akhir" adalah untuk medan kelas dan pembolehubah tempatan yang tidak boleh diubah. "akhir" juga boleh digunakan untuk menentukan fungsi untuk mengelakkannya daripada ditindih oleh warisan dan untuk kelas/antara muka yang tidak boleh diwarisi.
  • Sokongan Standard Unicode untuk jenis asas "String" pada semua sasaran kompilasi kecuali Neko.
  • Jurubahasa terbina dalam ditulis semula dari awal, yang kini berada di bawah nama Jahat. Terima kasih kepada penterjemah baharu, skrip dan makro berjalan dengan lebih pantas. Mod penyahpepijatan interaktif disokong.
  • Sistem sasaran baharu untuk penyusunan (sasaran) Pautan cincang - masa jalan berprestasi tinggi yang direka khusus untuk Haxe, menyokong kompilasi kepada bytecode untuk JIT atau C, mempunyai penyepaduan mudah dengan C, serta akses kepada jenis dan penunjuk angka peringkat rendah.
  • Sasaran JVM baharu - membolehkan anda menjana kod bait jvm dengan melangkau langkah penyusunan kod Java dengan menambahkan bendera "-D jvm" apabila menyasarkan dalam Java.
  • Keupayaan untuk menggunakan sebaris pada titik memanggil fungsi atau pembina, walaupun ia tidak diisytiharkan sedemikian.
  • Kemungkinan kemasukan sambungan statik apabila mengisytiharkan jenis (seperti "enum") menggunakan "@:using(path.ToExtension)".
  • Jenis abstrak kini menyokong versi "set" operator "@:op(ab)" untuk memuat semula ungkapan "obj.foo = bar".
  • Sintaks gelung "for" kini menyokong lelaran nilai kunci: "for (key => value in collection) {}".
  • Sokongan untuk menggunakan penanda seperti xml dalam ungkapan: "var a = β€Ήhi/β€Ί;". Buat masa ini, ciri ini hanya tersedia untuk penghuraian dengan makro dan berada di peringkat reka bentuk.
  • Sintaks untuk medan pilihan dalam tatatanda β€œpenuh” bagi jenis struktur tanpa nama ialah: β€œ{ var ?f:Int; }" (alternatif kepada "{ ?f:Int }" pendek).
  • Nilai enum kini boleh menjadi nilai lalai untuk argumen fungsi: "function fooβ€ΉTβ€Ί(option:Optionβ€ΉTβ€Ί = Tiada)".
  • Sintaks "Enum abstract Name(BasicType) {}" tidak lagi memerlukan awalan "@:" dalam "enum".
  • Penomboran automatik untuk penghitungan abstrak:

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

  • Kata kunci "luaran" tidak lagi memerlukan penggunaan awalan "@:".
  • Mengalih keluar pilihan "mengimplementasikan Dinamik" untuk mengakses medan kelas melalui rentetan. Tersedia untuk kelas luar atau melalui pelaksanaan oleh jenis abstrak.
  • Menambahkan sintaks "A & B" untuk jenis persimpangan, yang pada masa ini hanya digunakan pada struktur tanpa nama dan kekangan parameter jenis. Sintaks kekangan lama telah dialih keluar.
  • Mencipta kejadian "Peta" kosong tersedia melalui sintaks "var map:Mapβ€ΉInt, Stringβ€Ί = [];" serupa dengan tatasusunan.
  • Menambahkan struktur data "haxe.ds.ReadOnlyArray".
  • Metadata kini boleh mempunyai ruang nama (β€œ@:prefix.name function() {…}”). Begitu juga dengan takrifan: β€œ#if (some.flag ... #end”.
  • Protokol perkhidmatan baharu untuk IDE yang digunakan dalam pemalam untuk VSCode.
  • Takrif luaran (luaran) dikemas kini untuk API Web dan menambah yang tiada.

Sumber: opennet.ru

Tambah komen