Rilis bahasa pemrograman Haxe 4.0

Tersedia rilis perangkat Hax 4.0, yang mencakup bahasa pemrograman tingkat tinggi multi-paradigma dengan nama yang sama dengan pengetikan yang kuat, kompiler silang, dan pustaka fungsi standar. Proyek ini mendukung terjemahan ke C++, HashLink/C, JavaScript, C#, Java, PHP, Python dan Lua, serta kompilasi ke JVM, HashLink/JIT, Flash dan bytecode Neko, dengan akses ke kemampuan asli setiap platform target. Kode kompiler didistribusikan oleh di bawah lisensi GPLv2, dan perpustakaan standar serta mesin virtual yang dikembangkan untuk Haxe Neko di bawah lisensi MIT.

Bahasa adalah berorientasi pada ekspresi dengan pengetikan yang kuat. Konsep pemrograman berorientasi objek, generik dan fungsional didukung.
Sintaks Haxe dekat dengan ECMAScript dan mengembang fitur-fiturnya seperti pengetikan statis, inferensi tipe otomatis, pencocokan pola, generik, loop for berbasis iterator, makro AST, GADT (Tipe Data Aljabar Umum), tipe abstrak, struktur anonim, definisi array yang disederhanakan, ekspresi kompilasi bersyarat, melampirkan metadata ke bidang , kelas dan ekspresi, interpolasi string ('Nama saya $name'), ketik parameter ("new Mainβ€ΉStringβ€Ί('foo')"), dan lebih banyak.

Kelas Tes {
fungsi statis main() {
var orang = [
"Elizabeth" => "Pemrograman",
"Joel" => "Desain"
];

untuk (nama di orang.kunci()) {
var pekerjaan = orang[nama];
trace('$name melakukan $pekerjaan untuk mencari nafkah!');
}
}
}

Utama inovasi versi 4.0:

  • Sintaks baru untuk menentukan tipe fungsi "(name:String, age:Int)->Bool" atau "(String, Int)->Bool" alih-alih "String->Int->Bool".
  • Sintaks fungsi panah adalah "(a, b) -> a + b" bukan "function(a, b) return a + b".
  • Perlindungan terhadap masalah yang terkait dengan penggunaan nilai Null (fitur eksperimental, diaktifkan secara opsional untuk bidang, kelas, atau paket tertentu).
  • Kata kunci "final" ditujukan untuk bidang kelas dan variabel lokal yang tidak dapat diubah. "final" juga dapat digunakan untuk mendefinisikan fungsi agar tidak ditimpa oleh pewarisan dan untuk kelas/antarmuka yang tidak dapat diwariskan.
  • Dukungan Standar Unicode untuk tipe dasar "String" pada semua target kompilasi kecuali Neko.
  • Penerjemah bawaan ditulis ulang dari awal, yang kini hadir dengan nama tersebut evaluasi. Berkat penerjemah baru, skrip dan makro berjalan lebih cepat. Mode debugging interaktif didukung.
  • Sistem target baru untuk kompilasi (target) tautan hash - runtime berkinerja tinggi yang dirancang khusus untuk Haxe, mendukung kompilasi ke bytecode untuk JIT atau C, memiliki integrasi yang mudah dengan C, serta akses ke tipe dan pointer numerik tingkat rendah.
  • Target JVM baru - memungkinkan Anda menghasilkan bytecode jvm dengan melewatkan langkah kompilasi kode Java dengan menambahkan tanda β€œ-D jvm” saat menargetkan di Java.
  • Kemampuan untuk menerapkan inline pada saat fungsi atau konstruktor dipanggil, meskipun fungsi atau konstruktor tersebut tidak dideklarasikan seperti itu.
  • Kemungkinan inklusi ekstensi statis saat mendeklarasikan suatu tipe (seperti "enum") menggunakan "@:using(path.ToExtension)".
  • Tipe abstrak sekarang mendukung versi "set" dari operator "@:op(ab)" untuk memuat ulang ekspresi "obj.foo = bar".
  • Sintaks loop "for" sekarang mendukung iterasi nilai kunci: "for (key => value in collection) {}".
  • Dukungan untuk menggunakan markup seperti xml dalam ekspresi: β€œvar a = β€Ήhi/β€Ί;”. Untuk saat ini, fitur tersebut hanya tersedia untuk parsing dengan makro dan masih dalam tahap desain.
  • Sintaks untuk kolom opsional dalam notasi β€œlengkap” dari tipe struktur anonim adalah: β€œ{ var ?f:Int; }" (sebuah alternatif dari singkatan "{ ?f:Int }").
  • Nilai enum sekarang dapat menjadi nilai default untuk argumen fungsi: "function fooβ€ΉTβ€Ί(option:Optionβ€ΉTβ€Ί = None)".
  • Sintaks "enum abstract Name(BasicType) {}" tidak lagi memerlukan awalan "@:" di "enum".
  • Penomoran otomatis untuk enumerasi abstrak:

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

  • Kata kunci "extern" tidak lagi memerlukan penggunaan awalan "@:".
  • Menghapus opsi "mengimplementasikan Dinamis" untuk mengakses bidang kelas melalui string. Tersedia untuk kelas eksternal atau melalui implementasi dengan tipe abstrak.
  • Menambahkan sintaks "A & B" untuk persimpangan tipe, yang saat ini hanya berlaku untuk struktur anonim dan batasan parameter tipe. Sintaks batasan lama telah dihapus.
  • Membuat instance "Peta" kosong tersedia melalui sintaksis "var map:Mapβ€ΉInt, Stringβ€Ί = [];" mirip dengan array.
  • Menambahkan struktur data "haxe.ds.ReadOnlyArray".
  • Metadata sekarang dapat memiliki namespace (β€œ@:prefix.name function() {…}”). Begitu pula dengan definisi: β€œ#if (some.flag… #end”.
  • Protokol layanan baru untuk IDE yang digunakan di plugin untuk VSCode.
  • Definisi eksternal (eksternal) yang diperbarui untuk API Web dan menambahkan definisi yang hilang.

Sumber: opennet.ru

Tambah komentar