Скачать MetaTrader 5

По поводу надежности ПО. Exception handling = must have

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Stanislav Korotky
18235
Stanislav Korotky  

Просветите плиз про пятерку в плане обработки исключений. Всё же это софт, непосредственно оперирующий деньгами. В четверке, если произошла скриптовая ошибка (деление на ноль, в частности), исполнение прерывается и в результате вполне может случиться убыток. Я не нашел в документации ничего про ошибки, за исключением рудиментарной функции GetLastError().

И еще хотелось бы выяснить схему работы с плагинами в пятерке. Сейчас сильно напрягает ситуация, когда весь терминал падает из-за DLL. Может быть имеет смысл проработать какой-нибудь иной принцип - типа грузить сторонние dll-и не в процесс терминала, а в пулы приложений - отдельные экзешники?

MetaQuotes
Админ
25053
Renat Fatkhullin  

При обнаружении критической ошибки MQL5 скрипт снимается с исполнения терминалом.


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


Выход для экспертописателей только один - максимально полно тестировать свои программы.

Документация по MQL5: Программы MQL5 / Ошибки выполнения
Документация по MQL5: Программы MQL5 / Ошибки выполнения
  • www.mql5.com
Программы MQL5 / Ошибки выполнения - Документация по MQL5
Ilyas
1208
Ilyas  
marketeer :
...
Сейчас сильно напрягает ситуация, когда весь терминал падает из-за DLL.
....

В механизме перехвата/обработки креша из dll был косяк, который и приводил к падению терминала. Он исправлен, ждите обновлений.
Теперь, из-за ошибок dll (если dll сама не закроет процесс при креше) терминал "валиться" не будет.
Однако вы не сможете программно обработать данный креш - эксперт, после вывода сообщения в лог, "жёстко" выгрузится (без вызова деструкторов и OnDeinit()).

MetaQuotes
Админ
25053
Renat Fatkhullin  
В MQL5 мы самостоятельно отлавливаем креши DLL и терминал больше не падает из-за проблем в DLL.
Stanislav Korotky
18235
Stanislav Korotky  
Renat :

При обнаружении критической ошибки MQL5 скрипт снимается с исполнения терминалом.


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


Выход для экспертописателей только один - максимально полно тестировать свои программы.

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

Я не говорил, что программу, которая упала, нужно оставлять выполняться, а лишь утверждаю, что неплохо бы предоставить прикладные средства обработки ошибок, после которых возможно не прийдется прерывать исполнение. Не все падения критические. Предоставьте программеру самому решать, какие ситуации как разруливать. Если конкретный "экспертописатель" не создаст обработчика исключительных ситуаций или пропустит исключение, то вы остановите его скрипт по нынешней схеме.

Протестировать скрипт на практически любых сочетаниях входных данных - нереально. Скрипты работают с потоком котировок, который бесконечен в своем многообразии. Поэтому от получения непредвиденных значений в расчетах никто не застрахован. Но как можно будет проанализировать и исправить ошибку, если вы не предоставляете такой возможности и открытым текстом декларируете, что в этом случае лучше молча прибить скрипт?!

Выход правильный - действительно один: поддержать механизм исключений в скриптах. Если бы Вы ответили, что это у в планах, но пока не реализовано, то я б воспринял это с пониманием. Но ответ с такой аргументацией - "не имеет смысла" и "нельзя" - разочаровывает. Это уже не первый случай, когда ваши решения, мягко говоря, вызывают сомнения в вашей компетенции как разработчиков софта.

Evgeniy Logunov
716
Evgeniy Logunov  
marketeer :

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



Во многих случаях можно обойтись без исключений, заменяя их явными проверками и использованием кодов возврата. А ещё обработка исключений по идее выполняется гораздо медленнее, чем простая проверка некоторых условий (если возможно их сформулировать) - при написании экспертов скорость важна.

Slava
Модератор
6918
Slava  
lea :


Во многих случаях можно обойтись без исключений, заменяя их явными проверками и использованием кодов возврата. А ещё обработка исключений по идее выполняется гораздо медленнее, чем простая проверка некоторых условий (если возможно их сформулировать) - при написании экспертов скорость важна.


Во всех контролируемых нами случаях мы обходимся без исключений. Но вот контролировать сторонние dll мы не можем. Поэтому при вызове dll-функции мы вынуждены использовать механизм исключений.

MetaQuotes
Админ
25053
Renat Fatkhullin  

У MQL5 программ нет механизмов Exception Handling.


То есть, эксепшены не генерятся. Вместо этого есть классический метод проверки кодов возврата.


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


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


Благо, что подсказки очень точные:




Документация по MQL5: Программы MQL5 / Ошибки выполнения
Документация по MQL5: Программы MQL5 / Ошибки выполнения
  • www.mql5.com
Программы MQL5 / Ошибки выполнения - Документация по MQL5
MetaQuotes
Админ
25053
Renat Fatkhullin  

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


И ведь ловят!

Hide
2582
Hide  
lea :


Во многих случаях можно обойтись без исключений, заменяя их явными проверками и использованием кодов возврата. А ещё обработка исключений по идее выполняется гораздо медленнее, чем простая проверка некоторых условий (если возможно их сформулировать) - при написании экспертов скорость важна.

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

Hide
2582
Hide  
Renat :

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


И ведь ловят!


Иногда эксепшены используют как часть алгоритма. Сразу же скажу, что сам я так не делаю, но видел такое.

12345
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий