Size: a a a

Rust — русскоговорящее сообществo

2020 April 16

DS

Doge Shibu in Rust — русскоговорящее сообществo
У дерайвинга через Generic всё равно пока остаются проблемы, но писать его на порядок проще.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Если это какой-то Box<dyn Generic>, то там за счёт выделения памяти и прыжков по указателю сильно скорость падать будет.
источник

DS

Doge Shibu in Rust — русскоговорящее сообществo
Эрик
Если это какой-то Box<dyn Generic>, то там за счёт выделения памяти и прыжков по указателю сильно скорость падать будет.
Нет, это Generic из frunk, который копирует хаскелевский Generic
источник

G

Gymmasssorla in Rust — русскоговорящее сообществo
Generic из funk - хорошая штука, правда сопроизведения не покрывает
источник

G

Gymmasssorla in Rust — русскоговорящее сообществo
То есть только структуры <-> Hlist
источник

DS

Doge Shibu in Rust — русскоговорящее сообществo
Gymmasssorla
Generic из funk - хорошая штука, правда сопроизведения не покрывает
Вроде есть крейт который эту проблему устраняет
источник

G

Gymmasssorla in Rust — русскоговорящее сообществo
Doge Shibu
Вроде есть крейт который эту проблему устраняет
Ну-ка ну-ка
источник

DS

Doge Shibu in Rust — русскоговорящее сообществo
Gymmasssorla
Ну-ка ну-ка
Не уверен что оно, но по названию внушает надежды: https://docs.rs/frunk-enum-derive/0.2.0/frunk_enum_derive/
источник

G

Gymmasssorla in Rust — русскоговорящее сообществo
источник

DS

Doge Shibu in Rust — русскоговорящее сообществo
Эрик
Если это какой-то Box<dyn Generic>, то там за счёт выделения памяти и прыжков по указателю сильно скорость падать будет.
Ну и да, тут надо добавить, что это штука которая по идее целиком в компайл тайме работает за счёт того как резолвятся трейты.

А так там есть ещё детали, которые надо подправить, чтобы было хорошо, но их не очень много и никаких dyn там нет и в помине
источник

Э

Эрик in Rust — русскоговорящее сообществo
Умно, однако. HNil же ещё и zero-sized, так что там вообще никакого оверхеда нет.
источник

Э

Эрик in Rust — русскоговорящее сообществo
А лист с одинаковыми итемами - получается массив в забавной шляпе, но переменной длины. И можно вместо
impl Trait A for [T; const N] // которое доступно только на nightly, насколько я помню,

делать трейты для HList.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Или нельзя?
источник

DS

Doge Shibu in Rust — русскоговорящее сообществo
Эрик
Или нельзя?
Ну можно попробовать вот в таком виде:
impl <T, Ts: HList + A> A for HCons<T, Ts> { ... }

impl A for HNil { ... }
источник

Э

Эрик in Rust — русскоговорящее сообществo
Нда, на рекурсии оверхед сразу появляется.
источник

DS

Doge Shibu in Rust — русскоговорящее сообществo
Эрик
Нда, на рекурсии оверхед сразу появляется.
Ну по хорошему эти реализации надо в #[inline(always)] обтягивать, чтобы компилятор эту рекурсию инлайнил всегда
источник

G

Gymmasssorla in Rust — русскоговорящее сообществo
А блин, там же Coprod, а какой-то левый Variant
источник

Э

Эрик in Rust — русскоговорящее сообществo
Так, стоп. Этот лист не просто лист, этот лист может сожрать кучу разных impl Trait, без Box<dyn>. Ёлки-иголки!
источник

DS

Doge Shibu in Rust — русскоговорящее сообществo
Эрик
Так, стоп. Этот лист не просто лист, этот лист может сожрать кучу разных impl Trait, без Box<dyn>. Ёлки-иголки!
Ага, гетерогенный же список
источник

DS

Doge Shibu in Rust — русскоговорящее сообществo
Для чего в том числе и нужен
источник