If anything the syntax should be:
for i:=0 to 10 in steps of 2 do
But putting that aside, that is a very specific thing, but we already have the for ... in ... loop, for which you can do the following:
{$ModeSwitch advancedrecords}
type
TStepIterator = record
Start, Stop, Step: Integer;
property Current: Integer read Start;
function MoveNext: Boolean; inline;
function GetEnumerator: TStepIterator; inline;
end;
function TStepIterator.MoveNext: Boolean;
begin
Inc(Start, Step);
Result := Start <= Stop;
end;
function TStepIterator.GetEnumerator: TStepIterator;
begin
Result := Self;
end;
function Steps(Start, Stop, Step: Integer): TStepIterator; inline;
begin
Result.Start := Start - Step;
Result.Stop := Stop;
Result.Step := Step;
end;
var
i: Integer;
begin
for i in Steps(0, 10, 2) do
WriteLn(i);
end.
So there is absolutely no need for a dedicated syntax element for this. That said, what could be very useful is if ranges were dataobjects. So for example the 0..10 would not just be a type, but also a value that can be used for sets (if x in 0..10), for arrays (arr := [0..10]) or as lazy generator and enumerator (for x in 0..10). Maybe also with steps 0..10:2 to only have the even numbers, etc.
This would enable a lot more very cool features especially with custom enumerators.