for loop protocols for jit
Dynjit inherits the identical semantics from python bytecode, which is using GET_ITER and FOR_ITER to implement loops:
for i in xs:
# do some
under dynjit, it is identical to
tmp = iter(xs)
while True:
try:
i = next(iter)
except StopIteration:
goto l:
# do some
l:
The key point is, finding a protocol for, switching from pure Python code to optimized code when the types of iter and i got known.
Question: Should we follow the Python loop implementation, i.e., using __iter__? If so, exception check makes it impossible to make a positive enough performance gain. Even if __iter__ is jitted, exception check is still a disaster.
This have to been deferred until we implement bytecode -> untyped DIO IR transformation. I don't believe this is the most urgent. Efforts will be allocated for supporting JITing the most builtins and language features already allowed in DIO-JIT.