Как общие функции и типы хранятся в rlib?

В С++ шаблоны не могут быть сгенерированы в динамические библиотеки, мы можем использовать их только с помощью файлов заголовков.

В С# общие функции и типы могут быть интерпретированы промежуточным языком в .NET.

У Rust нет виртуальной машины, и генераторы могут быть сохранены в файлах rlib. Как это удалось достичь? Каков формат файлов rlib?

Ответы

Ответ 1

An rlib - это обычная статическая библиотека (встроенная в формат ar), которая содержит дополнительные метаданные. Эти метаданные содержат, помимо всего прочего, полное сериализованное абстрактное синтаксическое дерево (AST) для всех дженериков и функций, помеченных #[inline].

Это немного похоже на то, что есть компилятор С++, который перетаскивал файлы заголовков библиотеки в скомпилированный двоичный файл, а затем снова считывал их при связывании с этой библиотекой.