LINUX.ORG.RU

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

Исправление 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. Вызовется как обычный невиртуальный метод. Если бы у метода была директива #, то тело метода даже заинлайнилось бы. Когда ты используешь trait object, то начинается уже динамика.

В haskell примерно то же самое (не буду говорить, как там называется аналог trait object, а то совсем разволнуешься).