Pembaruan kompiler bahasa pemrograman Vala 0.50.4

Versi baru kompiler untuk bahasa pemrograman Vala 0.50.4 telah dirilis. Cabang dukungan jangka panjang (LTS) Vala 0.48.14 (dikemas untuk Ubuntu 18.04) dan cabang eksperimental Vala 0.51.3 juga telah diperbarui.

Bahasa Vala adalah bahasa pemrograman berorientasi objek yang menyediakan sintaksis mirip dengan C# atau Java. Gobject (Glib Object System) digunakan sebagai model objek. Pengelolaan memori dilakukan dengan kepemilikan (link yang dimiliki/tidak dimiliki) atau menggunakan ARC (penggantian destruktor dan pengurangan penghitung referensi objek pada tahap kompilasi).

Bahasa ini memiliki dukungan untuk introspeksi, fungsi lambda, antarmuka, delegasi dan penutupan, sinyal dan slot, pengecualian, properti, tipe non-null, tipe inferensi untuk variabel lokal. Kit ini dilengkapi dengan sejumlah besar binding ke perpustakaan di C (vala-girs, vala-extra-vapis). Program Vala diterjemahkan ke dalam representasi C dan kemudian dikompilasi oleh kompiler standar C. Dimungkinkan untuk menjalankan program dalam mode skrip.

Daftar perubahan:

  • Menambahkan dukungan tambahan untuk kata kunci params untuk konstruktor kelas Foo{ public Foo(params string[] args){ foreach (var arg in args) print(arg); } }
  • kodegen:
    • Peningkatan dukungan untuk konstruktor struct SimpleType (misalnya digunakan untuk mengikat typedef uint32_t people_inside; dari C) [SimpleType] [CCode (cname = "people_inside")] public struct PeopleInside : uint32 {}
    • Peningkatan penanganan atribut “NoWrapper”.
    • CCode.type_cname dan get_ccode_type_name() diperbolehkan untuk kelas.
    • G_TYPE_INSTANCE_GET_CLASS/INTERFACE selalu digunakan untuk simbol eksternal.
    • Menggunakan g_boxed_free di free-wrapper untuk mengalokasikan GLib.Value di heap.
    • Memperbaiki kebocoran memori selama unboxing implisit GLib.Value (wadah universal jenis nilai apa pun).
    • Memperbaiki kebocoran memori saat memindahkan struktur yang dialokasikan heap ke tumpukan.
    • Warisan destruktor dari struktur induk dipastikan
    • Pengambilan simbol_referensi ekspresi pemeran yang disarangkan dengan benar telah ditingkatkan.
    • Menghapus semua kemunculan CCodeCastExpression yang bersarang.
    • Berhenti salah memanggil pengendali sinyal default.
    • Menghubungkan "string.h" untuk strcmp() (profil POSIX, mode di mana Vala menghasilkan kode hanya menggunakan pustaka C standar).
  • Vala:
    • Peningkatan deteksi file sumber paket duplikat.
    • Bidang/properti GtkChild harus dinyatakan tidak dimiliki.
    • Dilarang menugaskan ulang bidang/properti GtkChild.
    • Kondisi yang lebih ketat telah diterapkan pada lambda saat mendelegasikan tugas.
    • Dilarang menggunakan struktur SimpleType sekali pakai.
    • Pembuka kotak GLib.Value memastikan bahwa nilai yang tidak dimiliki dikembalikan.
    • Dilarang mentransmisikan GLib.Value ke struct/tipe sederhana yang dapat dibatalkan.
    • Menambahkan pemeriksaan argumen tipe pada tipe dasar/kelas/prakondisi antarmuka.
    • Dilarang mengambil parameter/variabel va_list.
    • Generik yang berisi penunjuk ke suatu struktur harus dimasukkan ke tipe yang benar saat diakses untuk menghindari C UB.
    • Inferensi tipe yang diterapkan untuk "dalam" di dalam enum.
    • Peningkatan pemeriksaan konteks untuk tugas pada bidang yang dapat ditulisi.
    • Termasuk "stdlib.h" untuk Enum.to_string() (POSIX).
    • Source_reference yang benar disetel untuk variabel implisit "ini" dan "hasil"
    • Memberikan pesan kesalahan untuk operan internal ekspresi unary yang tidak valid.
  • Penulis kode: Berhenti menambahkan akhiran ";" setelah badan WithStatement.
  • Girparser:
    • Pemrosesan delegasi anonim yang tidak didukung oleh metode atau sinyal virtual disediakan.
    • Menerapkan metadata "delegate_target" untuk metode dan parameter
    • Terapkan metadata "destroy_notify_cname" ke kolom
    • Terapkan metadata "type_get_function" untuk kelas dan antarmuka
    • Tetapkan CCode.type_cname untuk kelas jika bukan default.
  • girwriter: Memastikan elemen parameter instance ditulis.
  • girwriter: Mengimplementasikan keluaran pengendali sinyal default.
  • libvaladoc/html: Menghapus penyortiran bidang struktur agar meninggalkan urutan aslinya saat membuat dokumentasi html valadoc.org
  • libvaladoc: Pastikan nilai untuk Api.Class.is_compact diambil dengan benar
  • libvaladoc: Menambahkan pembungkus untuk perpustakaan graphviz "agedge".
  • Binding:
    • Perbaikan kecil saat membuat binding: cairo, gobject-2.0, pango, goocanvas-2.0, kutukan, alsa, bzlib, sqlite3, libgvc, posix, gstreamer-1.0, gdk-3.0, gdk-x11-3.0, gtk+-3.0, gtk4, sekering, libxml-2.0
    • gdk-pixbuf-2.0: Perbaiki Pixbuf.save_to_streamv_async()
    • gio-2.0: perbaikan pengikatan PollableOutputStream.write*_nonblocking()
    • gio-2.0,gtk+-3.0,gtk4: Atribut tipe c eksplisit dari parameter va_list dibuang
    • gio-2.0: Invoker hilang yang dipilih untuk beberapa metode AppInfo/File.*()
    • glib-2.0: Menambahkan metode praktis GLib.[S]List.is_empty() untuk non-null
    • glib-2.0: Mengikat fungsi menegaskan_cmp* [#395]
    • glib-2.0: Jenis bidang OptionEntry.flags yang ditingkatkan
    • glib-2.0: PtrArray sekarang menjadi subkelas GenericArray
    • gstreamer-1.0: CCode.type_id dari MiniObject disetel ke G_TYPE_BOXED [#1133]
    • gtk+-2.0,javascriptcoregtk-4.0: Perbaikan penggunaan atribut CCode.type_cname
    • gtk+-3.0,gtk4: Memperbaiki beberapa nilai dan parameter pengembalian delegasi
    • gtk4: Diperbarui ke versi 4.0.2.

Sumber: opennet.ru

Tambah komentar