是否可以编译Rust库包以便用户无法查看源代码但仍可以使用该库?
如果是,所有泛型都提供为"源代码"或某些IR,还是Rust实现泛型不同于C++模板?
edd*_*dyb 38
每个库包中都包含许多元数据,无论是静态链接(.rlib)还是动态链接(.so/ .dylib/ .dll):
macro_rules宏#[inline]或是通用的(默认特征方法被认为是通用的Self)所有这些都足以重现一些原始来源(多少取决于泛型的用法),尽管没有评论或其他空白.
函数体在编译器的内部AST结构中被序列化 - 你可以看到它的漂亮形式rustc -Z ast-json lib.rs.
虽然元数据是二进制的,而不是JSON,librustc用于从已编译的包中提取所有导出的函数定义,并且相当容易地打印AST.
在将来,可能没有任何AST过去的类型检查,因此元数据将编码各种类型的IR - 一种可能性是CFG,即"控制流图",其已经在几个地方内部使用.
但是,这仍然会暴露出比Java字节码更多的信息,这将是一个优化,您仍然可以近似原始代码(并轻松获得编译的东西).
因此,我只能推荐两种选择:
template和virtual,具有上的情况下,逐个潜在可用的)的解决方法.| 归档时间: |
|
| 查看次数: |
1583 次 |
| 最近记录: |