Что внутри #[derive(Serialize)]: TokenStream, syn, quote и почему этот serde так долго компилируется
![Что внутри #[derive(Serialize)]: TokenStream, syn, quote и почему этот serde так долго компилируется](https://habrastorage.org/getpro/habr/upload_files/7fb/987/984/7fb987984f5d874b6afe0e31825df98b.png)
Привет, Хабр!
#[derive(Serialize, Deserialize)] это какая-то одна строка в коде. На холодной сборке за ней прячется двадцать с лишним секунд компиляции, даже если в проекте больше ничего нет. Откройте cargo build --timings на любом не самом маленьком проекте с serde, и serde_derive почти наверняка окажется в первой тройке самых медленных крейтов. При том что в самом serde_derive всего несколько тысяч строк.
Между этой строкой и этими секундами лежит вся инфраструктура процедурных макросов: TokenStream, syn, quote, proc-macro2, watt. Пройдёмся по ней в этой статье.
Это отрывок статьи. Полную версию читайте на сайте источника по ссылке ниже.
Источник: Habr