172 похожих чатов

Бтв, а в чем разница impl и генериков на входе

и impl и динамической диспетчеризации на выходе?

6 ответов

3 просмотра

APIT (argument position impl trait) это сахар для дженерика, от дженерика отличается только тем, что его нельзя в турборыбе явно задать (это может быть как плюсом так и минусом). RPIT (return position impl trait) это экзистенциальный тип т.е. снаружи функции известен только layout и то перечисленные трейты, но не сам тип. Но при этом внутри функции это вполне определённый и единственный тип. В каком-то смысле RPIT и дженерики/APIT это противоположности: — дженерики/APIT это forall, снаружи функции тип известен, а внутри — нет — RPIT это exists, снаружи тип не известен, а внутри — известен Динамическая диспетчеризация это динамическая диспетчеризация. Т.е. у тебя есть индерекция и vtable который позволяет вызывать функции. Можно использовать только object safe трейты. -> Vec<impl Trait> это всё ещё гомогенная коллекция, а вот -> Vec<Box<dyn Trait>> это скорее гетерогенная (разные боксы могут указывать на экземпляры разных типов)

Vadim-Chashechnikov Автор вопроса
вафля'
APIT (argument position impl trait) это сахар для ...

То есть, если я возвращаю impl Trait, то компилятор должен знать какой именно тип я верну

Vadim Chashechnikov
То есть, если я возвращаю impl Trait, то компилято...

Да. Во время кодгена impl Trait заменяется на реальный тип.

Vadim-Chashechnikov Автор вопроса
вафля'
Да. Во время кодгена impl Trait заменяется на реал...

А, тогда это, грубо говоря, генерик с неявным приведением типов

Vadim-Chashechnikov Автор вопроса
вафля'
нет?...

Блять, я залагал, в расте нельзя возвращать генериком трейт из функции.

Похожие вопросы

Обсуждают сегодня

Вместо import и library придется писать importlib?
The Bird of Hermes
19
А кто-нибудь запихивал сборку перловых модулей/образов с perl приложениями в окружения без интернета (в специализированном CI/CD)? У меня сейчас есть ряд cpanfile, которые н...
Andrey Smirnov / 𝓪𝓵𝓵𝓽𝓮𝓻 /
12
а как с таким борятся ? про термин стак тут мне пока не попадалось ghci> foldr (\(CotMD n ctM _) (mstep,pos) -> if ctM > mstep then (ctM, n) else (mstep, pos)) (0,0) $ take ...
Fedor
13
вот вопрос, вот про это type Events = [String] type Probs = [Double] у курта есть задание Если бы ваши типы Events и Probs были самостоятель­ ными типами данных, а не просто...
Fedor
8
вот что получается в интерпрететоре, работает и результаты выгляд разумными, но то как выглядит код мне не нравиться, а понять куда двигаться не очень могу, если кому не лень ...
Fedor
42
А ещё docker можно к ассемблеру прикрутить. В целом, системы сборки это настолько несвязанная вещь... Это оффтоп, можно сказать, во всех чатах. Это просто проект, который помо...
КТ315
22
сурсы: import std/asyncdispatch, std/httpclient, std/json, std/sequtils, std/strutils, std/unicode, std/unidecode, std/uri, uuid4, regex const GPT4_API...
Qtless Qtless
4
получается, что он находит одинаковое колво тегов, с разными именами, или я что тто не понял в таксоупе ?
Fedor
46
Раз пошла тема про XML... Delphi XE 10.4.2(но это не важно), XML Data Binding Несколько XSD. В основном содержатся include на расширения. Несколько Namespace, это важно. Бин...
Alexey Gavrilov
4
Кто-нибудь может проверить на 11.3 и более ранних версиях, последнее число в трех нижних строках одно и тоже или нет? var Dict: TDictionary<Integer, string>; i, j: Intege...
Boris N (MBo)
6
Карта сайта