for
loops are parallel by default. This is documented in the 2.8 For Loops Are Parallel by Default section of the Fortress Language Specification document.It seems that the reference implementation already supports this feature. For example when running this code:
component ForLoops
export Executable
run(args:String...):() = do
for i <- 1:10 do
print("Iteration " i ""\n")
end
end
end
The output shows:
Parsing /home/ldfallas/blog/fortress/for/forloopexperiment.fss with the Rats! parser: 283 milliseconds
Read /home/ldfallas/fortress/FortressLibrary.tfs: 566 milliseconds
Iteration 10
Iteration 9
Iteration 6
Iteration 4
Iteration 8
Iteration 7
Iteration 2
Iteration 5
Iteration 1
Iteration 3
finish runProgram
1711 milliseconds
According to the specification the generator section of the
for
loop controls this behavior (section 13.15 and 13.14) . If the sequencial
generator is used, the loop is executed in the classic order. For example:
component ForLoops
export Executable
run(args:String...):() = do
for i <- sequential(1:10) do
print("Iteration " i ""\n")
end
end
end
The output is:
Parsing /home/ldfallas/blog/fortress/for/forloopexperimentSeq.fss with the Rats! parser: 282 milliseconds
Read /home/ldfallas/fortress/FortressLibrary.tfs: 546 milliseconds
Iteration 1
Iteration 2
Iteration 3
Iteration 4
Iteration 5
Iteration 6
Iteration 7
Iteration 8
Iteration 9
Iteration 10
finish runProgram
1523 milliseconds