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

 
Alexey Volchanskiy:
Ничего, в MQL нет возможности определить тип объекта в рантайме. Или надо создавать специальный тип для таких случаев с полем, где будет прописан ID типа.
Разве? К примеру.

Кстати, обсуждаем тему "защитное программирование". Хорошая книга есть у Стива Макконнелла - "Совершенный код".

Из содержания, Глава 8.



Совершенный код
Совершенный код
  • www.labirint.ru
Более 10 лет первое издание этой книги считалось одним из лучших практических руководств по программированию. Сейчас эта книга полностью обновлена с учетом современных тенденций и технологий и дополнена сотнями новых примеров, иллюстрирующих...
 
Andrey Dik:
Надувные трапы и желеты - это уже инструменты ликвидации последствия крушения, а не средство предотвращения крушения. Если крыло отвалилось - остается надеяться только на жилет и противоакулий свисток, это я и предложил делать - следящий эксперт, который и будет заниматься ликвидацией последствия.

Я не говорю, что исключения вовсе не нужны, нужны. Но Алексей привел пример, когда игнорируются битые данные, это значит он не хочет анализировать все данные, а просто игнорировать их, если машина не сможет их "переварить". За это я же и говорю - что всё что касается торговой логики, исключения противопоказаны. А для всего остального - полезная вешь, я не отрицаю этого.
Ну в аналогии,  крушение программы тоже происходит при делении на ноль  а исключения позволяют программ не вылететь а попытаться разрулить аварийную ситуацию.
 
Yuriy Zaytsev:
Ну в аналогии,  крушение программы тоже происходит при делении на ноль  а исключения позволяют программ не вылететь а попытаться разрулить аварийную ситуацию.
Ситуация с нулём не разруливаемая. В знаменателе в принципе не должен оказаться 0, если это не предусмотрено логикой программы (в качестве замедленной бомбы какой нибудь, вредительства).
 
Alexey Volchanskiy:
Ничего, в MQL нет возможности определить тип объекта в рантайме. Или надо создавать специальный тип для таких случаев с полем, где будет прописан ID типа.
я имел в виду что передаётся "черный ящик" и и что там внутри может возникать ты не знаешь. Более того, упомянутый метод M ты распространняешь в бинарном виде - продаёшь то бишь. А протокол ошибок может знать только вызывающая сторона и она-же может их обработать корректно. Вот exception позволяет тебе реагировать на "чужие" ошибки и передать состояние наверх и оформить сие кратко на уровне языка, а не стандартной-библиотеки-от-адама-включая-и-ноя
 
Andrey Dik:
Ситуация с нулём не разруливаемая. В знаменателе в принципе не должен оказаться 0, если это не предусмотрено логикой программы (в качестве замедленной бомбы какой нибудь, вредительства).
утверждение неверно в корне!
Вообще то в аппаратной части любого процессора есть специальное прерывание аппаратно активизируемое при делении на ноль.  Андрей, допускаю ты мог этого не знать, видимо отсюда такие выводы.
И обработка исключительной ситуации  как раз заключается в перехвате этого события  и разруливании.
т.е. в итоге   программа может обработать и разрулить  в том числе последствия деления на ноль. Ну разумеется идеально, когда знаменатель предварительно проверяется.
 
Dennis Kirichenko:
Разве? К примеру.

Я именно об этом и написал, повторю - Или надо создавать специальный тип для таких случаев с полем, где будет прописан ID типа.
Теперь смотрим в 

class CArrayFloat : public CArray
  {
public:
   //--- method of identifying the object
   virtual int       Type(void) const { return(TYPE_FLOAT); }

 В классе CArrayFloat просто возвращается значение TYPE_FLOAT из перечисления ENUM_DATATYPE.

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

 



 
Yuriy Zaytsev:
утверждение неверно в корне!
Вообще то в аппаратной части любого процессора есть специальное прерывание аппаратно активизируемое при делении на ноль.  Андрей, допускаю ты мог этого не знать, видимо отсюда такие выводы.
И обработка исключительной ситуации  как раз заключается в перехвате этого события  и разруливании.
т.е. в итоге   программа может обработать и разрулить  в том числе последствия деления на ноль. Ну разумеется идеально, когда знаменатель предварительно проверяется.
Верно, на обработке таких прерываний проца исключения (в том числе) и построены. А как иначе? Прерывание срабатывает мгновенно, правда, потом обработка занимает время, но расчет на то, что и исключения тоже возникают редко.
 
Alexey Volchanskiy:

Я именно об этом и написал, повторю - Или надо создавать специальный тип для таких случаев с полем, где будет прописан ID типа.
Теперь смотрим в 

class CArrayFloat : public CArray
  {
public:
   //--- method of identifying the object
   virtual int       Type(void) const { return(TYPE_FLOAT); }

 В классе CArrayFloat просто возвращается значение TYPE_FLOAT из перечисления ENUM_DATATYPE.

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

В ран-тайме, это простите - КАК ?
 
как же нет экзепшинов, есть они в узких местах мкла и скорее встроены в язык и невидимы глазу, ворнинги же возникают когда срабатывает встроенный экзепшен, когда программа обрабатывает некорректные данные, иначе - выпадали бы с критом и мкл не был бы таких надёжным, внутри предопределённых функций экзепшенов полно, а то что ручками мы не можем обозначить узкое место и написать что делать в случае попадания на крит ошибку то это для упрощения языка было сделано
 
Yuriy Zaytsev:
утверждение неверно в корне!
Вообще то в аппаратной части любого процессора есть специальное прерывание аппаратно активизируемое при делении на ноль.  Андрей, допускаю ты мог этого не знать, видимо отсюда такие выводы.
И обработка исключительной ситуации  как раз заключается в перехвате этого события  и разруливании.
т.е. в итоге   программа может обработать и разрулить  в том числе последствия деления на ноль. Ну разумеется идеально, когда знаменатель предварительно проверяется.
Юрий, я специально подчеркнул:
В знаменателе в принципе не должен оказаться 0, если это не предусмотрено логикой программы (в качестве замедленной бомбы какой нибудь, вредительства).
понимаешь? это ошибка программиста, недочет который требует исправления, а не обхода с помощью исключения.

всё что делает программа - задумано не спроста, не так ли? понравится ли тебе, если МТ будет за тебя принимать решения в критических ситуациях? - не думаю. хотя метаквоты вполне могли бы включить подобные механизмы в работе ex программ, но они этого не делают и поступают правильно.