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、gtk4、保险丝,libxml-2.0
    • 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

添加评论