我有一个Servo 分支,它在 Android 上运行时崩溃,因为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 上崩溃。
以下也有效:
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)所以将在交换中点击simd路径(https ://github.com/rust-lang/rust/blob/master/src/libcore/ptr.rs#L194-L227)目前在其他一些平台上被禁用,所以我想知道这个错误是否在某个地方......
分类:不确定这是否仍然是一个问题。
更新了 libcore SIMD 代码:
最有用的评论
以下也有效:
(是的,执行相同的操作两次)