Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Mar 27 2015 20:26
    User @sudodoki banned @doneck-russia from this room
  • Mar 19 2015 20:58
    User @mr-mig banned @pgr-ru from this room
  • Mar 15 2015 01:09
    User @mr-mig banned @putin-hero from this room
  • Mar 15 2015 01:09
    User @mr-mig banned @stepan-bendera from this room
Sergey Rubanov
@chicoxyzzy
Vladimir Pouzanov
@farcaller
а кто-то в tokio смотрел?
мне ошибки просто взрывают мозг
note: the method `and_then` exists but the following trait bounds were not satisfied: `futures::stream::Fold<futures::stream::SplitStream<to
kio_core::io::Framed<tokio_core::net::TcpStream, tokio_websocket::codec::WSCodec>>, [closure@examples/autobahn-client.rs:29:31: 38:14], futures::
FutureResult<futures::MapErr<futures::Map<futures::sink::Send<futures::stream::SplitSink<tokio_core::io::Framed<tokio_core::net::TcpStream, tokio
_websocket::codec::WSCodec>>>, [closure@examples/autobahn-client.rs:33:35: 33:55]>, [closure@examples/autobahn-client.rs:34:51: 34:57]>, _>, futu
res::stream::SplitSink<tokio_core::io::Framed<tokio_core::net::TcpStream, tokio_websocket::codec::WSCodec>>> : futures::Stream`, `futures::stream
::Fold<futures::stream::SplitStream<tokio_core::io::Framed<tokio_core::net::TcpStream, tokio_websocket::codec::WSCodec>>, [closure@examples/autob
ahn-client.rs:29:31: 38:14], futures::FutureResult<futures::MapErr<futures::Map<futures::sink::Send<futures::stream::SplitSink<tokio_core::io::Fr
amed<tokio_core::net::TcpStream, tokio_websocket::codec::WSCodec>>>, [closure@examples/autobahn-client.rs:33:35: 33:55]>, [closure@examples/autob
ahn-client.rs:34:51: 34:57]>, _>, futures::stream::SplitSink<tokio_core::io::Framed<tokio_core::net::TcpStream, tokio_websocket::codec::WSCodec>>
> : futures::Future`
Sergey Rubanov
@chicoxyzzy
Андрей Листочкин (Andrey Listochkin)
@listochkin

они там давно с ним возятся. У них ARC, т.е. подсчет ссылок в рантайме. А с ownership большую часть подсчетов можно либо выкинуть совсем, либо вкомпилить в код программы заранее. Но сразу не хотели его делать, тк боялись, что язык неудобный получится.

Пусть делают :+1:

Petr Myazin
@pqr
Послушайте солидный выпуск подкаста о Rust с гостем, который глубоко в теме http://5minphp.ru/episode26
Paul Colomiets
@tailhook
@farcaller каждый день пишу. Всё так, ошибки такие, приходится по частям разбирать и чинить. Обычно это что-то простое, но найти в какой из кложур, и что именно сложно. Со временем привыкаешь угадывать :)
Vladimir Pouzanov
@farcaller
_(\
засада
я, кстати, угадал методом тыка почти что забоксить future.
impl Trait там когда допилят уже в возвращаемых типах...
Luda Lukashevskaya
@lud4ik
до успешной компиляции сложно с ошибками, но в выполнении красивые трейсбеки? хм, лучше чем наоборот...
Const
@umren
чатик мертв?
Андрей Листочкин (Andrey Listochkin)
@listochkin
не, просто все в другом чате живут в основном: https://gitter.im/ruRust/general
Const
@umren
спс за информацию =)
Denis Denisov
@denji

C/C++ to Rust Transpiler https://github.com/NishanthSpShetty/crust

We were able to cover about 95% of our code through unit tests.

Andrii Nasinnyk
@anasinnyk
може хтось мені допомоги з такою помилкю ? impl doesn't use types inside crate
impl <'a>ExonumJson for HashMap<&'a str, u32> {
    fn deserialize_field<B>(value: &Value, buffer: &mut B, from: Offset, to: Offset) -> Result<(), Box<Error>>
        where B: WriteBufferWrapper
    {
        Ok(Value::Null)
    }

    fn serialize_field(&self) -> Result<Value, Box<Error>> {
        Ok(Value::String("ser".to_string()))
    }
}
Andrey Lesnikov
@ozkriff
или типаж, или тип для которого он реализуется должен быть объявлен в твоем пакете. гугли "rust orphan rules" почему так. вариант решения - объяви свою структуру-обертку над HashMap и реализуй типаж уже для нее
Andrii Nasinnyk
@anasinnyk
ага.. о. дякую )
?
Andrii Nasinnyk
@anasinnyk

Could you help me with some error

error[E0619]: the type of this value must be known in this context

about next code:

pub fn in_wallet_assets(&mut self, asset_list: Vec<Asset>) -> bool {
        let assets_from_wallet = self.assets().clone();

        !asset_list.into_iter().filter(move |a1| {
            let condition: bool = assets_from_wallet.into_iter()
                .filter(|a2| a2.hash_id() == a1.hash_id() && a2.amount() >= a1.amount())
                .collect()
                .is_empty();
            !condition
        }).collect().is_empty()
}
Vladimir Motylenko
@vldm

collect() собирает итератор в коллекцию
Коллекция при этом может быть любая удовлетворяющая типа FromIterator.

тебе нужно указать в какой конкретно тип ты хочешь добавить. Т.е.
.collect::<Vec<_>>().is_empty()

например

