Rust 库可以作为二进制文件分发,这样最终用户就看不到源代码了吗?
是否可以编译一个Rust库板条箱,这样用户就看不到源代码,但仍然可以使用库Rust 库可以作为二进制文件分发,这样最终用户就看不到源代码了吗?,rust,Rust,是否可以编译一个Rust库板条箱,这样用户就看不到源代码,但仍然可以使用库 如果是,所有的泛型都是“源代码”还是“IR”,或者C++不同于C++模板实现泛型? 每个库箱都包含大量元数据,静态链接( .rLIB < /code >)或动态链接( ./code >/ .DyLIB < /code >/code > .dll < /code >): 模块结构 导出的宏\u规则宏 类型和特征定义 常量及其初始值设定项表达式 所有函数的签名 标记为#[inline]或泛型的每个函数的整个主体(默认特征方
如果是,所有的泛型都是“源代码”还是“IR”,或者C++不同于C++模板实现泛型?
每个库箱都包含大量元数据,静态链接(<代码> .rLIB < /code >)或动态链接(<代码> ./code >/<代码> .DyLIB < /code >/code > .dll < /code >):- 模块结构
- 导出的
宏宏\u规则
- 类型和特征定义
- 常量及其初始值设定项表达式
- 所有函数的签名
- 标记为
或泛型的每个函数的整个主体(默认特征方法被视为泛型而非#[inline]
)Self
函数体是在编译器的内部AST结构中序列化的-您可以通过
rustc-zASTJSON lib.rs
看到它的一个漂亮形式
虽然元数据是二进制的,而不是JSON,但是使用librustc
从编译的板条箱中提取所有导出的函数定义,并且相当容易地打印ASTs
在未来,可能不会有任何AST过去的类型检查,因此元数据将对各种IR进行编码——一种可能是CFG,即“控制流图”,它已经在一些地方内部使用
然而,这仍然会暴露出比Java字节码更多的信息,这将是一种优化,您仍然可以近似原始代码(并且很容易得到编译的东西)
因此,我只能推荐两种选择:
模板
和虚拟
,C++应该有类似的限制,并且可能会根据具体情况提供解决办法)二进制分发通常用于简化部署到不能(或不想)的地方从源代码本身构建。您是否对此感兴趣,或者主要是对库用户隐藏源代码感兴趣?出于好奇,您提出这个问题的动机是什么?在C/C++中,头文件是手动编写的,因此您可以更好地控制签名、宏、模板等的导出方式。Rust会自动完成,我无法完成我什么也找不到。