Rust: mem::replaceλŠ” μ‹€μ œλ‘œ Androidμ—μ„œ λŒ€μƒμ„ λ³€κ²½ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2018λ…„ 03μ›” 22일  Β·  3μ½”λ©˜νŠΈ  Β·  좜처: rust-lang/rust

mem::replace 의 ν•˜λŠ” Servo λΆ„κΈ°κ°€ μžˆμŠ΅λ‹ˆλ‹€. mem::replace 전후에 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 κ°€ μ˜ˆμƒλŒ€λ‘œ μ—…λ°μ΄νŠΈλ˜κ³  Androidμ—μ„œ Servoκ°€ μΆ©λŒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

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 λ“±κΈ‰