Ну а еще правильнее - заменить конструкцию .filter(..).collect().is_empty()
на .any(...)
Andrii Nasinnyk
@anasinnyk
Дякую. Ви мені дуже сильно допомогли!!!
Vladimir Motylenko
@vldm
:smile: you are welcome
Andrii Nasinnyk
@anasinnyk
Можливо зможете ще мені допомогти.. у нас в коді є складний ветор з струкури у якої є hash та amount.
і на вхід нам приходить також ветор такої ж структури.
Потрібно відфільтрувати базовий вектор. і при співпадінні відняти емаунт.. потім видалити ті які мають 0.
зараз у нас це реалізовано страшними форами.. але я вірю що мають бути підходящі методи у раста
MAIN: [(id1, 10), (id2,  20), (id3,  30)]
INPUT: [(id1, 5), (id3, 30)]
EXPECTED: [(id1, 5), (id2, 20)]
Vladimir Motylenko
@vldm

@anasinnyk ну цикл в любом случае будет, да его можно заменить на какой-то фолд, но я не думаю, что фолд будет красивее обычного цикла.

Единственное, что я бы исходную структуру бы хранил в какой-то Map что должно было бы уменьшить сложность алгоритма.

Andrii Nasinnyk
@anasinnyk
@vldm ну нажаль в мапі поки немає можливості зберігати. Це звісно спростило б алгоритм) Дякую
Alexander Irbis
@alexander-irbis
@anasinnyk якщо там великі вектора MAIN та INPUT, можливо подвійна конвертація в тимчасовий Map та назад у Vec була б ефективною
Luda Lukashevskaya
@lud4ik
Кто-то едет на RustFest Rome?
Yuriy Pitomets
@Pitometsu
Есть несколько OCaml позиций разного уровня. Если кому интересно, не стесняйтесь писать в личку.
Alex Gluchowski
@gluk64
Вакансия для разработчиков на rust (blockchain, zero-knowledge proofs): https://medium.com/matter-labs/software-engineering-jobs-at-matter-labs-c456d01b2a02
Nazar Mokrynskyi
@nazar-pc
Я тут VDF компілюю в WebAssembly і оскільки нуб в Rust напоровся на те, що не можу розібратись як передавати Uint8Array туди/назад. Якщо хтось з WebAssebly або FFI в Rust працював, підкажіть в якому напрямку дивитись. По суті достатньо буде Vec<u8> перетворити в С інтерфейс.
emscripten-core/emscripten#8441
Serhii Plyhun
@snuk182
у слайса є len() та вказівник (&mut [] = *mut _)
у вектора є тоже len() та вказівник
Nazar Mokrynskyi
@nazar-pc
Я можу більш менш щось писати з допомогою компілятора та IDE, проблема в тому, що треба по суті, зробити C інтерфейс для Rust функції, і тут в мене не вистачає знань щоб що небуть зробити. Посилання на шматок коду де щось схоже відбувається дуже допоможе.
Serhii Plyhun
@snuk182
масив сі потребує вказівник на голову, кількість ітемів, інколи розмір ітему (якщо тип невідомий). Тому треба два параметри, (T* head, int len). Вектор расту таке дасть як vec.as_mut_ptr(), vec.len(). Шмата коду наразі нема, бо вже сплю :(
Може завтра найду. Але там дійсно просто все. Тільки треба помічать шарені структури як #[repr(C)], а функції як #[no_mangle]
Aleksandr Lykhouzov
@lykhouzov

вечер добрый. пытаюсь освоить rust + webassembly. есть кусок кода такой

let mut drag = Rc::new(false);
let mousedown_cb =
        Closure::wrap(Box::new(|_event: MouseEvent| {
            *Rc::get_mut(&mut drag).unwrap() = true;
        }) as Box<dyn FnMut(MouseEvent)>);
    event_target
        .add_event_listener_with_callback("mousedown", mousedown_cb.as_ref().unchecked_ref())
        .unwrap();
    mousedown_cb.forget();

основная суть, мутировать "глобальную" переменную по ивенту от мыши. но rust пишет мне, что drag does not live long enough.

может кто-то помочь разобраться как заставить это работать? этот drag далее будет использоваться в другой фунции чтобы отрисовывать картинку.
благодарю.

Serhii Plyhun
@snuk182
drag: Rc<Cell<bool>> не поможет?
и потом его клонировать вместо заимствования
Aleksandr Lykhouzov
@lykhouzov
попробую. у меня в голове плавает мысль что это должно быть как то так, но я ещё теряюсь в этой теме.
Serhii Plyhun
@snuk182
Rc без (Ref)Cell практически бесполезен в 99% случаев
Aleksandr Lykhouzov
@lykhouzov

в общем, у меня получилось заставить работать его.

    let drag = Rc::new(RefCell::new(false));
    {
        let d = drag.clone();
        let mouseup_cb = Closure::wrap(Box::new(move |_event: MouseEvent| {
            *d.borrow_mut() = false;
        }) as Box<dyn FnMut(MouseEvent)>);
        event_target
            .add_event_listener_with_callback("mouseup", mouseup_cb.as_ref().unchecked_ref())
            .unwrap();
        mouseup_cb.forget();
    }
    {
        let theta = theta.clone();
        let phi = phi.clone();
        let mousemove_cb = Closure::wrap(Box::new(move |event: MouseEvent| {
            let d = drag.borrow();
            if *d {
                *theta.borrow_mut() += event.movement_x() as f32;
                *phi.borrow_mut() += event.movement_y() as f32;
            }
        }) as Box<dyn FnMut(web_sys::MouseEvent)>);
        event_target
            .add_event_listener_with_callback("mousemove", mousemove_cb.as_ref().unchecked_ref())
            .unwrap();
        mousemove_cb.forget();
    }

спасибо за помощь

asteryx
@asteryx
Привіт всім.