Rust: mem::replace рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Android рдкрд░ рдЧрдВрддрд╡реНрдп рдХреЛ рди рдмрджрд▓реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 22 рдорд╛рд░реНрдЪ 2018  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: rust-lang/rust

рдореЗрд░реЗ рдкрд╛рд╕ рд╕рд░реНрд╡реЛ рдХреА рдПрдХ рдореЗрдо :: рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд╛ рдПрдХ println!("{:?}", self.pending_line) рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ, рддреЛ рдбреЗрд╕реНрдХрдЯреЙрдк рдкрд░ рдорд╛рди рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди Android рдкрд░ рдореВрд▓ рдорд╛рди рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИред

рдЬрдм рдореИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдирд┐рдореНрди рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ:

self.pending_line = Line::new(self.floats.writing_mode, &self.minimum_metrics);

рдпрд╛

let mut new_line = Line::new(self.floats.writing_mode, &self.minimum_metrics);
mem::swap(&mut self.pending_line, &mut new_line);

рдлрд┐рд░ self.pending рдХреЛ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рд░реНрд╡реЛ рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рдХреНрд░реИрд╢ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

A-codegen A-simd C-bug O-android T-compiler

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

        mem::replace(&mut self.pending_line,
                     Line::new(self.floats.writing_mode, &self.minimum_metrics));
        mem::replace(&mut self.pending_line,
                     Line::new(self.floats.writing_mode, &self.minimum_metrics));

(рд╣рд╛рдБ, рдПрдХ рд╣реА рдСрдкрд░реЗрд╢рди рдХреЛ рджреЛ рдмрд╛рд░ рдХрд░рдирд╛)

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

        mem::replace(&mut self.pending_line,
                     Line::new(self.floats.writing_mode, &self.minimum_metrics));
        mem::replace(&mut self.pending_line,
                     Line::new(self.floats.writing_mode, &self.minimum_metrics));

(рд╣рд╛рдБ, рдПрдХ рд╣реА рдСрдкрд░реЗрд╢рди рдХреЛ рджреЛ рдмрд╛рд░ рдХрд░рдирд╛)

рд╣рдореНрдо, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рдХрд╛рд░ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИ (https://github.com/jdm/servo/blob/layoutstuff/components/layout/inline.rs#L221-L245) рддреЛ рд╕реНрд╡реИрдк рдореЗрдВ рд╕рд┐рдо рдкрде рдХреЛ рдорд╛рд░ рд░рд╣рд╛ рд╣реЛрдЧрд╛ (https ://github.com/rust-lang/rust/blob/master/src/libcore/ptr.rs#L194-L227) рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреБрдЫ рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдЕрдХреНрд╖рдо рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдмрдЧ рдХрд╣реАрдВ рдХрд╣реАрдВ рд╣реИ ...

рдЯреНрд░рд╛рдЗрдПрдЬ: рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рдПрдХ рдореБрджреНрджрд╛ рд╣реИред

рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ libcore SIMD рдХреЛрдб:

https://github.com/rust-lang/rust/blob/8ce3f840ae9b735a66531996c32330f24b877cb0/src/libcore/ptr/mod.rs#L418 -L465

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

dnsl48 picture dnsl48  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dwrensha picture dwrensha  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

eddyb picture eddyb  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

lambda-fairy picture lambda-fairy  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

zhendongsu picture zhendongsu  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