LINUX.ORG.RU

История изменений

Исправление 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.