Vala程式語言編譯器更新0.50.4

Vala 程式語言的新版本編譯器 0.50.4 已發布。長期支援(LTS)分支 Vala 0.48.14(針對 Ubuntu 18.04 打包)和實驗分支 Vala 0.51.3 也已更新。

Vala 語言是一種物件導向的程式語言,提供類似 C# 或 Java 的語法。 Gobject(Glib 物件系統)用作物件模型。記憶體管理透過所有權(擁有/無主連結)或使用 ARC(在編譯階段取代析構函數和減少物件參考計數器)來執行。

該語言支援內省、lambda 函數、介面、委託和閉包、訊號和槽、異常、屬性、非空類型、局部變數的類型推斷。此套件附帶大量與 C 語言庫的綁定(vala-girs、vala-extra-vapis)。 Vala程式被翻譯成C表示,然後由標準C編譯器編譯,可以以腳本模式執行程式。

變更清單:

  • 增加了對建構子 params 關鍵字的額外支援 class Foo{ public Foo(params string[] args){ foreach (var arg in args) print(arg); } }
  • 程式碼產生器:
    • 改進了對 SimpleType 結構建構函數的支援(例如用於綁定 typedef uint32_t people_inside; 來自 C) [SimpleType] [CCode (cname = "people_inside")] public struct PeopleInside : uint32 {}
    • 改進了“NoWrapper”屬性的處理。
    • 類別允許 CCode.type_cname 和 get_ccode_type_name()。
    • G_TYPE_INSTANCE_GET_CLASS/INTERFACE 總是用於外部符號。
    • 在 free-wrapper 中使用 g_boxed_free 在堆上分配 GLib.Value。
    • 修復了 GLib.Value(任何值類型的通用容器)隱式拆箱期間的記憶體洩漏。
    • 修復了將堆分配的結構移動到堆疊時的記憶體洩漏。
    • 確保父結構析構函數的繼承
    • 嵌套轉換表達式的 symbol_reference 的正確檢索已得到改進。
    • 刪除了所有巢狀的 CCodeCastExpression。
    • 停止錯誤地呼叫預設訊號處理程序。
    • 連接 strcmp() 的“string.h”(POSIX 設定文件,Vala 僅使用標準 C 庫產生程式碼的模式)。
  • 瓦拉:
    • 改進了對重複包源文件的檢測。
    • GtkChild 欄位/屬性必須宣告為無主。
    • 禁止重新分配 GtkChild 欄位/屬性。
    • 委派分配時,對 lambda 應用了更嚴格的條件。
    • 禁止使用一次性的 SimpleType 結構。
    • GLib.Value 拆箱可確保傳回無主值。
    • 禁止將 GLib.Value 轉換為可為 null 的結構/簡單型別。
    • 在基底類型/類別/介面前提條件中新增了類型參數檢查。
    • 禁止捕獲 va_list 參數/變數。
    • 包含結構指標的泛型在存取時必須轉換為正確的類型,以避免 C UB。
    • 實現了枚舉內部“in”的類型推斷。
    • 改進了對可寫字段分配的上下文檢查。
    • 包含 Enum.to_string() (POSIX) 的「stdlib.h」。
    • 為隱式變數“this”和“result”設定正確的source_reference
    • 提供了有關一元表達式的無效內部操作數的錯誤訊息。
  • Сodewriter:停止加入尾隨“;”在主體 WithStatement 之後。
  • 吉爾帕瑟:
    • 提供了對不受虛擬方法或訊號支援的匿名委託的處理。
    • 為方法和參數應用了“delegate_target”元數據
    • 將「destroy_notify_cname」元資料套用至字段
    • 對類別和介面應用「type_get_function」元數據
    • 如果不是預設值,請為類別設定 CCode.type_cname。
  • girwriter:確保寫入實例參數元素。
  • girwriter:實作了預設訊號處理程序輸出。
  • libval​​adoc/html:刪除了結構欄位的排序,以在產生 html 文件 valadoc.org 時保留其原始順序
  • libval​​adoc:確保正確檢索 Api.Class.is_compact 的值
  • libval​​adoc:新增了「agege」graphviz 庫的包裝器
  • 綁定:
    • 產生綁定時的小修復:cairo、gobject-2.0、pango、goocanvas-2.0、curses、alsa、bzlib、sqlite3、libgvc、posix、gstreamer-1.0、gdk-3.0、gdk-x11-3.0、gtk+-3.0、gtk+-4、 gtk2.0、保險絲,libxml-XNUMX
    • gdk-pixbuf-2.0:修正 Pixbuf.save_to_streamv_async()
    • gio-2.0:PollableOutputStream.write*_nonblocking() 綁定修復
    • gio-2.0,gtk+-3.0,gtk4: va_list 參數的明確 c 類型屬性被丟棄
    • gio-2.0:為某些 AppInfo/File.*() 方法選擇了缺少的呼叫程式
    • glib-2.0:為非空白新增了 GLib.[S]List.is_empty() 便利方法
    • glib-2.0:綁定assert_cmp*函數[#395]
    • glib-2.0:改進的 OptionEntry.flags 欄位類型
    • glib-2.0:PtrArray 現在是 GenericArray 的子類
    • gstreamer-1.0:MiniObject 的 CCode.type_id 設定為 G_TYPE_BOXED [#1133]
    • gtk+-2.0,javascriptcoregtk-4.0:修正了 CCode.type_cname 屬性的使用
    • gtk+-3.0,gtk4:修復了一些委託回傳值和參數
    • gtk4:更新至版本4.0.2。

來源: opennet.ru

添加評論