gpt4 book ai didi

scala native 与 JNI

转载 作者:行者123 更新时间:2023-12-03 21:24:49 25 4
gpt4 key购买 nike

我正在将原生 API 提升到 Scala。似乎有两条路径:使用 JNI 或使用 Scala Native。

JNI 使用在 Java 中创建您想要的方法,然后在 C 中隐藏它们,您可以在其中编写 C 代码来访问您的 API。优点:您可以直接使用原生 API 的数据结构。缺点:您的 Scala 代码现在还必须提供自己的 native 包装库,这增加了可移植性复杂性的可能性,现在您包装了两次库,一次在 JNI C 中将其放入 JVM,然后在 Java/Scala 模块中。很多工作,很多地方都有错误。我多次使用这条路,我认为这就是世界的方式。

然后出现了 Scala native,它在 Scala 中执行相反的操作并隐藏 C 函数。优点:你不用 C 语言编写,所以没有新的本地库,也没有双重包装。缺点:您似乎只能提升 Scala 原生原语,因此无法访问复杂的原生数据结构。如果不能使用其数据结构,这会使 native 库毫无用处。

正如预期的那样,两者都不是非常便携,但是我是否有一些功能可以解决这些方法中的一种或两种方法的缺点?还是其他一些理由选择原生 Scala 而不是 JNI?

最佳答案

Scala Native 不会在基于 JVM 的 Scala 中“隐藏”C 函数。 Scala Native 是裸机/原生 C 语言的直接等价物,但使用 Scala 语法而不是 C 语法和 Scala 语义(没有任何基于 JVM 的语义)而不是 C 语义。如果您选择 JNI,那么您可以想象在您的问题范围内有 2 个选择,即使用哪种语言从 JVM 外部调用 JNI 注入(inject)到 JVM:C 或 Scala Native。如果您要选择 Scala Native 在基于 JVM 的基础架构(例如 Android)上编写 UI 代码,那么您将有效地选择 JNI 以及让 Scala Native 调用 JNI(而不是 C 调用 JNI)。 (这里所有提到的 C 也适用于 C++。)总而言之,使用 Scala Native 调用 JNI 从 JVM 外部执行 UI 函数调用是非常不正统的(并且仅在基于 Xamarin 的世界中广泛使用)。

关于scala native 与 JNI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49055186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com