Anonymous
в общем, s не так долго живет, как хотелось бы
stalkerg
к этому моменту другой поток мог бы его убить
Loyd
Другой поток к mut и так доступ не получит
Loyd
Дай полный код
Loyd
Твой split переживает s, потому и лажа. А вот почему переживает — нужно больше кода
Anonymous
pub fn read_from_file(&self) -> Vec<&str>{ let path = Path::new(&self.path); let display = path.display(); let mut file = match File::open(&path) { Err(why) => panic!("couldn't open {}: {}", display, why.description()), Ok(file) => file, }; let mut s = String::new(); let split = s.split("\n"); let vec: Vec<&str> = split.collect(); vec }
Loyd
Ну вот. split возвращает итератор Split, который Iterator<&str>
Loyd
То есть по части строки из твоего s
Loyd
Сделай split.cloned().collect()
Anonymous
точно cloned?)
Loyd
Не, не хватит его, там же str. Тогда нужно split.map(ToString::to_string).collect
Loyd
И это будет Vec<String>
Anonymous
еее
Anonymous
спасибо)
Anonymous
теперь пойду читать что же произошло
Oleg
теперь пойду читать что же произошло
Я, конечно, скалист, и не бумбум в расте, но твоя функция возвращает вектор ссылок на строки, в который ты хочешь завернуть куски локальной переменной, которая, в свою очередь умрёт, в лучшем случае, как только ты выйдешь из функции
Anonymous
4итала с утра ето сообщение олега и ни4его не поняла
Anonymous
а щас все норми4
Судзумия
Наши поздравления :)
Anonymous
спасибо!!!!!
Маjко
Неза4то
Anonymous
Anonymous
ребят, а вот как в rust обрабатывать исключения?
Судзумия
В Rust book есть глава об обработке ошибок
Anonymous
вот есть функция, она крашится, как вот мне отловить это и обработать?
Anonymous
о
Anonymous
пошел читать
iDeBugger
Полезно её в общем-то целиком прочитать
Sherzod
есть паника
Kirill
вот есть функция, она крашится, как вот мне отловить это и обработать?
Тебе именно креш надо отловить, с экстренным завершением потока/программы? Или просто нештатную ситуацию отработать?
Kirill
я читаю)
https://doc.rust-lang.org/book/second-edition/ch09-00-error-handling.html
Kirill
Кстати вторая редакция книжки заметно более человечно написана, рекомендую
Kirill
Хоть и бета
Kirill
В частности, теперь там есть часть "So how do you decide when you should panic! and when you should return Result?"
Судзумия
Паники лучше не стоит обрабатывать :) Это исключительная ситуация, которую нужно обрабатывать только на совсем низком уровне
Kirill
Паники лучше не стоит обрабатывать :) Это исключительная ситуация, которую нужно обрабатывать только на совсем низком уровне
Кроме того, тогда можно релиз с abort собирать, будет чуть меньше и чуть быстрее бинарник в результате. (Это, правда, несовместимо со многими хитропоточными либами типа Rayon)
Anonymous
да у меня просто в функцию передается строка, которая должна разобраться в JSON, но, иногда туда может прилететь и невозможная к разбору строка и вот в таком случае я бы хотел позвращать свой JSON
Anonymous
use json; pub struct Coder; impl Coder { pub fn decode_to_str(query: Vec<u8>) -> String { String::from_utf8(query).unwrap().to_string() } pub fn to_json(query: &str) -> json::JsonValue { json::parse(query).unwrap() } pub fn to_json2(query: Vec<u8>) -> json::JsonValue { let tmp = Coder::decode_to_str(query); let response = Coder::to_json(&tmp); response } } вот как то обернуть let response во что-то бы
Sherzod
Код в тг это изврат)
Anonymous
в to_json
Kirill
Ну и вообще чем меньше анврапов тем лучше и надёжнее.
պլհկ
պլհկ
❤️
Loo
Уан лав
iDeBugger
❤️
Anonymous
ет вы с темплейтами крестов слу4айно набедокурили шоле)
Cuno
Функцию порефактори, получше выглядеть будет. Многовато комбинаторов, конечно.
Cuno
Проблема, кстати, известная (я не про размер ошибки).
Cuno
BoxFuture требует Send, но hyper фьючи его не имплементят.
ivan
ребят, а вот как в rust обрабатывать исключения?
это надо запинить. а потом придет @enomad и два дня будет ему втирать за обработку исключений :)
Anonymous
дзен
Oleg
let client_senders: Arc<Mutex<Vec<mpsc::Sender<String>>>> = Arc::new(Mutex::new(vec![])); IS RUST A HOLY GRAIL THAT WILL ALLOW US WRITE HTML ON BOTH FRONTEND AND BACKEND???
Cuno
фу
Cuno
говнокод
Cuno
блеать
Cuno
let client_senders = Default::default()
Oleg
Это я про ошибку выше
պլհկ
выкинул BoxFuture, Send мне не нужен тут
分解物質
Маjко
BoxFuture требует Send, но hyper фьючи его не имплементят.
ЕМНИП, достаточно просто не использовать встроенную обертку boxed и завернуть самому
🎲
Все переменные попадающие в тред должны быть с временем жизни 'static?
Filipp
можешь скоуп-треды заюзать
🎲
а можно ссылку?
Filipp
https://doc.rust-lang.org/1.1.0/std/thread/fn.scoped.html
Filipp
или вот это https://aturon.github.io/crossbeam-doc/crossbeam/struct.Scope.html
Filipp
я сам не юзал, только читал про такие
պլհկ
кроссбим норм
Kirill
https://doc.rust-lang.org/1.1.0/std/thread/fn.scoped.html
Это же 1.1, там нет такой функции в последних версиях?
Kirill
Но вообще я не понимаю, откуда взялась идея про 'static? Любую Send-переменную можно двигать из потока в поток, Send об этом и говорит...
Kirill
А Sync говорит, что безопасно делить содержимое между многими потоками
Kirill
Ну и дальше по https://doc.rust-lang.org/book/second-edition/ch16-04-extensible-concurrency-sync-and-send.html
Маjко
Но вообще я не понимаю, откуда взялась идея про 'static? Любую Send-переменную можно двигать из потока в поток, Send об этом и говорит...
Речь про ссылки. В свою очередь тип Send тоже обязан соответствовать баунду 'static, это видно, когда пишешь дженерики
Kirill
Речь про ссылки. В свою очередь тип Send тоже обязан соответствовать баунду 'static, это видно, когда пишешь дженерики
Ссылки на Sync вполне себе можно, почему нет? Скажем, ссылки на RwLock можно передавать.
🎲
Мне наверное стоит код показать, чтоб прояснить ситуацию
Kirill
Мне наверное стоит код показать, чтоб прояснить ситуацию
Да. Только лучше на gist.github.com, в Телеграме код довольно сложно читать из-за коротких строк...