Kerrigan
второй растобук хорош
Kerrigan
там нормально объяснили Rc/Arc
Alexander
Покажешь замеры?
https://github.com/chronotope/chrono/issues/224
Αλεχ
клево
Αλεχ
а как ты сослался в markdown на строку в файле?
Αλεχ
я тоже так хочу
Αλεχ
Кстати чел дело говорит
Αλεχ
ты пробовал эту #[serde(with = "chrono_optimized_serde")]?
Αλεχ
по идее одну простую функцию реализовать надо
Alexander
Небольшой срез по вчерашнему, может оно всем очевидно, но может быть кому-то и полезно будет: Оказывается у serde есть целый атрибут, который в документации говорится о том что он прямо специально для дат 'with'. Я завернул в него и всё стало хорошо.
Alexander
Но , мне не очень понравилось что получается что у меня сейчас не вектор дат, а вектор моих обёрток, т.е. надо везде писать .0 для вынимания даты. Что вроде мелочь, а не приятно.
Αλεχ
каких оберток? Я думал у тебя структура с датой и еще чем-то
Alexander
Там есть ещё атрибут remote, который специально сделан чтобы обертки не было, но у меня опять же вектор - и хз как его наложить на вектор, тем более через soa-derive.
Alexander
каких оберток? Я думал у тебя структура с датой и еще чем-то
У меня нет такой структуры, у меня есть структура с вектором дат и векторами чего-то ещё т
Alexander
Может быть можно переопределить сериализатор на вектор дат, но тоже как-то руками это писать не хочется. + Опять же структура генерится макросом.
Αλεχ
А тебя дефолтный сериализатор вектора не устраивает?
Alexander
Как раз устраивает.
Alexander
Но атрибут serde указывается на поле. В котором как раз вектор у меня.
Αλεχ
А, я тебя понял
Αλεχ
я б на твоем месте забил если честно
Αλεχ
700% это конечно звучит страшно, но на деле скорее всего копье
Αλεχ
хотя по фану можно и разобраться
Cuno
но... как же... перформанс?
Alexander
700% это конечно звучит страшно, но на деле скорее всего копье
Ну если забить, то можно было и на питоне всё это за пол-дня сделать и не мучаться вообще.
Evgεny
кажется, он что-то начинает подозревать
Αλεχ
Маjко
В чем сакральный смысл?
Маjко
Это в 1.25 ввели
Маjко
Просто для красоты? WTF То есть это то, чем кажется? Они добавили новую грамматику без семантики?
Cuno
Скорее всего как-то связано с матчами вида`Foo::A | Foo::B`
Маjко
Хз, такой синтаксис только путает. Правило для A проваливается дальше, а для B и C нет, хотя везде знак или. И чем плох match x { Foo::A | Foo::B => println!("AB"), Foo::C => println!("C"), }
Маjко
Как же сука сложно в тг форматировать отступы
Cuno
https://github.com/mdinger/rfcs/blob/3b052a6311cc52d2767790576a8d8ebe443ccd53/text/0000-optional-match-vert.md В F# так можно, давайте добавим в руст!
Filipp
Это в 1.25 ввели
А есть рфц или пр или че-нить?
Filipp
https://github.com/rust-lang/rust/blob/master/RELEASES.md
Cuno
А есть рфц или пр или че-нить?
линк сообщением выше же
Filipp
Я нашел и сам себе ответил
Filipp
Я про это
А я коммент прочитал, увидел стоп-слово и дальше не читал
պլհկ
https://www.reddit.com/r/rust/comments/87zdq7/announcing_rust_125/dwgq9ry/
Αλεχ
Как это облегчает кодген?
Меньше краевых случаев
Αλεχ
любой свитч начинается с палки, а не "А это первое у нас значение или не первое"
Αλεχ
очевидно же
Filipp
Посоны как Vec<Option<T>> в Option<Vec<T>> конвертнуть красиво?
Денис
очевидно, что в общем случае никак, потому что у тебя исходный Vec может содержать как Some, так и None
Evgεny
а че там fold
Filipp
правильный ответ .collect
Filipp
https://play.rust-lang.org/?gist=d9dc4ff4df3a99262cfc43e5d01b0077&version=nightly
Денис
правильный ответ — в общем случае — никак
Filipp
в общем случае если в векторе есть None, то возвращается None, в остальных - Some(Vec<T>)
Денис
это не общий случай
Filipp
кажется вполне однозначная конверсия
Денис
описываемое тобой поведение — частный случай
Денис
если бы ты сказал "мне нужно, чтобы при наличии None весь вектор превращался в тыкву", то тогда вопросов бы не было
Αλεχ
Посоны как Vec<Option<T>> в Option<Vec<T>> конвертнуть красиво?
fn main() { let foo = vec![Some(1), None, Some(2)]; let foo: Vec<_> = foo.iter().filter_map(|x| *x).collect(); println!("{:?}", foo); } ?
Cuno
алсо, для такого flat_map есть
Денис
если бы написал into_iter, не пришлось бы звёздочку юзать)
Αλεχ
Это Vec<Option<T>> -> Vec<T>
а в каком случае должен быть None?
Danieλ
Если нужно вернуть none если хотя бы один элемент none, то см. хаскелёвый sequence
Cuno
а в каком случае должен быть None?
Вообще, это вроде как очевидно было...
Денис
хз, мне не было
Денис
что конечно не делает мне чести
Αλεχ
fn vec_or_none<T>(input: Vec<Option<T>>) -> Option<Vec<T>> { let len = input.len(); let result: Vec<_> = input.into_iter().filter_map(|x| x).collect(); if result.len() == len { Some(result) } else { None } } fn main() { println!("{:?}", vec_or_none(vec![Some(1), None, Some(2)])); println!("{:?}", vec_or_none(vec![Some(1), Some(2)])); }
Αλεχ
если кажется что неоптимально можно take_while сделать чтобы на первом None останавливаться
Αλεχ
но ваще неясно в чем проблема написать
Денис
ты чо
Денис
он же скинул уже решение
Денис
.collect()
Αλεχ
эм?
Денис
правильный ответ .collect