c - 调用编译为 dylib 的 Rust 库的 Swift 程序的性能影响?

标签 c cocoa swift rust dylib

我正在用 Swift 编写一个 OS X 应用程序,并考虑在 Rust 中实现我的部分模型代码 (MVC pov),以便在 Web 服务器上获得使用的可移植性(因为 Swift 不会扩展到 Web 服务器空间).

如果我将我的 Rust 代码编译为动态库 (.dylib) 并遵循某些准则,我知道它将生成一个外部接口(interface),该接口(interface)看起来像 Swift 可以使用的典型“C”接口(interface)。

在这种情况下,Swift 与 dylib 通信对性能有何影响?它们与用 C 编写的东西通信有什么不同吗? dylib 中的模型组件可以假设为应用程序的核心,因此预计通信将是“喋喋不休的”。

[如果我用 Swift 编写整个代码,模型部分将包含在一个单独的框架/库中,这在任何情况下都非常类似于 dylib。]

最佳答案

使用外部函数接口(interface)时,我可以看到两个主要的成本中心(性能方面):

  1. 转换:如果您需要来回转换数据(在一侧或更糟糕的是在两侧)
  2. 失去优化机会:没有内联,因此错失了很多机会

后者可以用“更好”的工具链恢复,特别是因为在这种情况下两种语言都编译成 LLVM IR,而且我知道至少一些 Rust 开发人员/用户有志于为 Rust/C 管理它互动,但我从未见过。

前者需要仔细设计,即便如此,如果您希望在任一侧使用 native 复合类型(String 是主要候选者),也不可避免地会发生一些转换。

关于c - 调用编译为 dylib 的 Rust 库的 Swift 程序的性能影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29366441/

相关文章:

c - 从 C 中的函数返回数组 : Segmentation Fault

c - 使用 select() 在现有客户端或新客户端之间进行选择 (C)

objective-c - NSTableView渲染 "Upside Down"

cocoa - 如何从 NSBitmapImageRep 创建具有透明度的 8 位 PNG?

cocoa - NSTableView - NSButtonCell 数据源类型?

Swift 3 - 将 map 类型从 View Controller 更改为另一个

ios - 使用 Swift 迭代 tableview 中的 UITextView

c - 列表,添加到最后,C 编程代码

c - 查找从 2 到上限范围的所有友好数字对 - 不正确的输出

swift - 为什么调用 [unowned self] 时会释放 self