Bugworm
нажимаешь на кнопочку и оно маунтится
Bugworm
что тебе еще нужно
Bugworm
или еще лучше, оно без нажатия на кнопочку маунтится
Loo
раст настолько ахуенный - что программы написанные на нём присоединяют флешки в компайлтайме
ne_on
у меня флешку вставляешь и оно само монтируется
Bugworm
ваще агонь
Bugworm
технологии епт
Anton
хотя внезапно что-то и сразу нагуглилось https://wiki.archlinux.org/index.php/USB_storage_devices_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)#.D0.90.D0.B2.D1.82.D0.BE.D0.BC.D0.BE.D0.BD.D1.82.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D1.81_.D0.B8.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5.D0.BC_systemd
Anton
причем раст лол
ne_on
https://wiki.archlinux.org/index.php/Udisks#Mount_helpers
ne_on
у меня udiskie --smart-tray
Anton
эх, в расте клозуры тупые. Дело в том, что часто нужно вызывать метод поля self, и уже в этой клозуре естественно.. юзать поля self, а клозура борровит весь self нафиг, и приходится выписывать мол let field=&mut self.field, но теперь еще надо всё это класть в {}, дабы эти борровинги удалились. What the hell?
Anton
окей. спасибо
ne_on
ну ещё установлен udisks2
Anonymous
если просто использовать self.field то будет partial move
Anton
и что правильного? borrow checker бороит весь self, вместо его ОТДЕЛЬНЫХ полей. Это ключевая тупость borrow checker-а. А self я юзаю из методов, и что за кошмар выходит в итоге?
Anonymous
так, борроуит или переносит владение?
Anton
Пример let events_loop=&mut self.events_loop; let gui=&mut self.gui; let cursor=&mut self.cursor; let camera=&self.camera; let render_sender=&mut self.render_sender; let mut result=Ok(()); //ибо эта клозура возвращает (), а не <T> events_loop.poll_events(move|event| { if let glutin::Event::WindowEvent { event, .. } = event { let mut handle_event=||{ match event { WindowEvent::Resized(width, height) => { camera.resize(width,height)?; try_send!(render_sender, RenderCommand::ResizeWindow(width,height)); }, WindowEvent::MouseMoved {device_id, position: (x, y)} => { gui.on_mouse_move(x as i32,y as i32); if gui.input.left_mouse_button==ElementState::Pressed { camera.rotate(&gui.input)?; } },
Anton
такой ужс
Anonymous
как self передается?
Anton
хм.. кстати я плохо понимаю разницу, но борровинг это &mut ..., а клозура забирает(переносит владение) всех переменных, что она юзает(фактически генерируется функция)
Anton
так, борроуит или переносит владение?
Anton
В вышепреведенном примере self не передается благодаря борровингам вначале
Anton
и это просто уродски
Anton
а еще в расте классно: let map=&mut self.map.. и потом что-то делаем с self, а внутри self просто огромное количество полей, которые надо передать в функцию, поэтому хочется передать просто self.. а уже нельзя, приходится всякие let gui=&mut self.gui; let cursor=&mut self.cursor; let camera=&self.camera; let render_sender=&mut self.render_sender; Писать. Вот почему раст не популярен, и пусть говорят как линуксоиды мол "не умеешь ты готовить", с этим муздыкаться и писать заранее неоптимизированный код никто не хочет.
Anton
шот я тебя не понимаю
Anton
ладно, мне надо идти..
Anonymous
блин
Anonymous
наверное кто-то в корне не понимает зачем борроу чекер существует
Anton
чтобы мол let mut vec=.... let a=&mut vec[3]; vec.resize..
Anton
Но в расте борров чекер тупой. Он блокирует весь экземпляр, хотя обращение идет ЛИШЬ К ОТДЕЛЬНЫМ ПОЛЯМ! Ничего не сломается же! так, например, vec.resize затронет массив, который заборровлен, но почему же нельзя изменить какое-то безобидное поле в векторе? И то, вектор это "одно целое как бы", но классы/структуры, описывающие логику, как правило состоят из множетсва различных не связанных между собой полей.. А борров чекер считает их одним целым. Окей. Повторю некий пример, что писал ранее. Напиши мне трейт с геттерами, который fn get_a_mut(&mut self) -> &mut u32, и вызови эти 2 метода подряд.. ты ж хочешь получить отдельные поля.. а в итоге боровишь всю структуру. Приходится извращаться и:либо писать менее оптимальный код, например, разбивая на 2 отдельных цикла, либо обманывать борроу чекер. В нынешней реализации он скорее зло.
Anonymous
"напиши мне код который ломает правила борровинга и может привести к коррупции памяти"
Anonymous
???
Loo
Но в расте борров чекер тупой. Он блокирует весь экземпляр, хотя обращение идет ЛИШЬ К ОТДЕЛЬНЫМ ПОЛЯМ! Ничего не сломается же! так, например, vec.resize затронет массив, который заборровлен, но почему же нельзя изменить какое-то безобидное поле в векторе? И то, вектор это "одно целое как бы", но классы/структуры, описывающие логику, как правило состоят из множетсва различных не связанных между собой полей.. А борров чекер считает их одним целым. Окей. Повторю некий пример, что писал ранее. Напиши мне трейт с геттерами, который fn get_a_mut(&mut self) -> &mut u32, и вызови эти 2 метода подряд.. ты ж хочешь получить отдельные поля.. а в итоге боровишь всю структуру. Приходится извращаться и:либо писать менее оптимальный код, например, разбивая на 2 отдельных цикла, либо обманывать борроу чекер. В нынешней реализации он скорее зло.
ты либо тролишь либо не понимаешь назначение мув семантики
Anonymous
unsafe тебе в помощь
Bugworm
ну борровинг тупооой
Bugworm
ну тупой
Dan
напомнило https://i.imgur.com/L9lBMAr.png
Anton
а еще пример: У меня есть controller, который обрабатывет ввод с клавы, и управление камерой. Если я жму стрелочки, то я модифицирую controller.camera, если мышку и другие кнопки, то проверяю controller.gui, мол нажали мы на кнопку, делаем что-то, а если не нажали, то надо controller.gui.camera подвинуть. Вот я даже не знаю, как красиво описать такую логику. естественно камера не должа храниться в GUI, это ж не логично, но при обработке GUI помимо камеры могут измениться еще много чего аналогичного, поэтому гонять всякие gui.on_click(&mut self.camera) не катят. тогда для камеры юзать Rc? А вот Rc сам по себе тупой, надо еще Rc<Cell<Camera», не кошмар ли?!
Anonymous
вот, из книги
Anonymous
то есть прочитав ее такие заявления должны иссякнуть
Anton
не извращение ли, чтобы обратиться к отдельным полям структуры. Да, я токое писал.. А что если таки сделаем ошибку, и по-настоящему заборровим одно поле одновременно?
Anton
"напиши мне код который ломает правила борровинга и может привести к коррупции памяти"
Anton
unsafe тебе в помощь
Anton
Скажи мне пожалуйста.
Bugworm
значит борроу чекер всё делает правильно
Bugworm
а ты нет
Anton
почему s.a=3; s.b=4; можно а let a=s.get_a() let b=s.get_b() *a=3; *b=4; нельзя? Какой тут *ть датарейс? Тут всё нормально
Bugworm
надо запилить Copy/Clone значит
Anton
Никак не могу понять, как вы меня,наконец, не можете понять.. =) Одно дело борровить объект целиком, если он действительно представляет собою что-то неразрывное. Другое дело борровить и изменять ОТДЕЛЬНЫЕ НЕСВЯЗАННЫЕ МЕЖДУ СОБОЙ поля
Bugworm
если они несвязнанные, то им не место в одной структуре
Anton
не связаны
Anonymous
лол
Loo
вахахахах
Loo
смешно
Anonymous
ты к ним обращаешься через один референс в памяти
Anton
Автомобиль { пассажир двигатель бензобак 4 колеса } они связаны? разве не можно заправлять бензобак и посадить другого человека "одновременно"? одновременно = в одном {} вот и выходит бред вроде { автомобиль.сменитьпассажира } { Автомобиль.заполнитьбензобак }
Bugworm
ооп какой-то
Anton
имеешь ввиду ссылку на self? и что такого?
Anton
ты к ним обращаешься через один референс в памяти
Anton
Окей. Это один объект или всё же множество разных? pub struct Controller { controller_receiver:ControllerReceiver, supervisor_sender:SupervisorSender, render_sender:RenderSender, process_sender:ProcessSender, events_loop:EventsLoop, gui:GUI, camera:Camera, cursor:Cursor }
Anton
Вектор один объект, тк нельзя укоротить его len, не уменьшив длину массива, а тут.. можно спокойно дергать поля по отдельности. Как сделаешь "красиво" и чтобы борров чекеру понравилось? логика описана в методах к Controller сейчас.
Anton
лан, я пойду
Anonymous
(что должно быть очевидно из разговора)
Anton
и что такого? мы же не собираемся УДАЛЯТЬ controller.. это можно проверить статически.
Anonymous
удалять мы может и не будем
Anonymous
но можно попробовать в двух тредах одновременно юзать
Anton
те в опред промежуток времени в одном { } адреса полей контроллера не меняются, почему мы не можем обращаться к ним по отдельности через geter-ы ? например, я делаю поля camera и cursor приватным, и делаю &mut setter-ый. Я изменяю контроллер откуда-то, где, например let mut controller=Controller::new(); Почему я не могу controller.get_camera().x=controller.get_sursor().x ?
Anonymous
/stat@combot
Anonymous
/stat@combot
Anonymous
/stat@combot
Anton
Треды это другое дело. у нас однопоточный код и мы просто делаем let mut controller=Controller::new(); controller.get_camera().x=controller.get_sursor().x; Borrow-checker-у это не понравится..
Anton
/stat@combot