2016-08-26 12 views
-4

如果我有锈这样的代码:是Rust的“匹配”与C的字节“开关”一样快吗?

let x: u8; 
let y = match x { 
    0 => "0", 
    1 => "1", 
    // ... 
    255 => "255", 
    _ => unreachable!(), 
}; 

它会以最快的速度(或更快),比C代码:

byte x; 
char* y; 
switch(x) { 
    case 0: y = "0"; break; 
    case 1: y = "1"; break; 
    ... 
    case 255: y = "255"; break; 
} 

我想知道如果锈病实现像跳转表什么部件。

+3

“这与下面的C代码是否相同”#编号'byte'是非标准类型,'* char'会发出编译错误。 – MikeCAT

+0

我会解决这个问题,我的意思是他们一样快彼此。 – vitiral

+0

你的两个代码片段仍然被破坏。请修复这些。而且你很可能会得到一个不满意的答案。我很确定这两种编译方式都是相同的程序集。 Rust使用LLVM进行优化,与'clang'使用相同的后端。 –

回答

4

LLVM通过匹配来做它认为最快的事情。有时候,这是一个跳转表,有时不是。这取决于完全匹配,包括您使用的匹配数量。 (像@,if和其他东西)

+0

太棒了,谢谢史蒂夫!爱语言btw :) – vitiral

+0

很高兴听到它:) –

相关问题