通用函数和类型如何存储在 rlib 中?

Posted

技术标签:

【中文标题】通用函数和类型如何存储在 rlib 中?【英文标题】:How are the generic functions and types stored in an rlib? 【发布时间】:2015-06-09 07:43:32 【问题描述】:

在C++中,模板不能生成动态库,只能通过头文件来使用。

在 C# 中,泛型函数和类型可以通过 .NET 中的中间语言进行解释。

Rust 没有虚拟机,泛型可以存储在rlib 文件中。它是如何做到这一点的? rlib文件的格式是什么?

【问题讨论】:

.rlib 是 rustc 私有的格式,它随时可能更改,并且无意保证兼容性。 【参考方案1】:

rlib 是一个包含附加元数据的常规静态库(以 ar 格式构建)。除其他内容外,该元数据还包含所有标有 #[inline] 的泛型和函数的完整序列化抽象语法树 (AST)。

这有点像 C++ 编译器将库的头文件推入编译后的二进制文件,然后在链接该库时再次读取它们。

【讨论】:

以上是关于通用函数和类型如何存储在 rlib 中?的主要内容,如果未能解决你的问题,请参考以下文章

我如何在函数体中使用通用类型

如何在具有通用参数类型的接口中实现函数?

在Typescript中,如何在工厂(ish)函数中实例化的类上获取方法的通用返回类型

如何使通用可变参数函数中先前声明的函数的返回类型成功进行上下文推断?

C语言中函数是如何存储的

用于测试对象类型的通用 Swift 函数