Принудительная очистка массивов в МТ5? - страница 4

 
Не знал, что в 4-ке при ресайзе происходит инициализация нулями. Это не удобство, а глупость какая-то,  ведущая к понижению скорости программ. Т.е. если мне нужно проинициализировать массив значением -1, то происходит двойная инициализация.
А потом еще и удивляются - почему МТ4 медленее.
 
Vasiliy Sokolov:

... MQL5 в отличии от MQL4 не пытается понять что хочет пользователь и это правильно.

Предлагаю это на рекламный постер повесить. :) (шутка)

Василий, я понял, что есть нюансы, которые оправдывают такой подход МТ5 к удобствам программиста. И не возражаю. Пусть так.

 
Реter Konow:

1. Логика подсказывает, что процедура очистки массивов выполняется компилятором один раз на этапе компиляции. 

Да уж, проблема у вас с логикой :)

 
Nikolai Semko:
Не знал, что в 4-ке при ресайзе происходит инициализация нулями. Это не удобство, а глупость какая-то,  ведущая к понижению скорости программ. Т.е. если мне нужно проинициализировать массив значением -1, то происходит двойная инициализация.
А потом еще и удивляются - почему МТ4 медленее.

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

 
Реter Konow:

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

Да какая разница. Делаешь инициализацию после ресайза,  вот и весь флаг. 
Тем более при объявлении динамического массива размер не известен.
 
Nikolai Semko:
Да какая разница. Делаешь инициализацию после ресайза,  вот и весь флаг. 
Тем более при объявлении динамического массива размер не известен.

Да, после каждого объявления глобального массива и после каждого их ресайза.  А если у тебя 20 - 30 глоб. массивов, некоторые из которых при определенных обстоятельствах меняют размер? Всюду писать инициализацию в циклах? (массивы могут быть двумерные). Разве это не потенциальный рассадник ошибок?

 
Реter Konow:

Да, после каждого объявления глобального массива и после каждого их ресайза.  А если у тебя 20 - 30 глоб. массивов, некоторые из которых при определенных обстоятельствах меняют размер? Всюду писать инициализацию в циклах? (массивы могут быть двумерные). Разве это не потенциальный рассадник ошибок?

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

Еще в ините проинициализировать все массивы имеющие размер (если такие есть).

Еще могут быть массивы с заданным размером в функциях - их тоже. Их искать по квадратной скобке.

 
Dmitry Fedoseev:

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

Еще в ините проинициализировать все массивы имеющие размер (если такие есть).

Еще могут быть массивы с заданным размером в функциях - их тоже. Их искать по квадратной скобке.

Кстати, да. 
Петр, Дмитрий толковую вещь говорит.
Правильно написанный дефайн избавит тебя от переписывания всего кода.
 
Nikolai Semko:
Кстати, да. 
Петр, Дмитрий толковую вещь говорит.
Правильно написанный дефайн избавит тебя от переписывания всего кода.

Попробую. Интересный хак.

 

поддержу топикстартера, хоть и много вопросов к его творению )))

разработчики MQL5 в погоне за скоростью вычислений (или еще за какими красивыми цифрами? ) убрали все "мелкие плюшки" которые делали MQL4 более дружественным,

как пример, вот я разбирался с написанием индикаторов под МТ5 , элементарное в MQL4 становится в MQL5 учебником по программированию, причем этот "учебник" нужно уметь читать в контексте торгового терминала:

1. индикаторные буффера при вызове OnInit() не инициализируются автоматически

2. просмотрел около сотни индикаторов в кодобазе, увы, под видом программирования на MQL5 пишут индикаторы в стиле MQL4 - разворачивают нумерацию массивов и таймсерий

3. не корректно не логично работают iHighest / iLowest - ищут бары с наибольшими/наименьшими значениями в сторону увеличения нумерации таймсерии... т.е. если использовать стандартные схемы построения индикаторов в MQL4 - расчет из прошлых данных к настоящим, то эта задача не решается с помощью iHighest и iLowest , т.к. самый левый бар это 0, а при вызове iLowest будем искать значения в будущем....

4. такая же беда и с ArrayMaximum() - сложно использовать в индикаторах... ну как сложно, чтобы не разворачивать нумерацию таймсерии, берем и постоянно вычитаем от стартового эл-та некое кол-во баров и получаем ArrayMaximum(high[i], i -Period,Period) 

5. увы, даже знатоки MQL5 используют сомнительные конструкции.... скажем так некую базу костылей сохранившихся при переходе с МТ4 носят с собой до сих пор 


ну и к чему это все? дык к тому, что MQL не претендует на чистый С++, зачем убрали более простые реализации для пользователей, около месяца просматриваю чем же хорош Питон, почему на нем так много работ... и вот только сейчас понимаю, что на Питоне дали возможность людям не обращать внимания на мелочи, сделали более дружественный интерфейс ;) - для программиста со стажем покажется, что все это не правильно, а люди пользуются и Питон довольно популярен

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