Vlákno názorů k článku Programovací jazyk Rust: vlákna a sdílení objektů mezi nimi od Vít Šesták - „jak se bude chovat počitadlo referencí v případě,...

  • Článek je starý, nové názory již nelze přidávat.
  • 17. 1. 2017 7:47

    Vít Šesták

    „jak se bude chovat počitadlo referencí v případě, že objekt bude sdílen mezi větším množstvím vláken? Odpověď na tuto otázku je jednoznačná – funkčnost není zaručena “

    Opravdu? Já myslel, že výsledek je zaručen – nezkompiluje se to.

  • 17. 1. 2017 10:11

    Pavel Tišnovský
    Zlatý podporovatel

    Díky za upozornění. Asi jsem to napsal nejasně, ale myslel jsem to tak, že funkčnost není zaručena v obecném případě (bez ohledu na jazyk), proto to je v Rustu řešeno.

    A ano, v Rustu by to z normálním počitadlem referencí nešlo přeložit. Asi to doplním aspoň sem do diskuze, co by se stalo při náhradě Arc za "normální" Rc:


    error[E0277]: the trait bound `std::rc::Rc<­Complex>: std::marker::Send` is not satisfied
    --> test.rs:52:9
    |
    52 | thread::spawn(move || {
    | ^^^^^^^^^^^^^
    |
    = note: `std::rc::Rc<­Complex>` cannot be sent between threads safely
    = note: required because it appears within the type `ComplexNumbe­rOwner`
    = note: required because it appears within the type `[closure@tes­t.rs:52:23: 55:10 owner:Complex­NumberOwner]`
    = note: required by `std::thread::spaw­n`