Design Doc: Switch¶
Background¶
Many programming languages provide switch
as a generalization of if-elif-else
. We want to add it to Fluid.
The following example shows the usage of fluid.switch
.
a = fluid.Var(10)
b = fluid.Var(0)
switch = fluid.switch()
with switch.block():
with switch.case(fluid.less_equal(a, 10)):
fluid.print("Case 1")
with switch.case(fluid.larger(a, 0)):
fluid.print("Case 2")
with switch.default():
fluid.print("Case 3")
The Semantics¶
- A
switch
control-flow checks cases one-by-one. - The condition of each case is a boolean value, which is a scalar, and differs from the
fluid.if_else
control-flow, which condition could be a vector of boolean values. - It runs the first matched case, or the default case if there is one.
- Once it matches a case, it runs the corresponding branch and only that branch. It’s like there is a C’s
break
keyword at the end of each case.
The above program should print and print only “Case 1”.
The implementation of the backward pass of the switch
control-flow is easier than the backward of the if_else
, because switch
runs at most one branch, whereas if-else
could run more than one branches.