我们有一个商业销售的应用程序,目前是用Java和Python编写的。我们目前正在考虑转移到Rust的性能和非崩溃的原因。
在我们目前的Java/Python架构中,我们有一个管理特定客户想要的定制的特性。这涉及到将Java jar/类和python文件放在一个为特定客户定制而指定的特定文件夹下。在应用程序配置中,Java类路径和PYTHON_PATH将此文件夹放在包含普通的、未定制的应用程序代码的文件夹之前。因此,此特殊文件夹中的任何代码都将覆盖应用程序的正常、未定制的行为。
我们希望在迁移到Rust时以某种形式保留这一特性。我们当然希望避免向客户分发核心应用的源代码(现在主要是Java),并让客户进行编译,如果我们使用Rust的模块特性,我们将需要这样做。
当我们进入Rust时,有没有办法实现这个特性?
目标操作系统是Linux和Windows的混合。
3条答案
按热度按时间ffscu2ro1#
听起来你需要某种插件架构,有一个在运行时加载的动态库(也是用Rust编写的)。
不幸的是,Rust doesn't have a stable ABI yet,这意味着这些库必须用构建主应用程序的完全相同的编译器来编译。一个解决方案是从插件端暴露一个C ABI,并使用C FFI来调用它,如果你能忍受由此带来的不安全和麻烦的话。还有
abi_stable
机箱,它可能更安全/更简单地使用。脚本语言可能是另一个探索的途径。例如,Rhai是一种专门为Rust应用程序开发的语言,它可以无缝地互操作。当然,脚本部分的性能不会像Rust本地代码那样好。
gj3fmq9x2#
我认为,如果不重新编译它,或者至少编译您打算为单个用户创建的
config.rs
文件,这是不可能的。假设最终用户的系统上未安装Rust,则可能有以下几种替代方法:
.yaml
文件加载配置(类似于GitHub操作的工作方式)azpvetkf3#
摘自modules feature的官方语言文档
您可以将商业项目设置为将源代码作为外部机箱,然后使用
path attribute
将其加载到主项目中。一个最小的例子,已经在文件上: