Anonymous
from into
Vladimir
Vladimir
Это не as
Anonymous
бля это не суть
Anonymous
трейт имплементирует только i32
Anonymous
но раст не может это определить
Vladimir
Ну тогда сделай чтоб трейт наследовал From<i32> или какого типа там у тебя тройка
Anonymous
это не изменит отсутствия фичи
Vladimir
но раст не может это определить
Раст и не должен, потому что какой-то Вася может в своей либе реализовать трейт для своего типа, ты об этом не знаешь, но код сломается
Vladimir
Это тебе не шаблоны с++ где все разруливается на месте
Anonymous
но это же конкретный кейс когда разруливается (но всегда ошибка)
Anonymous
вообще какой-нибудь трейт PrimitiveCast<Self, To> в std по-сути мог бы быть?
Vladimir
Ещё раз, Раст не гадает на картах. Типаж это ограничение, ты задаешь ограничения на входные параметры, и используешь потом только эти ограничения. Не для каждого возможного типа реализующего типаж есть as
Anonymous
ни для какого
Vladimir
вообще какой-нибудь трейт PrimitiveCast<Self, To> в std по-сути мог бы быть?
Не мог, зачем? Слишком мало примитивного каста
Anonymous
что значит "зачем"
Anonymous
я про возможность существования а не нужду в таковом
Vladimir
В вселенной где в СТД либу бы пихали лефтпады на все случаи жизни мог бы существовать PrimiticeCast<T> для такого, но мы, к счастью, живём не в этом мире
Alexey
нубский вопрос: traits в Rust это что-то вроде typeclasses из Haskell'я?
Anonymous
нубский вопрос: traits в Rust это что-то вроде typeclasses из Haskell'я?
да, но первый аргумент (Self) всегда имплицитен
Alexey
спасибо
Vladimir
да, но первый аргумент (Self) всегда имплицитен
Тогда зачем ты его явно написал?
Anonymous
че
Vladimir
Ты говоришь, что Self как тайп параметр - не явен
Anonymous
имплицитен и не явно передается
Anonymous
какая-то попытка придраться к терминологии
Cuno
трейт имплементирует только i32
в чем тогда смысл generic'а?
Anonymous
нету
Anonymous
просто написал минимальный пример
Cuno
ну по примеру не понятно зачем эта фича вообще нужна
Маjко
В чем проблема их перевезти с собой?
Сережа
вы сначала определитесь, куда, а потом уже решайте в чем проблема
Andrew
О, ёлку после рождества кто-то выкинул
Safort
Не был в чате около двух недель. Раст по прежнему игрушечный?
Anonymous
да
Safort
Так да или нет? :/
Vladimir
https://www.reddit.com/r/rust/comments/7lu6di/mrustc_alternate_rust_compiler_in_c_now_broken/
Vladimir
Раст теперь может скомпилить с фичей ub
Safort
https://www.reddit.com/r/rust/comments/7lu6di/mrustc_alternate_rust_compiler_in_c_now_broken/
Значит всё ещё игрушечный. Очень хорошо, а то боялся, что что-то важное пропущу.
Vladimir
Нет же, какие игрушки тут
Vladimir
Тут ентрерпрайз
Safort
Раст теперь может скомпилить с фичей ub
Енто жи андевайнед бихейвиор? Т.е. его теперь его можно ещё проще сломать, прям как игрушку?
Safort
Нет же, какие игрушки тут
Сорян если чо, я просто фронтендер, а не программист.
Anonymous
сломать его тривиально же
Vladimir
Прям как с++
Alexey
"Типаж" называется
это что же, значит и в плюсах есть типажи? ибо в шаблонном программировании всякое называеют trait'ами.
Anonymous
fn main() { break rust; }
Loyd
Но вообще, в крестах концепты
Anonymous
причем здесь концепты 🤔
Loyd
Эм. Что значит "причём"?
Alexey
коньцептов пока что нету.
Loyd
Это да. Опять не включили
Loyd
Так что раст чуток ещё поживёт
Alexey
а так.. вот вам traits: https://erdani.com/publications/traits.html
Alexey
https://accu.org/index.php/journals/442
Vladimir
причем здесь концепты 🤔
Концепты ту же роль что и типажи выполняют, заставляют обобщенныц тип следовать каким-то правилам.
Сережа
в C++ есть CRTP на котором ваши трейты еще в 98 реализовывали
Ignat
Я ведь правильно понимаю, что концепты просто избавляют от синтаксических хаков уровня SFINAE, но всё ещё не умеют ни выводиться, ни чекаться на достаточность?
Loyd
Когда мы говорим про типажи, это всегда два пункта: (а) ограничения, (б) особая статическая диспетчеризация.
Loyd
Первое заменяется на интерфейсы. Второе (частично) на явные вызовы функций
Сережа
боком раздувания бинарника и генерирования кода для каждого случая
Сережа
а я думал типаж, это поведение которое можно добавить типу, а типаж и миксин не одно и то же?
Loyd
боком раздувания бинарника и генерирования кода для каждого случая
Покажи, как с помощью crtp (который, кстати, не изобретение С++, в любом ЯПе с genericом есть такой подход и без названия) добавить метод уже существующему классу?
Сережа
а где это написано?
Loyd
Миксин становится частью контруируемого объекта, и диспетчеризация будет соответственная (динамическая, через vtable какой-то)
Сережа
в расте есть генерики, как в расте CRTP сделать?
Сережа
наследования то нету
Anonymous
crtp?