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