Compile-time reflection in D
Jun. 17th, 2014 12:46 pmХорошее выступление с недавно прошедшей конференции:
Компайл-тайм интроспекция + компайл-тайм кодогенерация = big win. Я правильно понимаю, что в Rust (а также С++, Go, Swift) ничего подобного нет и не предвидится?
Компайл-тайм интроспекция + компайл-тайм кодогенерация = big win. Я правильно понимаю, что в Rust (а также С++, Go, Swift) ничего подобного нет и не предвидится?
no subject
Date: 2014-06-17 05:55 pm (UTC)Нужно что-то типа частичной специализации traits. Есть trait Aaa. Есть дефолтная реализация, которая подходит для любого типа. И пользователь, если хочет, может определить для некоторого своего типа реализацию Aaa.
Тогда, когда мы итерирерируемся по полям некоторой структуры, для каждого поля существует какая-нибудь реализация trait Aaa, поэтому с каждым полем можно сделать что-то полезное, и тайпчекинг этого кода можно делать до инстанциации с кокретными типами.
Правильно?
no subject
Date: 2014-06-17 06:40 pm (UTC)Для примера, если этот trait называется Foo, то видя fn foo<T: Foo>(x: T) компилятор знает, что ему нужен impl Foo для данного типа. Он попробует его сгенерировать. Если получилось -- OK, если нет -- ошибка. В остальном как с обычными traits.