computedGoto 编译指示
computedGoto 编译指令告知编译器如何编译嵌在 while true 语句里的 Nim case 语句。 这个编译指示在语法上必须是这个循环体里的一条语句:
type
MyEnum = enum
enumA, enumB, enumC, enumD, enumE
proc vm() =
var instructions: array[0..100, MyEnum]
instructions[2] = enumC
instructions[3] = enumD
instructions[4] = enumA
instructions[5] = enumD
instructions[6] = enumC
instructions[7] = enumA
instructions[8] = enumB
instructions[12] = enumE
var pc = 0
while true:
{.computedGoto.}
let instr = instructions[pc]
case instr
of enumA:
echo "yeah A"
of enumC, enumD:
echo "yeah CD"
of enumB:
echo "yeah B"
of enumE:
break
inc(pc)
vm()
如例子所示,computedGoto 对于实现解释器非常有用。如果所使用的后端(C 编译器)不支持计算跳转这个扩展功能,那么该编译指示被直接忽略。
当前内容版权归 vectorworkshopbaoerjie 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 vectorworkshopbaoerjie .