gobject可以像cocoa一样用作语言运行库吗?

时间:2015-02-03 22:47:00

标签: cocoa vala gobject

现在,Apple已经发布了swift,我一直在考虑使用gobject作为现有语言(如生锈甚至是swift)的运行时的可能性。

我主要担心的是,虽然vala执行此操作,但它之前编译为c并且需要语言绑定,即使您尝试使用的库已经使用gobject,甚至以某种方式vala也无法使用c不具备的功能支持诸如函数重载,而objective-c不支持它,但swift确实并且仍然可以使用它。

从好的方面来看,两个运行时系统都有许多相似之处,例如使用引用计数,具有信号并且比平均值更具动态性

1 个答案:

答案 0 :(得分:3)

您可以将GObject(以及扩展GLib和基于GLib的库的生态系统)视为多种语言的公共语言运行库:

  • Vala / Genie
  • Gjs(然后是GNOME版本的ECMAScript / JavaScript)
  • C
  • C ++
  • Python(通过PyGObject)
  • 可能是其他人,实际上任何可以与C API交谈的语言

实际上它确实是C运行时(大多数操作系统的 核心公共语言运行库)的扩展,它增加了OOP支持。

还有其他类似的技术,如Java JVM和.NET CLR,正如您所描述的,Apple现在也在使用Objective C运行时用于多种语言。

原则上(原则上)没有任何东西阻止某人编写类似于Vala的Rust或Swift编译器(发出C代码并使用GObject作为它的对象系统)。

关于您的关注:

Vala也可以直接发出目标代码(没有中间"编译到C"步骤)。

目前,valac的概念有一些优点:

  • 您可以获取已发出的C文件并在C程序中使用它们而无需安装valac
  • Vala使用C文件和
  • 要容易得多
  • 外部函数接口(在Vala中称为VAPI)旨在使C库和摘要从常见的C语言(如零终止字符串,传递带有长度参数的数据等)变得容易。
  • 生成的C代码可以由C编译器优化
  • 标准C工具可用于检查生成的C代码
  • 您实际上可以阅读C代码以了解Vala内部的作用(对于已经了解C的人来说,大加一点)

Vala使用C作为更高级别"组装"语言。