首页 > 解决方案 > 我可以在 Swift 应用程序中引用 Ada 库吗?

问题描述

我对 Swift 比较陌生(我过去曾修改过 Python 和 HTML)——但我目前正在与一个小组一起开发一个应用程序。

这个应用程序已经作为一个用 Ada 编写的桌面程序存在,我们希望将它移植到 Swift 并推出一个 iPhone 应用程序。

我的理解是我可以(可能?)使用转换器将 Ada 转换为 C,然后在 Swift 中引用 C?这是正确的,还是因为不熟悉这些语言而忽略了一些东西?

如果正确,由于我在 Swift 和 C 方面的经验很少,我将如何实际执行此操作?

这是一个非常重要的问题,所以感谢您的任何帮助或见解!编辑:所说的桌面应用程序是开源的,可供所有人使用-我不打算窃取任何人的工作

标签: iosswiftada

解决方案


我假设您可以轻松地提取要在 iPhone 程序中使用的 Ada 程序部分。如果您要移植的代码具有其他依赖项,那么您必须确保您也可以获得 iOS 的所有这些依赖项。如果您使用 UI 工具包,这可能会非常困难。

要在 Swift 中调用外部函数,通常需要使用桥接头。您的目标的桥接头包含 Swift 应该能够调用的类、函数和变量的 C 和 Objective-C 声明。只要您要调用的语言可以导出与 C 兼容的绑定(应该是 Ada 的情况),那么您就可以通过在桥接头中声明它们来调用这些绑定。

如果您要使用的桌面 Ada 程序部分可以轻松地隔离在库(静态或动态)中,并且您能够将该库构建为 ARM Mach-O 库,那么只需声明您想从应用程序桥接头中的库中使用的函数。您可以参考GNAT User's Guide for Native Platforms: Interfaceing to C以获取用于将 Ada 函数公开给 C 的指令,并且通过将其公开给 C,您也将其公开给 Swift。我会先尝试这个,因为维护几乎未修改的 Ada 源几乎肯定会比维护 Ada 源的机械翻译 C 版本更容易。

如果这不起作用,那么是的,将 Ada 源代码翻译成 C 代码也将允许您从 Swift 引用它。您还必须确保您需要调用的函数在您的桥接头中声明。


推荐阅读