Денис
и чем это лучше , чем "123".parse().map_err(Into::into) ?
qthree
Тем же чем ? лучше чем try!()
Денис
ну нет
Денис
try! увеличивает вложенность, а ? — нет
Денис
но
Денис
несколько символов таки экономятся
qthree
в каждой функции связанной с utf8, fs, path и т.д. таких map_err(From::from) прихожится по 2-3 на функцию писать (по штуке на кложуру и итоговый)
Денис
ну сделай пропозал, почему нет :) только я бы назвал это err_into, а не err_from, и тогда уж надо делать и ok_into, для симметричности )
qthree
в итоге код состоит не из логики а из сплошных from и map
Денис
если ты ВСЕГДА конвертишь результат, значит ты что-то делаешь не так, не? :)
Andrey
а я так тоже делаю. bla_bla().or_bad_request()?; вообще для таких трейтов даже naming convention есть. их принято называть ResultExt, OptionExt...
qthree
Эм, потому что в одном случае Utf8Error, в другом IoResult, в третьем еще что то, а тебе нужен один тип ошибки?
Денис
он тебе нужен, когда у тебя внутри может произойти много всяких ошибок
Денис
и вот тогда надо конвертить, ибо другого варианта нет
qthree
Я про это тогда и говорю
Денис
ну ок
Денис
реально, сделай крейт, который расширяет Result
Денис
как @andy128k подсказывает
Денис
мини-крейтик
Денис
пропиарь его на реддите
Денис
если народ будет активно пользоваться — можно будет задуматься и о том, чтобы в STD добавить
qthree
Причем в failure есть ResultExt но там такого метода нет
Денис
ну заведи им ишшью, там же живые люди сидят
Денис
приведи им примеры, от которых у тебя горит
Денис
ваще мне кажется, что .map(Into::into) полностью укладывается в функциональную парадигму
Денис
так что такое утверждение я бы назвал слишком толстым)
Денис
в итоге код состоит не из логики а из сплошных from и map
qthree
для std и failure возможно лишнее, тем более если try-throw введут, а крейт запилю
qthree
и назову BetterThanTryThrow
Berkus
и назову BetterThanTryThrow
клиппи скажет что плохое имя
Berkus
надо snake_case
qthree
bttt
Andrey
щас бы роботов слушать
qthree
ну сделай пропозал, почему нет :) только я бы назвал это err_into, а не err_from, и тогда уж надо делать и ok_into, для симметричности )
осталось с названием функции определиться, err_into будет путаться с into_result и from_error от Try
Денис
што?
qthree
я думаю о fit_err, fit_error или match_err
Денис
ну, смотри сам
պլհկ
https://docs.rs/futures/0.1/futures/future/trait.Future.html#method.from_err
Loo
щас бы роботов слушать
щас бы не придерживаться единого стиля
Anisyan
ценник не помнишь? =)
Anisyan
спасибо
Денис
мне казалось кто-то недавно сталкивался с такой проблемой? https://play.rust-lang.org/?gist=1324c1dc8d5148e4bf95ba703328ef53&version=nightly&mode=debug
Денис
а, через индекс по-моему можно обойти
Денис
https://play.rust-lang.org/?gist=2c202496299c81edd372bd40bd810fbd&version=stable&mode=debug — но это пиздец конечно
Денис
у мапы есть entry, у вектора — нет
Cat
так ты же делаешь обёртку
Cat
короче забей, это я тут к названиям придираюсь
Денис
в смысле?)
Денис
я бы ваще заюзал мапу, но тип не имплементит ни ord, ни hash
qthree
а, через индекс по-моему можно обойти
а на самом деле там конечно не u8?
Денис
а на самом деле там конечно не u8?
угу, там тип, который не имплементит ни ord, ни hash, только eq
qthree
unsafe можешь убрать, все равно компилятор двойную проверку границ выкинет
Денис
вот бы щас на оптимизацию понадеяться)
Мерль
даже в go компилятор такое делает сейчас бы микрооптимизациями без бенчмарков в боевом окружении заниматься
Денис
то есть .get(n).unwrap() лучше, чем ансейф?
Денис
спасибо, не надо
Cat
ну т.е., как я понял, value, ok := smth.get(i)
Cat
будет всегда возвращать X, false ?
Мерль
то есть .get(n).unwrap() лучше, чем ансейф?
не, ну для такого конечно никакие проверки нельзя убрать но если идёт обход в цикле или итератором, то компилятор может подхачить
Денис
да понятно, что может, и не просто может, а хачит) но если у меня есть выбор между "сделать так, чтобы наверняка" и "да rustc/llvm соптимизируют", и при этом первый вариант не требует от меня ровным счётом никаких усилий, то я выбираю его )
Anton
Слушайте народ, щас вопрос не холивара ради а из жизненной проблемы
Anton
https://github.com/rise-ui/rise-stylesheet/issues/1
Anton
(Если чо знаю описал тупо и коряво но все же)
Anton
суть в том что есть webrender builder который собирает узлы плоско в дерево
Anton
есть контекст style который делать push_stacking_context чтобы определить новый контейнер узел, и делает рисовку конкретного элемента, когда дерево вглубь заканчивается у элемента надо сделать pop_stacking_context() чтобы выйти в другой контекст отрисовки узла. И в итоге у меня проблема - за отрисовку отвечает одна структура, а закрытие контекста делается в итераторе на уровне самого rise в методе рекурсивном методе render. Хотел бы узнать моджно ли сделать это как нибудь красиво чтобы всем занимался именно Style контекст, включая закрытие области своей
Anton
по идее тут долджны быть какие нибудь алгоритмы на эту тему, но я с такой работой с данными еще не сталкивался, и даже не знаю что искать и поэтому здесь хочу спросить
Денис
Все правильно, это ансейф
что именно тут ансейф?
Мерль
типо он сравнивает, что n < len(vec) и потом берёт как unchecked?
зависит от кучи всего, включая фазу луны даже не буду гадать, это нужно смотреть на ассемблер конкретного случая
Cat
зависит от кучи всего, включая фазу луны даже не буду гадать, это нужно смотреть на ассемблер конкретного случая
> зависит от кучи всего, включая фазу луны ну т.е. это такой же вопрос, что и в расте оптимизация .get()? я просто так и не понял преимущества, что то, что другое не обязательно оптимизируется а get_unchecked — однозначная конструкция, тут я согласен с @mexus
պլհկ
Хотя с ретурном вроде не ансейф 🤔