Cuno
Не думаю, что что-то удобное и читабельное можно без генераторов заимплементить.
Anonymous
нормально ли то, что cargo check и build работают корректно, но если я пытаюсь сделать cargo doc, то выпадают какие-то бессмысленные ошибки
Anonymous
у меня есть подозрение, что он неправильно парсит
Vladimir
Какие ошибки
Anonymous
pub fn compose<A, B, C, F, G>(f: F, g: G) -> impl Fn(A) -> C where F: Fn(B) -> C, G: Fn(A) -> B, { move |x| f(g(x)) }
Anonymous
вот например такая функция
Anonymous
док думает что она возвращает ()
Anonymous
вот вся ошибка error[E0277]: the trait bound `(): std::ops::Fn<(A,)>` is not satisfied --> src/lib.rs:15:51 | 15 | pub fn compose<A, B, C, F, G>(f: F, g: G) -> impl Fn(A) -> C | ^^^^^^^^^^^^^^^ the trait `std::ops::Fn<(A,)>` is not implemented for `()` | = note: the return type of a function must have a statically known size error: Compilation failed, aborting rustdoc
Vladimir
Странно, должен показывать "impl" а не выводить тип
Vladimir
Но видимо баг доков
Anonymous
потому что он не компилит
Anonymous
Но видимо баг доков
не знаешь воркараунд?
Vladimir
Не, но на твоём месте начал бы с минификации примера
Vladimir
Ещё есть док Хайден, если вообще все плохо
Anonymous
pub fn a() -> impl Fn() -> () { || () }
Anonymous
Ещё есть док Хайден, если вообще все плохо
так у меня вообще вся либа из таких функций состоит
Anonymous
лоло
Vladimir
pub fn a() -> impl Fn() -> () { || () }
Баг заведи в расте
Anonymous
в репе rust-lang/rust?
Vladimir
Ну у них же вроде нет отдельно репы док?
Anonymous
стопп надо попробовать обновиться
Anonymous
ага
Anonymous
ток экспериментальная у клабника
Anonymous
вообще непонятно, зачем все объединять
Vladimir
А зачем разбивать
Anonymous
чтобы не было одновременно 2к ишью
Vladimir
И у того и того есть плюсы
Anonymous
перемешанных
Vladimir
Например в объединении плюс в том, что команда не долбится
Vladimir
И каждый понимает положение дел
Anonymous
о
Anonymous
они пофиксили уже
Anonymous
вот https://github.com/fwrs/aviary-rs
Vladimir
вот https://github.com/fwrs/aviary-rs
Нафиг оно нужно?
Anonymous
чтоб писать в поинтфри (ну почти)
Vladimir
Поинтфрии это без указателей?
Vladimir
Разве с имплами это проблема?
Anonymous
Поинтфрии это без указателей?
поинтфри это без аргументов
Anonymous
мем
Anonymous
почитай про комбинаторную логику
Vladimir
Короче, "ненужно" очередное
доня.
вот https://github.com/fwrs/aviary-rs
я джва года ждал такой крейт
Serg
вот https://github.com/fwrs/aviary-rs
интересно, в этом подходе мне нравится что можно действительно много какие функции переиспользоваться комбинируя их друг с другом
Filipp
ура в расте есть NullPointerException https://play.rust-lang.org/?gist=7c6b0c461a742efcdb02be7afa4a2778&version=nightly
Filipp
язык готов к энтепрайзу
Anonymous
где там нулл, поинтер и эксепшион
Loo
Но он его создал
Loo
Он настоящий творец
Filipp
Ну None на самом деле в большинстве случаев оптимизируется в nullptr
Anton
Подскажите, можно ли #[async] функцию написать не возвращая Result
Anton
Или надо возвращать Result<(), ()>?
Маjко
Подозреваю, что нет: оно разворачивается в возврат фьючи, а фьюча это всегда Result.
Anton
Ок
Anton
Тогда второй вопрос: [rustc] only named lifetimes are allowed in `impl Trait`, but `` was found in the type `impl futures::__rt::MyFuture<<[generator@src\main.rs:8:49: 1:5 world:&mut World (impl futures::__rt::MyFuture<futures::__rt::Result<(), ()>>, futures::Async<futures::__rt::Mu>, (), futures::__rt::Result<(), ()>, impl futures::__rt::MyFuture<futures::__rt::Result<(), ()>>)] as futures::__rt::Generator>::Return>` Что он от меня хочет? У меня в расте опыта совсем нет. Книжку читал, что такое лайфтаймы вроде понимаю, но тут ошибка какая-то неочевидная
Anton
То есть понятно, что их надо указать явно для чего-то
Anton
Но непонятно для чего и какие)
Маjко
Нельзя юзать ссылки
Anton
Функция, на которую ругается, выглядит так: #[async] fn testing(world: &mut World) -> Result<(), ()> { await!(increasing(world)); await!(decreasing(world)); Ok(()) }
Маjко
Все данные, которые ты юзаешь во фьюче должны быть во владении
Маjко
Как минимум Rc<RefCell<World»
Anton
Хмм
Маjко
Или указывать во фьюче лайфтайм
Маjко
Но я не знаю как с await это сделать
Anton
Мне как раз ссылки нужны
Маjко
fn testing<'a>(world: &'a mut World) -> impl FutureResult<(), ()> + 'a
Маjко
Мне как раз ссылки нужны
Или нужно пересмотреть свою архитектуру 😉
Anton
У меня нет архитектуры, там три функции и main)
Маjко
Ну тогда тем более отхэндлить руками фьючи без авейтов и навесить правильные лайфтаймы — будет просто
Anton
Я просто слышал, что генераторы наконец завезли, и решил потестировать их
Маjко
Ну или, если производительность не супер-критична, то юзать Rc<Refcell<World»
Маjко
Я просто слышал, что генераторы наконец завезли, и решил потестировать их
ИМХО, оно не особо юзательно, пока не стабилизируют сами фьючи. Пока не придумают удобный API и не разберутся как этот кошмар с лайфтаймами разрешить
Anton
Мне главное убедиться, что борроуинг нормально статически работает вокруг yield'ов
Маjко
Работает точно так же как с обычными фьючами
Маjко
Анонимные лайфтаймы низзя
Anton
Ну я с обычными не работал, увы
Anton
Из-за этого плохо представляю, во что await разворачивается
ivan
оставляю вам своего намесника, дарк пита из оверворлда. аминь.