我们有一个商业销售的应用程序,目前是用 Java 和 Python 编写的。出于性能和非崩溃的原因,我们目前正在考虑转向 Rust。
在我们目前的 Java/Python 架构中,我们有一个功能可以管理特定客户想要的定制。这涉及将 Java jar/类和 python 文件放置在指定为特定客户定制的特定文件夹下。在应用程序配置中,Java 类路径和 PYTHON_PATH 将此文件夹放在包含正常的、未自定义的应用程序代码的文件夹之前。因此,此特殊文件夹中的任何代码都将覆盖应用程序的正常、非自定义行为。
当迁移到 Rust 时,我们希望以某种形式保留此功能。我们当然希望避免向客户分发核心应用程序的源代码(现在主要是 Java)并让客户进行编译,如果我们使用 Rust 的模块功能,这就是我们需要做的。
当我们使用 Rust 时,有没有办法实现这个功能呢?
目标操作系统是 Linux 和 Windows 的混合体。
听起来你想要某种插件架构,带有一个在运行时加载的动态库(也是用 Rust 编写的)。
不幸的是,Rust 还没有稳定的 ABI,这意味着这些库必须使用与构建主应用程序完全相同的编译器进行编译。一种解决方法是从插件端公开 C ABI,并使用 C FFI 来调用它(如果您可以忍受由此带来的不安全和麻烦)。还有abi_stable板条箱,它可能使用起来更安全/更简单。
脚本语言可能是另一个值得探索的途径。例如,Rhai是一种专门为 Rust 应用程序而开发的语言,并且可以无缝地进行互操作。当然,脚本部分的性能不会像本机 Rust 代码那么好。
| 归档时间: |
|
| 查看次数: |
870 次 |
| 最近记录: |