【发布时间】:2015-06-09 07:43:32
【问题描述】:
在C++中,模板不能生成动态库,只能通过头文件来使用。
在 C# 中,泛型函数和类型可以通过 .NET 中的中间语言进行解释。
Rust 没有虚拟机,泛型可以存储在rlib 文件中。它是如何做到这一点的? rlib文件的格式是什么?
【问题讨论】:
-
.rlib 是 rustc 私有的格式,它随时可能更改,并且无意保证兼容性。
在C++中,模板不能生成动态库,只能通过头文件来使用。
在 C# 中,泛型函数和类型可以通过 .NET 中的中间语言进行解释。
Rust 没有虚拟机,泛型可以存储在rlib 文件中。它是如何做到这一点的? rlib文件的格式是什么?
【问题讨论】:
rlib 是一个包含附加元数据的常规静态库(以 ar 格式构建)。除其他内容外,该元数据还包含所有标有 #[inline] 的泛型和函数的完整序列化抽象语法树 (AST)。
这有点像 C++ 编译器将库的头文件推入编译后的二进制文件,然后在链接该库时再次读取它们。
【讨论】: