Бета-версия платформы MetaTrader 5 build 1625: Пользовательские финансовые инструменты - страница 8

 
Alexey Navoykov:

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

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

Если компилятор ругается - сложная, нет - простая.

 
Наверное, единственный способ избавиться от потенциальных проблем оператора копирования по-умолчанию, это добавление этих строк в свои классы/структуры
template <typename T>
void operator =( T ) {}
  
template <typename T>
void operator =( T& ) {}
 
template <typename T>
struct STRUCT
{
  int i; // Если F7/F5 отрабатывают быстро, изменить тип поля и попробовать снова
};

void OnStart()
{
  STRUCT<STRUCT<STRUCT<STRUCT<STRUCT<STRUCT<STRUCT<STRUCT<int>>>>>>>> Tmp;
  STRUCT<STRUCT<STRUCT<STRUCT<STRUCT<STRUCT<STRUCT<STRUCT<int>>>>>>>> Tmp2;
  
  Print(sizeof(Tmp));
  Print(sizeof(Tmp2));
}

В 1626 этот код компилируется до 2-х секунд на

Windows 7 Ultimate (x64 based PC), IE 09.00, Intel Core i7-2700K  @ 3.50GHz, RAM: 7093 / 16301 Mb, HDD: 1054 / 30000 Mb, GMT+02:00

У кого-нибудь воспроизводятся тормоза (см. комментарий в коде)?

Мой рекорд

0 error(s), 0 warning(s), compile time: 4899 msec               1       1
Достиг нажиманием на F7 раз 20. Все разы были по 150 мс, а один такой.
 

Мне бы ваши проблемы)

 

Vladimir Karputov:

Так проверку по числовому значению ввёл в пример, чтобы понять, почему после Stopp loss нет захода в 

и оказалось, что DEAL_REASON_SL имеет значение '9', но вот внутри OnTradeTransaction()

возвращает '4', а должно возвращать '9'.


Rashid Umarov:

Причину нашли и исправили, спасибо за сообщение!

Как я понял в билд 1626 это изменение ещё не попало. Правильно?
 
Vladimir Karputov:
Как я понял в билд 1626 это изменение ещё не попало. Правильно?

Нет, не попало

 
Renat Fatkhullin:

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

Неявный оператор копирования - это не memcpy, а реальное конструирование каждого сложного объекта внутри структуры или класса.

Я вот не пойму, что за муха вас укусила?  Столько лет действовал строгий запрет на неявное присвоение сложных объектов, все понимали что это продиктовано требованиями надёжности и определённости в отношении поведения программы. Потому всё было чётко и контролируемо.  А теперь вы вдруг в одночасье переменили своё мнение на противоположное, да ещё и с такой категоричностью, будто всегда так считали.  Может объясните?

 

Вышел билд 1627: теперь в режиме отладки на реальных данных (F5 в редакторе MetaEditor) или если накинуть советник на график в OnTradeTransaction можно отловить свойство DEAL_REASON. В режиме отладки на исторических данных пока свойство DEAL_REASON не работает.

 
Alexey Navoykov:

Я вот не пойму, что за муха вас укусила?  Столько лет действовал строгий запрет на неявное присвоение сложных объектов, все понимали что это продиктовано требованиями надёжности и определённости в отношении поведения программы. Потому всё было чётко и контролируемо.  А теперь вы вдруг в одночасье переменили своё мнение на противоположное, да ещё и с такой категоричностью, будто всегда так считали.  Может объясните?

Никакой мухи нет как и никаких проблем с безопасностью. Вы просто придумываете проблемы там, где их нет. В управляемом/managed языке все под контролем. Ошибетесь и среда исполнения это отследит и остановит программу по критической ошибке.

Мы резко упростили жизнь разработчикам в подавляющем объеме простых случаев. Это язык программирования для разработчиков со всеми вытекающими последствиями.

 
Импорт баров не доступен для реальных символов. Так и задумано ?
Причина обращения: