Скачать MetaTrader 5

Почему в MQL5 нет исключений? - страница 7

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Alexey Volchanskiy
24832
Alexey Volchanskiy  
Renat Fatkhullin:
Неправильный, вырожденный в абсолютную оптимизацию тест и неправильные выводы.

Столь же чудовищная ссылка на интерпретируемый Матлаб с заявлениями про замедления в 1000 раз. У нас компилируемый в натив язык, который не позволяет так тормозить. Доп проверка может вообще ничего не стоить, но дает гарантию корректности.

Тест специально сделан примитивный, так как в массе народ ассемблер не знает, а хотелось понимания. Как сделать правильный тест try-catch, подскажите пожалуйста?

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

Andrei
2806
Andrei  
Alexey Volchanskiy:

Как видно, никакого оверхеда блок try-catch не прибавляет.

А вы попробуйте в цикле прогнать и время сравнить.
MetaQuotes
Админ
26090
Renat Fatkhullin  
Alexey Volchanskiy:

Тест специально сделан примитивный, так как в массе народ ассемблер не знает, а хотелось понимания. Как сделать правильный тест try-catch, подскажите пожалуйста?

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

Я указал на ваши прямые ошибки, в которых вы сделали категорически неправильные выводы:
  1. вы неправильно протестировали эксепшены, но сделали четкий вывод о них
  2. вы создали ощущение, что "проверка ошибок" в сотни-тысячи раз медленнее. причем неоднократно на это упирали
Вмешиваюсь тогда, когда вижу откровенно вредные и неправильные заявления. Время трачу на обучение людей, когда считаю нужным и полезным. В данном случае для меня нет ничего интересного в теме, чтобы я обучал людей.
Vasiliy Sokolov
30957
Vasiliy Sokolov  
Renat Fatkhullin:
Я указал на ваши прямые ошибки, в которых вы сделали категорически неправильные выводы:
  1. вы неправильно протестировали эксепшены, но сделали четкий вывод о них
  2. вы создали ощущение, что "проверка ошибок" в сотни-тысячи раз медленнее. причем неоднократно на это упирали
Вмешиваюсь тогда, когда вижу откровенно вредные и неправильные заявления. Время трачу на обучение людей, когда считаю нужным и полезным. В данном случае для меня нет ничего интересного в теме, чтобы я обучал людей.
Плиз, если можно вкратце Ваше мнение о try catch? На сколько это помогает, удачное ли это решение вообще?
MetaQuotes
Админ
26090
Renat Fatkhullin  
Vasiliy Sokolov:
Плиз, если можно вкратце Ваше мнение о try catch? На сколько это помогает, удачное ли это решение вообще?
Поищите в инете холивары "перехват эксепшенов vs коды возврата".

Я уже высказывался на эту тему и не вижу смысла повторно участвовать в обсуждении.
George Merts
5235
George Merts  
Alexey Volchanskiy:

Можно пример ASSERT в MQL? Всегда думал, их тут нет, сейчас спецом посмотрел в справке - нет.

Ну, на качество кода в КБ ориентироваться не стоит. 

Дык мы программисты, или кто ?

Через #ifdef подключаем либо файл _DEBUG ассертов и трейсов, либо файл _RELEASE.

В отладочной версии:

void PerformAssert(bool x,string strFile,string strLine,ulong ulMagic,string strSymbol)
{
   if (!x)
      {
      PerformTrace("Assertion failed !","File: " + strFile,strLine,ulMagic,strSymbol);
     
      Print("Assertion failed ! File: " + strFile + "; Line: " + strLine);
      DebugBreak();
      }
};

#define ASSERT(boolValue) PerformAssert(boolValue,__FILE__,IntegerToString(__LINE__),_GetMagic(),_Symbol)

В рабочей версии - понятное дело

#define ASSERT(boolValue)

И все.

Ну и функция PerformTrace() - опять же, только в дебаг версии, выводит трассировочное сообщение в файл.

У меня все ASSERT'ы и TRACE'ы подключаются одним инклюдом:

#include <MyLib\DebugOrRelease\DebugSupport.mqh>
Alexey Volchanskiy
24832
Alexey Volchanskiy  

Ясно, что в MQL эксепшенов не будет, но все же хочется разобраться в теме. Нашел статью, вроде обещают ковырнуть глубоко. 

https://habrahabr.ru/post/279111/ 

С++ exception handling под капотом или как же работают исключения в C++
С++ exception handling под капотом или как же работают исключения в C++
  • habrahabr.ru
В мире победили языки высокого уровня и в мирах руби-питон-js разработчиков остается только разглагольствовать, что в плюсах не стоит использовать то или иное. Например, исключения, потому что они медленные и генерируют много лишнего кода. Стоило спросить "и какой же код он генерирует", как в ответ получил мямленье и мычание. А и правда — как...
Alexey Volchanskiy
24832
Alexey Volchanskiy  
Andrei:
А вы попробуйте в цикле прогнать и время сравнить.
Обязательно, только прочитаю статью, ссылка постом выше и тест нормальный сделаю, а не тот примитив. Самому хочется разобраться. А то одни эмоции...
Alexander Puzanov
18613
Alexander Puzanov  
Dr.Trader:

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

+500. OnError(int Error_Code) в дополнение к той тьме проверок, к которой вроде уже все попривыкали, мне бы лично хватило без эксепшенов

 

Andrey Dik:
делаем отдельный следящий эксперт

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

 

Dennis Kirichenko:
Чаще всего спасаюсь просто if'ом, реже самописной функцией Assert().
Функции/шмункции .. мужики в деревне прибавляют 0.000000001 к любой переменной в делителе и больше не парятся
Alexey Volchanskiy
24832
Alexey Volchanskiy  
Alexander Puzanov:


Функции/шмункции .. мужики в деревне прибавляют 0.000000001 к любой переменной в делителе и больше не парятся
Крутые у вас мужики, умеют к целочисленным прибавлять вещественные )) Научите, тоже хочу
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий