WebAssembly规范中的“块”和“循环”之间有什么区别?

时间:2019-11-20 14:38:46

标签: webassembly

如标题所示,规范说“循环”是

  

开头带有标签的块,可用于形成循环。

和“阻止”:

  

块构造的开始,在末尾带有标签的指令序列。

但是借助“ br ”(用于将分支切换到带标签的块),即使使用“块”,我也可以形成相同的控制结构,对?那么,这两条指令有什么区别?

2 个答案:

答案 0 :(得分:1)

块标签上的br跳到所包含指令序列的 end -它的行为类似于C中的break语句。

到循环标签的br跳到所包含指令序列的 start -它的行为类似于C中的continue语句。

前者启用前进跳转,后者实现后退跳转。谁都不能表达对方。

答案 1 :(得分:0)

不,您不能阻止标签末尾,因为它说阻止标签末尾有标签

LOOP START
label:
SOME CODE
IF condtion BR label:
EVEN MORE CODE
LOOP END

将执行一次某些代码。比重复SOME CODE直到条件不成立。而且比执行更多代码

BLOCK START
SOME CODE
IF condition BR label:
EVEN MORE CODE
label:
BLOCK END

将只执行一次某些代码。而且当条件不正确时,可能会执行更多代码。