Новая версия платформы MetaTrader 5 build 5660: улучшения и исправления - страница 15

 
fxsaber #:
b5699, не знаю, ошибка это или нет.

Похоже, даже явно заданный fpzerocheck не работает.

https://forge.mql5.io/junk/fpzerocheck-test

 
fxsaber # :

b5699, не знаю, ошибка это или нет.


F7.


F5.

В этом нет ничего нового.

Текущий бета-тест составляет 5715.

 
Alain Verleyen #:

В этом нет ничего нового.

Текущий бета-тест составляет 5715.

b5716, различие в поведении Release/Debug такое же.
 

Предложение по улучшению.

При каждом обращении к массиву, например

for (int i= 0; i< ArraySize(Ticks); i++){Funсtion(Ticks[i]);} 

происходит проверка на выход индекса i за пределы массива. Дело необходимое.

Обычно нужно проходить весь массив и проверку индекса можно было бы исключить для скорости при полном проходе по массиву.

В других языках есть оператор

foreach(v in array){}

foreach($array as $index=>$value){}

Может и в MQL сделать что-то подобное? И для массивов простых типов и для массивов структур.

 
fxsaber #:

b5699, не знаю, ошибка это или нет.


F7.


F5.

Это не ошибка, в релизе вы тестируете компиляторную оптимизацию константного выражения 1 / 0. Это выражение не вычисляется в рантайме.

А в дебаг режиме идет чистое вычисление в рантайме с контролем.

 
Renat Fatkhullin #:
компиляторную оптимизацию константного выражения 1 / 0

Это тоже оптимизируется компилятором?

https://forge.mql5.io/junk/fpzerocheck-test

const double result = _Point / double(MathRand() % 2);
Print(result);
"fpzerocheck" :"1",
 
Renat Fatkhullin #:

Это не ошибка, в релизе вы тестируете компиляторную оптимизацию константного выражения 1 / 0. Это выражение не вычисляется в рантайме.

А в дебаг режиме идет чистое вычисление в рантайме с контролем.

По этому поводу вспомнилось, что после введения усиленных оптимизаций перестали нормально обрабатываться события в некоторых "оконных" MQL-программах: под дебаггером объекты-контролы нажимаются мышью как и раньше, а в релизной версии - реакции нет. И поскольку под дебаггером всё работает, не представляется возможным определить, где именно косяк. Мелкий тест-кейс собрать не могу.
 
Stanislav Korotky #:
По этому поводу вспомнилось, что после введения усиленных оптимизаций перестали нормально обрабатываться события в некоторых "оконных" MQL-программах: под дебаггером объекты-контролы нажимаются мышью как и раньше, а в релизной версии - реакции нет. И поскольку под дебаггером всё работает, не представляется возможным определить, где именно косяк. Мелкий тест-кейс собрать не могу.
Наверное, нужно подробнее, что именно имеется в виду под "оконными" MQL-программами. У себя пока проблем не замечаю. Возможно у вас, какой-то особый случай?
 
Renat Fatkhullin #:

Это не ошибка, в релизе вы тестируете компиляторную оптимизацию константного выражения 1 / 0. Это выражение не вычисляется в рантайме.

А в дебаг режиме идет чистое вычисление в рантайме с контролем.

А это вычисляется?
void OnStart()
{
#ifdef _DEBUG
  Print("Debug");
#else // #ifdef _DEBUG
  Print("Release");
#endif // #ifdef _DEBUG #else

  for (double i = 0; i < 5; i += 1)
    Print(1 / i);  
}
 
Vladislav Boyko #:

Это тоже оптимизируется компилятором?

А вот тут да, странная ситуация. 

Проверим обязательно.