Size: a a a

2020 February 03

KB

Kit Bayun in Delphi & Lazarus
сам посмотри, отличается и это правильно
источник

AS

Alexey Shumkin in Delphi & Lazarus
Kit Bayun
сам посмотри, отличается и это правильно
нет, это неправильно в случае complete eval boolean
источник

AS

Alexey Shumkin in Delphi & Lazarus
я соглашусь c range , overflow checking...
так можно отловить баги, причём трудноуловимые (и у меня такое было как раз)
но bool eval меняет flow программы
источник

AS

Alexey Shumkin in Delphi & Lazarus
Alexey Shumkin
я соглашусь c range , overflow checking...
так можно отловить баги, причём трудноуловимые (и у меня такое было как раз)
но bool eval меняет flow программы
причём заведомо известный и предполагаемый flow
источник

SB

Sergey Bodrov in Delphi & Lazarus
Alexey Shumkin
я соглашусь c range , overflow checking...
так можно отловить баги, причём трудноуловимые (и у меня такое было как раз)
но bool eval меняет flow программы
Trash variables из той же оперы, вроде как для отладки, но могут изменить поведение.
источник

AS

Alexey Shumkin in Delphi & Lazarus
Sergey Bodrov
Trash variables из той же оперы, вроде как для отладки, но могут изменить поведение.
нет, если ты будешь инциализировать переменные ))
они сделаны для того, чтобы ты нашёл всё эти места
источник

AS

Alexey Shumkin in Delphi & Lazarus
как и range и overflow checks - это ИНСТРУМЕНТ
источник

AS

Alexey Shumkin in Delphi & Lazarus
bool eval - это flow
источник

SB

Sergey Bodrov in Delphi & Lazarus
Это оптимизация. По-хорошему последовательность булевых условий не должна влиять на результат.
источник

АР

Александр Сергеевич Рудь in Delphi & Lazarus
всем спасибо, поигрался с флагами {$O} и {B}, результат один и тот же, отладчик заходит в геттер элемента массива. заменил на
   if idx < 0 then
     rndOff := True
   else
     rndOff := Pars[idx].value;
источник

AS

Alexey Shumkin in Delphi & Lazarus
Sergey Bodrov
Это оптимизация. По-хорошему последовательность булевых условий не должна влиять на результат.
на результат - нет
на вычисление условий - да )
источник

AS

Alexey Shumkin in Delphi & Lazarus
ааа
источник

GB

George Bakhtadze in Delphi & Lazarus
Sergey Bodrov
Это оптимизация. По-хорошему последовательность булевых условий не должна влиять на результат.
будет и еще как. в ряде языков эта оптимизация - часть стандарта
источник

AS

Alexey Shumkin in Delphi & Lazarus
Александр Сергеевич Рудь
Ребят, привет, подскажите, пж, в чем беда, есть такая строка:

b := (idx < 0) or Pars[idx].value;

b - boolean,  в value хранится variant, delphi 10.3, debug, {$O+}.
Почему при значении idx = -1 программа пытается получить value у элемента массива? По идее же, если первый операнд равен True, то второй не высчитывается для оптимизации? хм... или все-таки сначала происходит преобразование второго операнда к Boolean, а затем просто не используется?
так ты НЕ УСЛОВИЕ вычисляешь! а булевое значение!
источник

GB

George Bakhtadze in Delphi & Lazarus
держать ее включенной смысла нет. это легаси
источник

AS

Alexey Shumkin in Delphi & Lazarus
Александр Сергеевич Рудь
Ребят, привет, подскажите, пж, в чем беда, есть такая строка:

b := (idx < 0) or Pars[idx].value;

b - boolean,  в value хранится variant, delphi 10.3, debug, {$O+}.
Почему при значении idx = -1 программа пытается получить value у элемента массива? По идее же, если первый операнд равен True, то второй не высчитывается для оптимизации? хм... или все-таки сначала происходит преобразование второго операнда к Boolean, а затем просто не используется?
с OR! а не AND
источник

GB

George Bakhtadze in Delphi & Lazarus
Alexey Shumkin
так ты НЕ УСЛОВИЕ вычисляешь! а булевое значение!
без разницы
источник

AS

Alexey Shumkin in Delphi & Lazarus
George Bakhtadze
без разницы
в данном случае - c OR - НАДО вычислять второй операнд
источник

GB

George Bakhtadze in Delphi & Lazarus
Alexey Shumkin
в данном случае - c OR - НАДО вычислять второй операнд
нафига, если первый - true?
источник

АР

Александр Сергеевич Рудь in Delphi & Lazarus
George Bakhtadze
нафига, если первый - true?
+
источник