我正在用 Swift 编写一个 OS X 应用程序,并考虑在 Rust 中实现我的部分模型代码 (MVC pov),以便在 Web 服务器上获得使用的可移植性(因为 Swift 不会扩展到 Web 服务器空间).
如果我将我的 Rust 代码编译为动态库 (.dylib) 并遵循某些准则,我知道它将生成一个外部接口(interface),该接口(interface)看起来像 Swift 可以使用的典型“C”接口(interface)。
在这种情况下,Swift 与 dylib 通信对性能有何影响?它们与用 C 编写的东西通信有什么不同吗? dylib 中的模型组件可以假设为应用程序的核心,因此预计通信将是“喋喋不休的”。
[如果我用 Swift 编写整个代码,模型部分将包含在一个单独的框架/库中,这在任何情况下都非常类似于 dylib。]
最佳答案
使用外部函数接口(interface)时,我可以看到两个主要的成本中心(性能方面):
- 转换:如果您需要来回转换数据(在一侧或更糟糕的是在两侧)
- 失去优化机会:没有内联,因此错失了很多机会
后者可以用“更好”的工具链恢复,特别是因为在这种情况下两种语言都编译成 LLVM IR,而且我知道至少一些 Rust 开发人员/用户有志于为 Rust/C 管理它互动,但我从未见过。
前者需要仔细设计,即便如此,如果您希望在任一侧使用 native 复合类型(String
是主要候选者),也不可避免地会发生一些转换。
关于c - 调用编译为 dylib 的 Rust 库的 Swift 程序的性能影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29366441/