История изменений
Исправление
dave,
(текущая версия)
:
Хорошо, раскрою свою мысль. Шаблоны C++ и traits из rust связаны вот в каком сценарии. Берем асинхронные вычисления Future. В новом C++ это делается через шаблон future. В rust это делается через параметризованный trait Future. По сути это монада и там, и там.
Так вот, если ты вызовешь в rust метод and_then (это аналог монадической связки), то если это не trait object, то метод вызовется без использования vtable. Вызовется как обычный невиртуальный метод. Если бы у метода была директива inline, то тело метода даже заинлайнилось бы. Когда ты используешь trait object, то начинается уже динамика.
В haskell примерно то же самое (не буду говорить, как там называется аналог trait object, а то совсем разволнуешься). Еще при использовании class constraints возникает динамика, если нет прагм, хотя тебе же haskell не интересен.
Исправление
dave,
:
Хорошо, раскрою свою мысль. Шаблоны C++ и traits из rust связаны вот в каком сценарии. Берем асинхронные вычисления Future. В новом C++ это делается через шаблон future. В rust это делается через параметризованный trait Future. По сути это монада и там, и там.
Так вот, если ты вызовешь в rust метод and_then (это аналог монадической связки), то если это не trait object, то метод вызовется без использования vtable. Вызовется как обычный невиртуальный метод. Если бы у метода была директива inline, то тело метода даже заинлайнилось бы. Когда ты используешь trait object, то начинается уже динамика.
В haskell примерно то же самое (не буду говорить, как там называется аналог trait object, а то совсем разволнуешься).
Исходная версия
dave,
:
Хорошо, раскрою свою мысль. Шаблоны C++ и traits из rust связаны вот в каком сценарии. Берем асинхронные вычисления Future. В новом C++ это делается через шаблон future. В rust это делается через параметризованный trait Future. По сути это монада и там, и там.
Так вот, если ты вызовешь в rust метод and_then (это аналог монадической связки), то если это не trait object, то метод вызовется без использования vtable. Вызовется как обычный невиртуальный метод. Если бы у метода была директива # В haskell примерно то же самое (не буду говорить, как там называется аналог trait object, а то совсем разволнуешься)., то тело метода даже заинлайнилось бы. Когда ты используешь trait object, то начинается уже динамика.