Berkus
я беру контейнер в пуле, делаю по нему слайс, потом отправляю его в канал, на той стороне его принимают, а когда он дропается - этот контейнер возвращается в пул
Berkus
вы нихуя не поняли, погодите
Berkus
impl<T> Drop for Item<T> { fn drop(&mut self) { // Return item to pool } }
НА ТОЙ СТОРОНЕ ОН ДРОПАЕТСЯ и возвращается в пул, из дропа ничего не отсылается
Berkus
еще раз
Berkus
на этой стороне - pool.get(), slice, tx.send() на той стороне - rx.receive(); do_stuff; Drop (back to pool)
Berkus
https://play.rust-lang.org/?gist=3940b25898e48dc4753ccd7a8149f74e&version=stable вот так может понятней?
Berkus
слайс там потому что из него я создаю пакет, этой памятью владеет пул
Денис
https://play.rust-lang.org/?gist=6ee2b640c63a3b699acdb6c102e29bc6&version=stable
Денис
он и так дропается на ресивере
Денис
ага
Денис
ясно
Berkus
https://play.rust-lang.org/?gist=6ee2b640c63a3b699acdb6c102e29bc6&version=stable
здесь ничего не передается, что он дропается на ресивере я и так знаю - на этом строилась вся идея с автоматическим возвращением в пул
Денис
@berkus то есть ты хочешь отправить ссылку на объект, которые не переживает кложур, и удивляешься, почему борроу чекер ругается?
Денис
мммммм
Денис
нет
Berkus
посмотри на структуру PktWrap
Денис
не отправляется
Berkus
Item<T>
Денис
ссылка указывает на "старый" объект, несмувленный
Berkus
и его слайс
Berkus
НУ ТАК ОБЪЯСНИТЕ МНЕ КАК ЕГО СМУВАТЬ Я С ЭТОГО И НАЧАЛ!
Loo
у тебя время жизни буффера ограничено внутри скоупа в котором ты его получил/создал
Berkus
я не ору, у меня нет тут болда
Berkus
просто у людей привычка не читать что я пишу.
Berkus
приходится всяко выделять
Loo
ты его не можешь передать по каналу так как send требует "owned" значения.
Cat
о чём он пишет?
Loo
у тебя тут 2 варианта либо передавать owned вектор свой и не ебать мозг со ссылкой
Berkus
ты его не можешь передать по каналу так как send требует "owned" значения.
я не могу два раза own-ить одну и ту же память - ей уже владеет пул, пакет просто держит ссылку
Loo
либо обернуть в Arc каконибудь
Alexander
Либо копирнуть (ссылку не открывал)
Cat
> пакет просто держит ссылку так можно?
Berkus
https://github.com/libpnet/libpnet/blob/master/pnet_packet/src/tcp.rs.in#L301 как-то так
Berkus
пробрасывать Arc<Vec<u8>> значит?
պլհկ
зачем слайс кидать? кидай вектор, и делай опять TcpPacket::new(..) на другой стороне
պլհկ
он ничего не делает кроме одного ифа на min length, afair
Berkus
ну там не TcpPacket, так то кидать вектор было бы наверное удобнее
Berkus
впрочем, ща еще раз попробую, в прошлый раз оно сошло с ума, может я что-то недоглядел
պլհկ
а, да, они разве не добавили owned() метод для пакетов?
պլհկ
я помню был пр
պլհկ
https://docs.rs/pnet_packet/0.21.0/pnet_packet/tcp/struct.MutableTcpPacket.html#method.owned
պլհկ
вот же
Berkus
а, да, они разве не добавили owned() метод для пакетов?
он забирает владение вектором, которым уже владеет пул, разве нет?
պլհկ
Пусть пул пакетом владеет
Berkus
Пусть пул пакетом владеет
но как, все пакеты разного размера
Berkus
а пул преаллоцирует сторадж
Alexander
Qt в wasm в браузере? Это как? http://blog.qt.io/blog/2018/04/23/beta-qt-webassembly-technology-preview/
Mehul
QotW: I’ve become fearless in Rust, but it’s made me fear every other language… This Week in Rust 231 buff.ly/2vEOALf #rustlang
Berkus
Юзай rayon::scope
это интересная мысль, копну, спасибо
պլհկ
http://aturon.github.io/2018/04/24/async-borrowing/
պլհկ
Недолго нам осталось страдать
Berkus
уии
Loo
https://github.com/withoutboats/rfcs/blob/async-await/text/0000-async_await.md#async-functions
Loo
как тебе такое роб пайк
Loo
async fn function(argument: &str) -> usize { // ... }
Anonymous
Недолго нам осталось страдать
а сколько еще осталось страдать по времени до релиза?
Berkus
а сколько еще осталось страдать по времени до релиза?
ну rfc домержут скоро, а асинк борровинг хз
պլհկ
а сколько еще осталось страдать по времени до релиза?
к концу года вроде обещали все по красоте сделать
Sergey
Круто
Sergey
Announcing cargo src (beta) https://ncameron.org/blog/announcing-cargo-src-beta/
Berkus
ага, крутой тул
Anton
Announcing cargo src (beta) https://ncameron.org/blog/announcing-cargo-src-beta/
Похожее есть в Swift. Это очень круто реализовано и оооочень удобно. Просто наводишь на функцию с зажатым cmd, а тебе говорят, что она делает. Без лазанья в доку.
Anton
ozkriff🇺🇦
ozkriff🇺🇦
^ так это любая ide умеет, не? rls-vscode тот же несчастный
ozkriff🇺🇦
как самостоятельная штука cargo-src мало интересен, скорее интересно когда его смогут в docs.rs / crates.io интегрировать - я так понял что планы какие-то есть
Oleg
Ещё б генерацию диаграмм сделали, как в doxygen
Berkus
ну да, это эксплорейшен и кросс-референс тул, типа LXR для линуксового кернела
⁣Денис
Всем привет. А подскажите по https://play.rust-lang.org/?gist=3253174fc8d749dc764df22b08685c64&version=stable 1 - Почему мы можем передать вектор, как массив в функцию largest (number_list: &[i32] - работает)? Разные типы же. 2 - for &number in number_list.iter() - что значит &number? Понятно, что number_list.iter() будет возвращать ссылку на элемент массива &i32, который потом можно превратить в элемент делая *number. Что значит & в цикле перед number?
Berkus
1. там deref coercion насколько я понимаю, вектор прикидывается слайсом если может
big
2. Потому что X, в for X in ... { } это pattern.
big
Т.е. означает что вы говорите взять из итератора элемент, который будет ссылкой (&) и то, на что указывает это ссылка вы называете number
big
вот if тоже поддерживает паттерны в виде if let например if let Some(x) = optional_value { ... } тоже самое
big
в данном случае pattern'ом будет Some(x). Вы говорите, я ожидаю получить Option::Some, и тот элемент который содержит Some назвать x