【问题标题】:Can gobject be used as a language runtime in the same way cocoa can?gobject 可以像可可一样用作语言运行时吗?
【发布时间】:2015-02-03 22:46:59
【问题描述】:

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

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

从好的方面来说,两个运行时系统有很多相似之处,例如使用引用计数、具有信号以及比平均动态更动态

【问题讨论】:

  • 这不是问题。
  • 这是我在堆栈溢出中的第一个问题,如果我误解了本网站的任何规则,我很抱歉,有人可以提出更可接受的问题或其他网站。
  • 太棒了! - 欢迎堆栈溢出。请参加免费参观! stackoverflow.com/tour。我敢肯定,您很快就会真正了解情况,我和成千上万的其他爱好者将很乐意回答您的问题。你会喜欢的。
  • 在您阅读了导览并理解了在这里真正有效的问题之后,您需要考虑上面的陈述,并确定您遇到的具体问题,承认一个真正的解决方案(不是意见或专栏)。现在我对 gobject 或 vala 一无所知,但我想一个非常广泛且可以回答的问题是“我可以在 gobject 上快速运行”吗?现在这是一个很好的问题,但你已经知道答案是否定的,那么你打算去哪里呢?您是否尝试过一些东西并发现了诱人的可能性?
  • 您会注意到我编辑了您的标题和问题。这在堆栈溢出时发生了很多 - 我修复了你的拼写错误,并修复了格式。不是因为我比你聪明,而是因为糟糕的拼写往往会让人们望而却步,我希望你能公平地摇一摇。 (人们也编辑我的帖子!)

标签: cocoa vala gobject


【解决方案1】:

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

  • 瓦拉/精灵
  • Gjs(然后是 GNOME 版本的 ECMAScript / JavaScript)
  • C
  • C++
  • Python(通过 PyGObject)
  • 可能是其他语言,实际上是任何可以与 C API 对话的语言

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

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

(原则上)没有什么可以阻止某人编写一个 Rust 或 Swift 编译器来做类似于 Vala 的事情(发出 C 代码并使用 GObject 作为它的对象系统)。

关于您的担忧:

Vala 也可以直接发出目标代码(无需中间“编译为 C”步骤)。

不过,目前编写 valac 的概念有一些优点:

  • 您可以获取发出的 C 文件并在 C 程序中使用它们,而无需安装 valac
  • Vala 更容易使用 C 文件和
  • 外部函数接口(在 Vala 中称为 VAPI)旨在简化 C 库的使用并从常见的 C 习惯用法中抽象出来(如以零结尾的字符串、传递带有长度参数的数组等)
  • 生成的 C 代码可以通过 C 编译器进行优化
  • 标准 C 工具可用于检查生成的 C 代码
  • 您实际上可以阅读 C 代码以了解 Vala 内部的功能(对于已经了解 C 的人来说,这是一大优势)

Vala 使用 C 作为更高级别的“汇编”语言。

【讨论】:

  • 感谢 Jens,但我仍有一些问题我已经想通了,但我不确定:1- vapi 文件就像目标 c 和 swift (adf.ly) 之间的桥接机制/ywXS3 ),如果另一个语言要使用 gobject,我可以使用相同的 vapi 文件 2-由于命名约定,不使用方法重载,但它可能是 3-可可直接从 c 中使用,如 gobject adf.ly/yx9sH – Diego Antonio Rosario Palomino 12 分钟前
  • 在 stackoverflow 上,您一次只能问一个问题,这不是一个讨论论坛,而是一个问答网站。这意味着您提出一个具体问题,其他人将尝试提供尽可能准确的答案。
  • 如果您对讨论感兴趣,我建议您访问邮件列表或 IRC 频道,请参阅此页面上的联系部分:wiki.gnome.org/Projects/Vala
  • 当然可以在 stackoverflow 上使用 vala 标签提出更多问题,但就像有人说的那样,您一次只能问 一个 问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-24
相关资源
最近更新 更多