Size: a a a

2020 January 17

MB

Mikail Bagishov in rust_offtopic
Oleg Andreev
мой енум не раздувает
Енум с двумя вариантами раздувает код также как дженерик с двумя экземплярами)
источник

DF

Dollar Føølish in rust_offtopic
Кстати меня удивило что у поинтеров в расте нет требования к алиасингу вообще
источник

DF

Dollar Føølish in rust_offtopic
Типа сделали песочницу такую
источник

DF

Dollar Føølish in rust_offtopic
Чтобы начинающий ансейф гуру не разьебал все к зуям
источник

OA

Oleg Andreev in rust_offtopic
Mikail Bagishov
Енум с двумя вариантами раздувает код также как дженерик с двумя экземплярами)
а вот и нихуя
источник

OA

Oleg Andreev in rust_offtopic
дженерик *2, а енум +байт
источник

MB

Mikail Bagishov in rust_offtopic
Дженерик:
impl S<T1> {
   fn foo(){}
}

impl S<T2> {
  fn foo(){}
}

Енум:
impl S{
   fn foo(self){
        match self {
            T1=>{}
            T2=>{}
        }
   }
}
источник

DF

Dollar Føølish in rust_offtopic
Кек
источник

MB

Mikail Bagishov in rust_offtopic
Код структурирован по-разному, но его количество не поменялось
источник

А⚙

Антон ⚙️ in rust_offtopic
Eugene
а кто как, откуда узнал про я.п. rust?
Читал статью namespace-а про то, какой нехороший язык Go. Одним из аргументов было то, что вставка в произвольное место слайса неудобна и вообще неинтуитивна. В комментариях разгорелся спор между нормальными людьми и гоферами. Кто-то (не помню, кто именно) привёл ссылку на документацию стандартной библиотеки - мол, для векторов в Rust есть insert, несмотря на линейную сложность. Так и узнал
источник

А⚙

Антон ⚙️ in rust_offtopic
red75prime
Ууу. Ну не надо делать into_iter() на массиве. Не повторяйте ошибку разработчиков stdlib. into_iter() для массива сделан "чтобы было" и не поглощает его, а работает точно так же как и iter()
Он не "сделан, чтобы было". Это взаимодействие двух фич раста: автозаимствования при вызове метода и deref coercion. Первая приводит к тому, что метод вызывается на ссылке на массив, а второе приводит к тому, что вызывается метод into_iter слайса, который, разумеется, отдаёт ссылки
источник

А⚙

Антон ⚙️ in rust_offtopic
Вафель
А ещё, с некоторыми ухищрениями, можно так
Ты как curry сделал?
источник

А⚙

Антон ⚙️ in rust_offtopic
Alex Zhukovsky
Одинаковый
Отнюдь. Произвольный for в C - это в общем случае while в Rust, но никак не for
источник

r

red75prime in rust_offtopic
Антон ⚙️
Он не "сделан, чтобы было". Это взаимодействие двух фич раста: автозаимствования при вызове метода и deref coercion. Первая приводит к тому, что метод вызывается на ссылке на массив, а второе приводит к тому, что вызывается метод into_iter слайса, который, разумеется, отдаёт ссылки
Нет. into_iter() по соглашению должен поглощать значение. Если ему дали массив, он не должен брать на него ссылку. Но возможности поглотить массив не было, поэтому нарушили контракт, просто чтобы into_iter был.
источник

r

red75prime in rust_offtopic
Теперь, кстати, делают правильный вариант.
источник

В

Вафель in rust_offtopic
red75prime
Теперь, кстати, делают правильный вариант.
Там проблемы что при введении правильного крейты ломаются из-за авторефа
источник

А⚙

Антон ⚙️ in rust_offtopic
polunin.ai
их иде подсвечивает
А зачем let-то подсвечивать? О_о
источник

В

Вафель in rust_offtopic
Антон ⚙️
Ты как curry сделал?
через импл Fn{Once,Mut,} для Curry<Sup, F, Rem>(Sup, F) где Sup — тупл аргументов которые уже переданны, F — функция, Rem — тупл аргументов которые ты ещё не передал. Ну и кучу костылей конечно же :)

Со-но вызов curried(arg) берёт элемент из Rem (на уровне типов), добавляет arg в Sup (и на уровне типов и на уровне значений). Если Rem = (T,), то curried(t) вызывает F и возвращает F::Output

Предыдущая более сложная версия давно на гитхабе лежит, новую попроще залью сегодня-завтра, когда подчищу код и пойму как красиво сделать чтобы имплы не пересикались
источник

А⚙

Антон ⚙️ in rust_offtopic
red75prime
Нет. into_iter() по соглашению должен поглощать значение. Если ему дали массив, он не должен брать на него ссылку. Но возможности поглотить массив не было, поэтому нарушили контракт, просто чтобы into_iter был.
Не по соглашению, а по сигнатуре. Такая реализация скорее по недосмотрк получилась
источник

А⚙

Антон ⚙️ in rust_offtopic
Вафель
через импл Fn{Once,Mut,} для Curry<Sup, F, Rem>(Sup, F) где Sup — тупл аргументов которые уже переданны, F — функция, Rem — тупл аргументов которые ты ещё не передал. Ну и кучу костылей конечно же :)

Со-но вызов curried(arg) берёт элемент из Rem (на уровне типов), добавляет arg в Sup (и на уровне типов и на уровне значений). Если Rem = (T,), то curried(t) вызывает F и возвращает F::Output

Предыдущая более сложная версия давно на гитхабе лежит, новую попроще залью сегодня-завтра, когда подчищу код и пойму как красиво сделать чтобы имплы не пересикались
👍
источник