История изменений
Исправление Siborgium, (текущая версия) :
Вариадики можно переписать как линкед-листы и делать всё в рантайме. Они тоже мономорфные?
Я вам говорю про семантику того, что вы пишете. Я отлично понимаю, что раст проводит мономорфизацию, и после компиляции у вас будет обычный статический код. Тем не менее, семантически он является динамическим. В реализации на вариадиках код полиморфен как по числу аргументов, так и по их типам.
Один параметр. Одного типа.
impl<T, U: Zip> Zip for (T, U) {
Ваш трейт параметризован T
и U: Zip
. Фактически там два параметра: аргумент и следующий zip.
Без потери смысла я могу переписать функцию принимающую (T1, T2, T3, …) в функцию принимающую (T1, (T2, (T3, … ))).
Ну вот не можете. (a, b, c)
<> ((a, b), c)
.
Исходная версия Siborgium, :
Вариадики можно переписать как линкед-листы и делать всё в рантайме. Они тоже мономорфные?
Я вам говорю про семантику того, что вы пишете. Я отлично понимаю, что раст проводит мономорфизацию, и после компиляции у вас будет обычный статический код. Тем не менее, семантически он является динамическим. В реализации на вариадиках код полиморфен как по числу аргументов, так и по их типам.
Один параметр. Одного типа.
impl<T, U: Zip> Zip for (T, U) {
Ваш трейт параметризован T
и U: Zip
. Фактически там два параметра: аргумент и следующий zip.
Без потери смысла я могу переписать функцию принимающую (T1, T2, T3, …) в функцию принимающую (T1, (T2, (T3, … ))).
Ну вот не можете. a -> b -> c
<> (a -> b) -> c
.