【发布时间】:2018-03-01 17:12:11
【问题描述】:
我正在将原生 API 提升到 Scala。似乎有两条路径:使用 JNI 或使用 Scala Native。
JNI 使用在 Java 中创建您想要的方法,然后在 C 中隐藏它们,您可以在其中编写 C 代码来访问您的 API。优点:您可以直接使用原生 API 的数据结构。缺点:您的 Scala 代码现在还必须提供自己的本机包装库,这增加了可移植性复杂性的可能性,现在您两次包装了该库,一次是在 JNI C 中将其放入 JVM,然后是在 Java/Scala 模块中。很多工作,很多地方都有错误。我多次使用这条路,我认为这就是世界的本来面目。
随之而来的是 Scala native,它在 Scala 中执行相反的操作并隐藏 C 函数。优点:你不用 C 语言编写,所以没有新的本地库,也没有双重包装。缺点:您似乎只能提升 Scala 原生原语,因此无法访问复杂的原生数据结构。如果原生库不能使用它的数据结构,它就会变得毫无用处。
正如预期的那样,两者都不是非常便携,但是有一些我忽略的功能可以解决这些方法中的一种或两种方法的缺点吗?还是有其他理由选择原生 Scala 而不是 JNI?
【问题讨论】:
标签: scala java-native-interface