Четох „24 days of Rust“ и примера за AnyMap
използване току-що взриви ума ми. Разгледайте следния код:
#[deriving(Show)]
struct Port(u32);
#[deriving(Show)]
struct ConnectionLimit(u32);
Казва:
Тук типовете
Port
иConnectionLimit
са абстракции над основното цяло число (без допълнителни разходи по време на изпълнение!).
Много добре, разбирам как може да се постигне това. Всички типове се проверяват по време на компилация и по време на изпълнение имаме само u32. Но в този случай как е възможно да се създаде карта от някакво TypeId
до Box<Any>
? И как Any може да бъде кастинг към всеки подтип, като u32?
изходният код на AnyMap
е доста сложен и включва много метапрограмиране. Как работи? Може би просто има грешка в „24 days of Rust“ и Port
и ConnectionLimit
всъщност имат време за изпълнение?