Перейти к содержимому
IMOEX 2111.90 2.8%
·Технологии·16 июля 2026 г.

Что внутри #[derive(Serialize)]: TokenStream, syn, quote и почему этот serde так долго компилируется

Что внутри #[derive(Serialize)]: TokenStream, syn, quote и почему этот serde так долго компилируется

Привет, Хабр!

#[derive(Serialize, Deserialize)] это какая-то одна строка в коде. На холодной сборке за ней прячется двадцать с лишним секунд компиляции, даже если в проекте больше ничего нет. Откройте cargo build --timings на любом не самом маленьком проекте с serde, и serde_derive почти наверняка окажется в первой тройке самых медленных крейтов. При том что в самом serde_derive всего несколько тысяч строк.

Между этой строкой и этими секундами лежит вся инфраструктура процедурных макросов: TokenStream, syn, quote, proc-macro2, watt. Пройдёмся по ней в этой статье.

Это отрывок статьи. Полную версию читайте на сайте источника по ссылке ниже.

Источник: Habr