Vladimir
А как работает тогда аналог
let x =...
let z =&x;
...
realloc_stack()
Слава
1) не знаю. Возможно, там возврат объекта из функции отслеживается прямо во время компиляции, и память выделяется сразу на куче. Если же нельзя однозначно сказать, вернётся объект или нет, то в кучу его можно просто скопировать, при обнаруженном возврате.
Alexander
Alexander
Что оно от меня хочет?
Alexander
Ах, кажется что начал понимать. Там не фьючу оно хочет, но почему.
Денис
юзай futures-retry ^_^
Денис
ну на самом деле у tokio-retry и futures-retry несколько разные кейсы
Денис
потому что я автор первого =)))
Денис
ну ваще зависит строго от юз-кейса
Alexander
Ну юз-кейс простой - если соединение например слетело - повторить.
Alexander
С ходу больших отличий между двумя не вижу.
Alexander
Твоё как-то красивее выглядит, но зато другое больше скачивают. А по факту похоже.
Денис
это потому что я своё не пиарил нигде, а второе — это ж токио! =)
futures-retry предполагает, что если нужна сложная логика ретраев (непостоянный тайм/аут и т.п.), то юзер должен сам это пилить, благо RetryPolicy там достаточно абстрактная; но для простых юз-кейсов, когда надо просто либо повторить сразу, либо повторить с таймаутом, либо пропустить ошибку дальше (в зависимости от типа ошибки), оно сразу работает из коробки + очень легко навешивается на стримы
в то время как tokio-retry заточен на более сложные юз-кейсы, и из коробки даёт тебе возможность решить твою задачу, например, но это даётся ценой более сложного интерфейса + нет клёвого экстеншена для стримов :)
мне кажется твой юзкейс полностью подходит для tokio-core, собственно он прям в доке и описан
Денис
смотрю на твою ошибку, client это должен быть не фьючер, а функция, производящая фьючеры
Alexander
Alexander
это потому что я своё не пиарил нигде, а второе — это ж токио! =)
futures-retry предполагает, что если нужна сложная логика ретраев (непостоянный тайм/аут и т.п.), то юзер должен сам это пилить, благо RetryPolicy там достаточно абстрактная; но для простых юз-кейсов, когда надо просто либо повторить сразу, либо повторить с таймаутом, либо пропустить ошибку дальше (в зависимости от типа ошибки), оно сразу работает из коробки + очень легко навешивается на стримы
в то время как tokio-retry заточен на более сложные юз-кейсы, и из коробки даёт тебе возможность решить твою задачу, например, но это даётся ценой более сложного интерфейса + нет клёвого экстеншена для стримов :)
мне кажется твой юзкейс полностью подходит для tokio-core, собственно он прям в доке и описан
Я только последнее не понял - причем тут tokio-core. Но если б у тебя там была функция retry - было бы ещё больше похоже.
Alexander
Alexander
Приплыли :(
Anton
պլհկ
>BTC_USD
Anton
не шаришь
VCL
Привет всем, пытаюсь поэксперементировать с токио, но такая проблема) Уже мозги болят.
Как заставить работать этот простой код?)
https://play.rust-lang.org/?gist=16b6c051eb246f3258577d995c5bc533&version=stable&mode=debug&edition=2015
Денис
Alexander
Денис
Денис
Денис
Αλεχ
Братишки, подъясните полз
Αλεχ
The problem with the existing cause API is that the error it returns is not 'static. This means it is not possible to downcast the error trait object, because downcasting can only be done on 'static trait objects (for soundness reasons).
Αλεχ
почему static только?
Αλεχ
как можно вернуть статик ссылку на созданный объект?
VCL
VCL
Alexander
move || убрал - в кору не падает, но что-то и не переподписывается пока. Сам виноват, починил.
Αλεχ
блин, никто не знает?
Anonymous
как можно io::stdin().read_line зафейлить, чтоб expect отработал?
kalloc
Женя Зэ
kalloc
то, что может использовать потенциал семантики языка и производительности clang
Alexander
@mexus futures-retry лучше - они могут без таймера сразу запустить. tokio-retry не может.
Alexander
но что-то и тут я запнулся: https://gist.github.com/rust-play/526dab5b940e02c2f13e37141176e9b3
Alexander
хз толи для старого core не работает, вижу что в 'static разница, но почему именно так - хз
Sergey
Alexander
ага, конечно лучше если там features_retry есть.
Денис
Alexander
хм, буду думать как одно в другое
Денис
https://gitlab.com/mexus/futures-retry/blob/master/examples/tcp-client.rs вот пример с futures
Денис
Я дальше спать :)
Alexander
thx
Alexander
блин, оно мне фьючу страима возвращает
Alexander
https://docs.rs/tokio-tungstenite/0.5.1/tokio_tungstenite/fn.connect_async.html
Alexander
как стрим во фьючу - понятно, а вот наоборот ...
Alexander
1) руками poll писать - не вариант конечно
Alexander
прорвался, спасиб за наводку.
Alexander
собралось, но не ретраится :(
саша
Кстати, кто-то, помню, говорил, что футура не монада ибо результат применения комбинатора другого типа. Но если размышлять в рамках экзистенциальных типов, то всё ок же, не?
𝙽𝚒𝚌𝚔
Не совсем. У бинда тип должен быть m a -> (a -> m b) -> m b что неявно означает для любых m a b. И плюс три закона также выполнены для любых m a b. И этот m одинаковый везде: и в сигнатурах и в законах, что для футуры я не уверен что справедливо.
𝙽𝚒𝚌𝚔
лодочник утверждал, что нет
саша
саша
От монады требуется только то, чтобы она была категорией по операции композиции >=> морфизмов a -> m b
𝙽𝚒𝚌𝚔
ну или так. Стрелка Клейсли и бинд эквивалентные операции
𝙽𝚒𝚌𝚔
одно выражается через другое
саша
дефайн эквивалентность
𝙽𝚒𝚌𝚔
Да, прости, что то туплю: композиция Клейсли и бинд - эквивалентны
саша
саша
хотя есть один большой минус у монад перед async/await. В async/await можно писать циклы не используя рекурсию. В монадах такое не пройдёт.
𝙽𝚒𝚌𝚔
Но всё-таки, теперь я не понимаю, почему m в случае футуры одинаковый... Возьмём например let f3 = f1.then(f2). Они здесь все разные, тип f3 будет отличаться от f1 и f2, нет?
саша
саша
С точки зрения теорката никаких противоречий
саша
Хотя тип значения фьючи может и отличаться - да
𝙽𝚒𝚌𝚔
Ну да, у нас просто обобщённый impl, и для него выполнены законы.