amarao (amarao_san) wrote,
amarao
amarao_san

rust

The Mother of Error Messages.

error[E0277]: `std::rc::Rc<gfx_device_gl::Share>` cannot be sent between threads safely
  --> src/lib.rs:75:50
   |         
75 |         thread::Builder::new().name(thread_name).spawn(move ||{closure(draw_tx, control_rx, id)}).unwrap();
   |                                                  ^^^^^ `std::rc::Rc<gfx_device_gl::Share>` cannot be sent between threads safely
   | 
   = help: within `Command`, the trait `std::marker::Send` is not implemented for `std::rc::Rc<gfx_device_gl::Share>`
   = note: required because it appears within the type `gfx_device_gl::Factory`
   = note: required because it appears within the type `piston_window::TextureContext<gfx_device_gl::Factory, gfx_device_gl::Resources, gfx_device_gl::CommandBuffer>`
   = note: required because it appears within the type `Command`
   = note: required because of the requirements on the impl of `std::marker::Send` for `std::sync::mpsc::Receiver<Command>`
   = note: required because it appears within the type `[closure@src/lib.rs:75:56: 75:97 closure:C, draw_tx:std::sync::mpsc::SyncSender<image::ImageBuffer<image::Rgba<u8>, std::vec::Vec<u8>>>, control_rx:std::sync::mpsc::Receiver<Command>, id:usize]`



Я считаю, что за такое можно простить много. Да, я попытался отправить TextureContext (который на самом деле piston_window::TextureContext<gfx_device_gl::Factory, gfx_device_gl::Resources, gfx_device_gl::CommandBuffer>) в соседний тред. Я не знаю, почему это нельзя делать, но автор библиотеки это явно запретил. А компилятор мне это явно сказал.

Сравните с большинством других языков программирования, где целеустремлённого человека никто и ничто не останавливает от того, чтобы передать ссылочку за проезд.

Причём осознайте, что ошибка рассуждает про мою программу совсем не в том месте, где я написал - я-то всего-лишь поменял
pub enum Command {
    NewResolution(u32, u32, SyncSender<Buffer>),
    NeedUpdate()
}

на 
pub enum Command {
    NewResolution(u32, u32, SyncSender<Buffer>),
    NeedUpdate(TextureContent)
}


Но поменял я именно с этой целью - послать в тредик. Вместо этого меня послали, очень культурно и очень по-делу. Ща буду выяснять, почему автору библиотеки хотелось это запретить...
Tags: rust
Subscribe

  • Раффайзен

    (или как там они пишутся?) Мелкие нюансы их безопасности мне нравятся. Например, один из PIN'ов вводится не с клавиатуры, с виртуальной клавиатуры…

  • iceweasel + java

    "..мать, ..мать, ..мать " - привычно отозвалось эхо. Иногда линукс пугает степенью виндовости гугления. Сам бы в жизни не догадался. Если у вас не…

  • Банк-клиент

    Подскажите, пожалуйста, банк-клиент с адекватным обслуживанием и работой под линукс. Пока однозначно нет: 1) Авангард [java только для windows,…

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 2 comments