Новая версия платформы MetaTrader 5 build 2980: Push-уведомления о торговых операциях - страница 41

 
Если где и есть реальное повышение производительности - так это экономия на проверке индексов массивов, потому что во многих случаях он за пределы даже теоретически не может выйти
 
A100 #:

Пока Разработчики не отказались от проверки индексов массивов и указателей - есть еще 'array out of range' и 'invalid pointer access'

Точно!

спасибо

 
fxsaber #:

Правильно ли понимаю, что до нововведения первое выражение работало медленнее второго?

Раньше во втором только одна проверка на ноль. Сейчас в обоих выражениях проверок нет.

точности ради - и сейчас первое выражение работает значительно медленнее второго, тк  деление работает медленнее умножения.
 

@Ilyas

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Ilyas, 2021.08.23 16:11

Спасибо за сообщение.

1. действительно, для унарного минуса в качестве типа результата выбирался тип операнда, а не тип результата - исправлено

2. мы отошли от стандарта и для типа uint операция унарного минуса возвращает тип long, из-за ошибки в п.1 типом результата оставался тип uint (а не long)


Спасибо, вижу в b3030 это исправлено. По пунктам:

1. Но подобная же ситуация  осталась c char и short:

   Print(0 - char(-1));        //1
   Print(-char(-1));          //1 ОК
   Print(0 - CHAR_MIN);         //128
   Print(-CHAR_MIN);           //-128 !!!

   Print(0 - SHORT_MIN);        //32768
   Print(-SHORT_MIN);          //-32768 !!!

2. В результате получается несколько странная ситуация:

   Print(0 - (uint)1);        //4294967295
   Print(-(uint)1);           //-1
Почему понятно. Но так и задумано?
 
mktr8591 #:

@Ilyas


Спасибо, вижу в b3030 это исправлено. По пунктам:

1. Но подобная же ситуация  осталась c char и short:


Сорри, сейчас проверил эти примеры не с константами, а с переменными, все считается правильно.

Видимо, не исправлены расчеты с константами на этапе компиляции.

 
mktr8591 #:
деление работает медленнее умножения.

Спасибо, буду знать.

 
A100 #:

Пока Разработчики не отказались от проверки индексов массивов и указателей - есть еще 'array out of range' и 'invalid pointer access'

слава богу не отказались... Вместо уменьшения стоимости проверки деления на ноль имеем перекладывание ответственности... 

Может это и компромисс который даст выигрыш, главное что бы не навредило.

Не одобряю отказ от проверки деления на ноль.

 

Не наводите панику, ни от чего мы не отказались и не собираемся.

Речь наоборот идет об усилении контроля над качеством кода. В бета-версии просто допустили промашку в попытке добавить контроль константных оптимизаций в компиляторе.

Все уже исправлено и сегодня будет очередная бета.

Далее мы еще больше улучшим контроль над местами падений и дадим возможность управлять реакцией на исключения у чисел с плавающей запятой при делении на ноль. В некоторых случаях, когда такие деления осознанно принимаются нормой, можно будет отключить выдачу эксепшенов.
 

3029 запускается нормально, предлагает обновиться до 3030.

3030 не запускается.

3031 пока не загружается.

 
Andrey Khatimlianskii #:

3030 не запускается.

3030, если подложить его вручную (а не доверить это лив-апдейту), стартует нормально.

Причина обращения: