Size: a a a

2020 December 15

Y

YuS in Delphi & Lazarus
Ну тебя в частности :) Мало ли как ты будешь эту фичу использовать.
источник

Y

YuS in Delphi & Lazarus
может для каких-то критичных участков кода, каждый раз проверять попал ли ты в границы это накладно.
источник

k

kirillmaster4 in Delphi & Lazarus
YuS
может для каких-то критичных участков кода, каждый раз проверять попал ли ты в границы это накладно.
Значит код построен не верно. В том же самом Oberon'е всё строго типизировано, дабы избежать ошибок ещё на стадии написании кода. Этого очень не хватает в FreePascal.
источник

Y

YuS in Delphi & Lazarus
Это ж на уровне сгенерированного компилятором кода происходит. Можно кстати попробовать простую проверку устроить. Попытаться почитать например 1000000 значений с включенной опцией и отключенной и поглядеть время выполнения.
источник

k

kirillmaster4 in Delphi & Lazarus
YuS
Это ж на уровне сгенерированного компилятором кода происходит. Можно кстати попробовать простую проверку устроить. Попытаться почитать например 1000000 значений с включенной опцией и отключенной и поглядеть время выполнения.
В этой программе? https://t.me/Delphi_Lazarus/147315
источник

k

kirillmaster4 in Delphi & Lazarus
YuS
Это ж на уровне сгенерированного компилятором кода происходит. Можно кстати попробовать простую проверку устроить. Попытаться почитать например 1000000 значений с включенной опцией и отключенной и поглядеть время выполнения.
А, понял про что вы. Сейчас проверю
источник

Y

YuS in Delphi & Lazarus
1М возможно маленькая цифра, для того чтоб заметить разницу
источник

AS

Alexey Shumkin in Delphi & Lazarus
kirillmaster4
Ещё небольшой вопрос. Не подскажете, какой флаг добавить для более строгого режима компилятора? Пример проблемы при обычной компиляции:

var a: array of Integer;
      i, n: Integer;


begin
 writeLn('Enter N');
 readLn(n);
 setlength(a, n);
 for i := 1 to n do
 begin
   readLn(a[i]);
   writeLn('a[i]= ', a[i]);
 end;
 readLn;
end.


 Ошибка: заполнение массива идёт от 1 до n, хотя n элемента в массиве не должно быть, однако же он заполняется и не выдает ошибку. Та же беда и со статическим массивом.
 Добиться выдачи ошибки можно только на FreePascal IDE на Windows, там выдаёт ошибку 201.
Это (и много чего ещё) должен статический анализатор выявлять :)
источник

AS

Alexey Shumkin in Delphi & Lazarus
Alexey Kulakov
Ключик {$R+} вестимо, проверка диапазона
Причём , как раз в фпц, если правильно помню, он включён по умолчанию (по крайней мере, в дебаг конфиге), в отличие от делфи.
В настройках проекта
источник

AS

Alexey Shumkin in Delphi & Lazarus
kirillmaster4
И поэтому тебе каждый раз придётся указывать этот ключ, как и другие
Это в настройках проекта указывать можно. Но работает, есесна, на все исходники
источник

AS

Alexey Shumkin in Delphi & Lazarus
kirillmaster4
Значит код построен не верно. В том же самом Oberon'е всё строго типизировано, дабы избежать ошибок ещё на стадии написании кода. Этого очень не хватает в FreePascal.
Ну, язык был спроектирован тогда, когда люди думали, что другие будут знать что делать с этой свободой :)
Нынешние реалии - другие. Заставляют средствами языков ограничивать полёт "фантазии"/криворукости программиста
источник

Y

YuS in Delphi & Lazarus
Alexey Shumkin
Ну, язык был спроектирован тогда, когда люди думали, что другие будут знать что делать с этой свободой :)
Нынешние реалии - другие. Заставляют средствами языков ограничивать полёт "фантазии"/криворукости программиста
полет фантазии "смузи программистов" :)
источник

SB

Sergey Bodrov in Delphi & Lazarus
Современное железо позволяет делать автоматические проверки без потери производительности. А во времена десятков мегагерц и мегабайт это было роскошью.
источник

k

kirillmaster4 in Delphi & Lazarus
Alexey Shumkin
Ну, язык был спроектирован тогда, когда люди думали, что другие будут знать что делать с этой свободой :)
Нынешние реалии - другие. Заставляют средствами языков ограничивать полёт "фантазии"/криворукости программиста
Никлаус Вирт, создатель Pascal, считает иначе и я с ним согласен. Строгое типизирование необходимо для эффективной работы компилятора и предотвращения ошибок.
источник

Y

YuS in Delphi & Lazarus
Накидал простенький цикл, и с включенной {$R+}/выключенной {$R-} показывает разницу во времени, у меня в 1,7 раза примерно.
источник

Y

YuS in Delphi & Lazarus
YuS
Накидал простенький цикл, и с включенной {$R+}/выключенной {$R-} показывает разницу во времени, у меня в 1,7 раза примерно.
program project2;

{$mode objfpc}{$H+}

uses
 Classes,
 SysUtils;

{$R+}
const
 MAX_COUNT = 10000000;
var
 i: integer;
 j: integer;
 arr: array [0..MAX_COUNT] of integer;
 arr2: array of integer;
 sc, ec: QWord;
begin
 setlength(arr2, MAX_COUNT + 1);
 sc := GetTickCount64;

 for i := 0 to MAX_COUNT do
 begin
   arr[i] := i - 1;
   arr2[i] := arr[i];
   j := arr[2];
 end;
 ec := GetTickCount64;
 writeln(j);
 writeln(ec - sc);
 readln;
end.
источник

SB

Sergey Bodrov in Delphi & Lazarus
YuS
Накидал простенький цикл, и с включенной {$R+}/выключенной {$R-} показывает разницу во времени, у меня в 1,7 раза примерно.
Это сколько в секундах на 10 мильонов?
источник

Y

YuS in Delphi & Lazarus
36мс / 60мс
источник

SB

Sergey Bodrov in Delphi & Lazarus
Чуть выше погрешности измерения (15.6 мс)
источник

Y

YuS in Delphi & Lazarus
для 100М - 390мс/600мс
источник