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

 
Vladimir Karputov:

Неинициализация массива - это целиком и полностью вина кодопистаеля. Ищите ошибки у себя. Перестраивайте свой алгоритм.

Ошибки нет.

Просто снята автоматическая инициализация массивов нулями при объявлении. Зачем? - неизвестно. Из за этого, необходимо самостоятельно очищать массив перед использованием. Это не всегда удобно.

 
Реter Konow:

Ошибки нет.

Просто снята автоматическая инициализация массивов нулями при объявлении. Зачем? - неизвестно. Из за этого, необходимо самостоятельно очищать массив перед использованием. Это не всегда удобно.

А как Вы хотели? Писать безалаберно в стиле "4"? Бездумно запрашивать несуществующие индексы? Надеяться на "дядю" который за Вас проинициализирует Ваши массивы?

MQL5 таким любителям сильно и сразу лупит по рукам - дабы не повадно было. Учитесь сразу писать правильно: если создали массив - значит обходите все индексы и заполняйте. Не хотите заполнять сразу - заполняйте по-шагам с предварительным увеличением размера массива.

В общем делайте сразу нормальный алгоритм и не перекладывайте свои проблемы на других.

 
Vladimir Karputov:

А как Вы хотели? Писать безалаберно в стиле "4"? Бездумно запрашивать несуществующие индексы? Надеяться на "дядю" который за Вас проинициализирует Ваши массивы?

MQL5 таким любителям сильно и сразу лупит по рукам - дабы не повадно было. Учитесь сразу писать правильно: если создали массив - значит обходите все индексы и заполняйте. Не хотите заполнять сразу - заполняйте по-шагам с предварительным увеличением размера массива.

В общем делайте сразу нормальный алгоритм и не перекладывайте свои проблемы на других.

Предварительная очистка массива - едва ли приводит к каким либо ошибкам. Она удобна. 

В МТ5 - объявил массив, вычистил мусор, далее - используешь.

В МТ4 - объявил массив и используешь.

Вот и вся разница. 

Зачем перекладывать на пользователя задачу очистки массивов? 

Повышает ли это его профессионализм? Возможно. Но положительных эмоций точно не прибавит.)) Так что, извиняйте за мой негатив. Я несколько дней не мог понять в чем дело. Накипело.))

 
Убрали автоочистку по причине быстродействия.
 
Реter Konow:

Ошибки нет.

Просто снята автоматическая инициализация массивов нулями при объявлении. Зачем? - неизвестно. Из за этого, необходимо самостоятельно очищать массив перед использованием. Это не всегда удобно.

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

И все равно из твоего впороса не понятно в чем сложность. Ведь ты всегда знаешь размер своего массива. Если ты делаешь переразметку массива, ты всегда знаешь сколько дополнительных элементов добавляешь в него. Следовательно не составляет труда вызвать функцию ArrayInitialize следом за ArrayResize.

Ты наверное спросишь, как люди пользуются MQL5 когда нужно дополнительно учитывать столько моментов? Отвечу: те кто пользуется MQL5 на хорошем уровне, используют стандартную библиотеку, поэтому обо всех этих пустяках даже не задумываются, они не занимаются инициализацией массива или его переразметкой, а просто добавляют новые значения. Но так как ты дартаньян, и не признаешь ничего такого, то вариант у тебя один: низкоуровневый кропотливый менеджемент своих массивов, с использованием ArrayInitialize. 

 
Vasiliy Sokolov:

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

2. И все равно из твоего впороса не понятно в чем сложность. Ведь ты всегда знаешь размер своего массива. Если ты делаешь переразметку массива, ты всегда знаешь сколько дополнительных элементов добавляешь в него. Следовательно не составляет труда вызвать функцию ArrayInitialize следом за ArrayResize.

3. Ты наверное спросишь, как люди пользуются MQL5 когда нужно дополнительно учитывать столько моментов? Отвечу: те кто пользуется MQL5 на хорошем уровне, используют стандартную библиотеку, поэтому обо всех этих пустяках даже не задумываются, они не занимаются инициализацией массива или его переразметкой, а просто добавляют новые значения. Но так как ты дартаньян, и не признаешь ничего такого, то вариант у тебя один: низкоуровневый кропотливый менеджемент своих массивов, с использованием ArrayInitialize. 

Василий, по-пунктно:

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

2. Размер ядра зависит от Киб-кода. Чем больше элементов, тем больше массив ядра. Поэтому, ядро динамично. Оно строится поэтапно. Если в его ячейках мусор, то ссылки одной ячейки на другую в функциях на разных этапах построения, приводят к вылету программы.

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

3. Я не против принудительной пользовательской очистки массивов, просто, как и говорил, накипело. Несколько дней не понимал, почему все крашится. Думал, дело во мне, оказалось, - у меня забрали одно из удобств.)) 


Ничего, приспособимся.))


ЗЫ. Кстати, должен сказать, что мой код абсолютно кросс-платформенный. Мне кроме этой очистки ничего не нужно менять!

 
Реter Konow:

Ошибки нет.

Просто снята автоматическая инициализация массивов нулями при объявлении. Зачем? - неизвестно. ...

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

 
Dmitry Fedoseev:

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

Ок. Понятно. 

 
Реter Konow:

... Если в его ячейках мусор, то ссылки одной ячейки на другую в функциях на разных этапах построения, приводят к вылету программы.

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

 
З.Ы. Я думаю Петр, что тебе бы повезло намного больше, если бы тебя в свое время волею судеб занесло на какой-нибудь форум по JavaScript. Там этих прелестей вагон и маленькая тележка. Больших бы высот достиг!