Паскаль - язык, задуманный для достаточно надежного программирования. У него строгая типизация, запрет на преобразования, которые могут повлечь потерю данных (например real -> integer) и т.п. И вдруг - отключение контроля границ массива! Мало проблем с арифметическими переполнениями в целочисленных, отсутствует контроль в диапазонных типах, так еще и это добавить? Ну и куда мы так придем?
Да, можно выпустить модифицированный травматический пистолет со сменным механизмом и стволом, позволяющий опционально стрелять боевыми патронами. Но позволят ли?
begin
var a := Arr(1,2,3);
{$arrptr a}
for var i:integer := 0 to a.Length-1 do
begin
a[i] := a[i]+1;
end;
end.
Ожидается что в следующем за директивой блоке (то есть во всём for) доступ к элементам массива будет по указателю вместо стандартного. Ну и весь блок, конечно, в fixed.
Можно ещё специально для for оптимизировать, чтоб сотни указателей не создавать, а только прибавлять по 1 к указателю на каждой итерации.
begin
var n := 100000000;
var a := new integer[n];
var b: integer;
Milliseconds;
loop 10 do
for var i:=0 to a.Length-1 do
a[i] := i;
Print(MillisecondsDelta);
end.
У меня в режиме Release при запуске по Shift-F9 он работает 1000 мс. В режиме Debug 2500
Ускорьте его на C# с использованием fixed и указателей