Официально как бы да. Неофициально, многие штуки свидетельствуют что он все-таки есть:
В MQL нет указателей. Вместо них используется нечто, что очень их напоминает.
В MQL нет прямого выделения памяти как в Си например;
Программы на MQL исполняет некая виртуальная машина. Об этом Ренат писал вскольз и неидиножды;
Можно определить экземляр класса, который будет освобожден автоматически. Значит есть какой-то механизм, который следит за этими экземплярами и освобождает их при необходимости. Что это, если не сборщик мусора?
Любые экземпляры, инициализированые через указатель, и не освобожденные должным образом, будут помечены как leaked objects при выходе из программы. Будет напечатано их количество и общий размер потерянной памяти. Программа с утечками памяти даже не пройдет валидацию в Маркете. Следовательно все объекты, даже выделяемые вручную, учтены, известны и о них знает система. Это одна из классических задач, которые решает сборщик мусора.
Есть один достаточный и исчерпывающий признак того, что сборщика мусора в эмкуле нет - после new обязателен delete.
Есть один достаточный и исчерпывающий признак того, что сборщика мусора в эмкуле нет - после new обязателен delete.
Насколько я помню, кто-то из разработчиков признал, что сборщик мусора, таки, есть. Но для пользователя его "как бы нет".
Ну а насчет пары new-delete - я категорически ЗА. В общем случае за запрошенные ресурсы должны отвечать те объекты, которые эти ресурсы запросили. Есть исключения типа "фабрики объектов" - но там специально предполагается, что ответственность за созданные объекты ложится на того, кто эти объекты у фабрики запросил.
Мне очень не нравится ситуация в языках, где new есть, а delete - не требуется, мол, "система уберет ненужное". Это не только может потенциально снижать эффективность работы (когда ненужные объекты еще не удалены), но и расхолаживает кодера, позволяя ему не следить за последствиями своих действий.
Мне очень не нравится ситуация в языках, где new есть, а delete - не требуется, мол, "система уберет ненужное". Это не только может потенциально снижать эффективность работы (когда ненужные объекты еще не удалены), но и расхолаживает кодера, позволяя ему не следить за последствиями своих действий.
Производительность наоборот в общем случае повышается. Ручное удаление требует нехилого времени в основном потоке. + удаление происходит по элементно. Сравните две версии скрипта например в этом топике. Разница в с корости в несколько раз. Эффективность по памяти также увеличивается. Потому что сборщик мусора перемещает объекты уплотняя их друг с другом. При ручном управлении, образуются свободные дыры в памяти, которые уже не так просто использовать повторно. Плюс сборщик работает в другом потоке. Основное время не тратится. В общем одни плюсы.
Производительность наоборот в общем случае повышается. Ручное удаление требует нехилого времени в основном потоке. + удаление происходит по элементно. Сравните две версии скрипта например в этом топике. Разница в с корости в несколько раз. Эффективность по памяти также увеличивается. Потому что сборщик мусора перемещает объекты уплотняя их друг с другом. При ручном управлении, образуются свободные дыры в памяти, которые уже не так просто использовать повторно. Плюс сборщик работает в другом потоке. Основное время не тратится. В общем одни плюсы.
Василий, извините, но вы вообще не понимаете ничего в том, о чем сейчас пытаетесь рассуждать. Вообще ничего и никак.
Википедию хоть почитайте, что такое сборщик мусора. Основная его особенность в том, что он удаляет объекты, связь с которыми потеряна.
Только в этом случае он будет называться сборщиком мусора. Те два скрипта - из другой оперы. Божий дар с яичницей не надо путать.
И с чего вдруг от сборщика повысится производительность? Это еще одна прокладка между полезным кодом и железом, причем не слабая такая прокладочка.
Производительность наоборот в общем случае повышается. Ручное удаление требует нехилого времени в основном потоке. + удаление происходит по элементно. Сравните две версии скрипта например в этом топике. Разница в с корости в несколько раз. Эффективность по памяти также увеличивается. Потому что сборщик мусора перемещает объекты уплотняя их друг с другом. При ручном управлении, образуются свободные дыры в памяти, которые уже не так просто использовать повторно. Плюс сборщик работает в другом потоке. Основное время не тратится. В общем одни плюсы.
Хм... А в сборщике мусора удаление непоэлементно? Не говоря уж о том, что другой поток, когда нет свободных ядер - осуществляется силами того же ядра, и замедляет основной поток.
На мой взгляд, в общем случае, при внимательном подходе, удаление мусора пользователем всегда эффективнее удаления сборщиком. Однако, при наплевательском подходе, безусловно, сборщик мусора выигрывает.
Потому мне сборщик и не нравится, что поощряет этот самый наплевательское обращение с ресурсами.
Этот наверно тот "сборщик", который дает сообщение об утечке памяти по завершению работы.
Возможно он даже удаляет оставленные объекты. Но даже если он их удаляет, есть большая
разница - он их удаляет только по завершению работы. А если в многотысячном цикле создавать
новые объекты? Программа будет неработоспособной, памяти не хватит.
Настоящий сборщик удаляет потерянные объекты в процессе работы программы, а не
только по ее завершению. Поэтому допустим такой особый стиль программирования, когда
можно при любых условиях и в любом количестве плодить объекты.
Все верно. Потому мне работа со сборщиком и не нравится - пользователь перестает обращать внимание, сколько он объектов наплодил, и где.
В принципе, где-то даже упрощается разработка - не надо помнить об удалении занятого. Сборщик сам определит момент, когда на объект уже никто не ссылается, и сам его удалит. Но, мне такая позиция претит. Именно благодаря этой позиции мы имеем программы, которые работают все медленнее и медленнее, которым надо все более и более мощные аппаратные ресурсы на сходные по сложности задачи.
Василий, извините, но вы вообще не понимаете ничего в том, о чем сейчас пытаетесь рассуждать. Вообще ничего и никак.
Дмитрий, извините, вы хоть один язык программирования знаете кроме мукля? Нет, не знаете. И работать с объектами и указателями до сих пор не научились, - это ясно по тем немногим кодам и даже статьям, что вами опубликованы. Поэтому я даже не могу серьезно что-то ответить на этот бездарный и откровенно глупый комментарий. Ну почитайте наконец википедию что ли, почитайте что такое сборщик мусора и как он устроен, почитайте хоть раз наконец то, на что пытаетесь ссылаться. Пока же, это все выглядит как лай собаки на караван: бессмысленный и беспощадный.
Хм... А в сборщике мусора удаление непоэлементно? Не говоря уж о том, что другой поток, когда нет свободных ядер - осуществляется силами того же ядра, и замедляет основной поток.
На мой взгляд, в общем случае, при внимательном подходе, удаление мусора пользователем всегда эффективнее удаления сборщиком. Однако, при наплевательском подходе, безусловно, сборщик мусора выигрывает.
Потому мне сборщик и не нравится, что поощряет этот самый наплевательское обращение с ресурсами.
Чем делать предположения, о том как работает сборщик, просто сравните скорости автоматического удаления объектов и ручного. Все фантазии сразу улетучатся.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Официально как бы да. Неофициально, многие штуки свидетельствуют что он все-таки есть:
Есть один достаточный и исчерпывающий признак того, что сборщика мусора в эмкуле нет - после new обязателен delete.
Есть один достаточный и исчерпывающий признак того, что сборщика мусора в эмкуле нет - после new обязателен delete.
Насколько я помню, кто-то из разработчиков признал, что сборщик мусора, таки, есть. Но для пользователя его "как бы нет".
Ну а насчет пары new-delete - я категорически ЗА. В общем случае за запрошенные ресурсы должны отвечать те объекты, которые эти ресурсы запросили. Есть исключения типа "фабрики объектов" - но там специально предполагается, что ответственность за созданные объекты ложится на того, кто эти объекты у фабрики запросил.
Мне очень не нравится ситуация в языках, где new есть, а delete - не требуется, мол, "система уберет ненужное". Это не только может потенциально снижать эффективность работы (когда ненужные объекты еще не удалены), но и расхолаживает кодера, позволяя ему не следить за последствиями своих действий.
Мне очень не нравится ситуация в языках, где new есть, а delete - не требуется, мол, "система уберет ненужное". Это не только может потенциально снижать эффективность работы (когда ненужные объекты еще не удалены), но и расхолаживает кодера, позволяя ему не следить за последствиями своих действий.
Производительность наоборот в общем случае повышается. Ручное удаление требует нехилого времени в основном потоке. + удаление происходит по элементно. Сравните две версии скрипта например в этом топике. Разница в с корости в несколько раз. Эффективность по памяти также увеличивается. Потому что сборщик мусора перемещает объекты уплотняя их друг с другом. При ручном управлении, образуются свободные дыры в памяти, которые уже не так просто использовать повторно. Плюс сборщик работает в другом потоке. Основное время не тратится. В общем одни плюсы.
Производительность наоборот в общем случае повышается. Ручное удаление требует нехилого времени в основном потоке. + удаление происходит по элементно. Сравните две версии скрипта например в этом топике. Разница в с корости в несколько раз. Эффективность по памяти также увеличивается. Потому что сборщик мусора перемещает объекты уплотняя их друг с другом. При ручном управлении, образуются свободные дыры в памяти, которые уже не так просто использовать повторно. Плюс сборщик работает в другом потоке. Основное время не тратится. В общем одни плюсы.
Василий, извините, но вы вообще не понимаете ничего в том, о чем сейчас пытаетесь рассуждать. Вообще ничего и никак.
Википедию хоть почитайте, что такое сборщик мусора. Основная его особенность в том, что он удаляет объекты, связь с которыми потеряна.
Только в этом случае он будет называться сборщиком мусора. Те два скрипта - из другой оперы. Божий дар с яичницей не надо путать.
И с чего вдруг от сборщика повысится производительность? Это еще одна прокладка между полезным кодом и железом, причем не слабая такая прокладочка.
Насколько я помню, кто-то из разработчиков признал, что сборщик мусора, таки, есть. Но для пользователя его "как бы нет".
///
Этот наверно тот "сборщик", который дает сообщение об утечке памяти по завершению работы.
Возможно он даже удаляет оставленные объекты. Но даже если он их удаляет, есть большая
разница - он их удаляет только по завершению работы. А если в многотысячном цикле создавать
новые объекты? Программа будет неработоспособной, памяти не хватит.
Настоящий сборщик удаляет потерянные объекты в процессе работы программы, а не
только по ее завершению. Поэтому допустим такой особый стиль программирования, когда
можно при любых условиях и в любом количестве плодить объекты.
Производительность наоборот в общем случае повышается. Ручное удаление требует нехилого времени в основном потоке. + удаление происходит по элементно. Сравните две версии скрипта например в этом топике. Разница в с корости в несколько раз. Эффективность по памяти также увеличивается. Потому что сборщик мусора перемещает объекты уплотняя их друг с другом. При ручном управлении, образуются свободные дыры в памяти, которые уже не так просто использовать повторно. Плюс сборщик работает в другом потоке. Основное время не тратится. В общем одни плюсы.
Хм... А в сборщике мусора удаление непоэлементно? Не говоря уж о том, что другой поток, когда нет свободных ядер - осуществляется силами того же ядра, и замедляет основной поток.
На мой взгляд, в общем случае, при внимательном подходе, удаление мусора пользователем всегда эффективнее удаления сборщиком. Однако, при наплевательском подходе, безусловно, сборщик мусора выигрывает.
Потому мне сборщик и не нравится, что поощряет этот самый наплевательское обращение с ресурсами.
Этот наверно тот "сборщик", который дает сообщение об утечке памяти по завершению работы.
Возможно он даже удаляет оставленные объекты. Но даже если он их удаляет, есть большая
разница - он их удаляет только по завершению работы. А если в многотысячном цикле создавать
новые объекты? Программа будет неработоспособной, памяти не хватит.
Настоящий сборщик удаляет потерянные объекты в процессе работы программы, а не
только по ее завершению. Поэтому допустим такой особый стиль программирования, когда
можно при любых условиях и в любом количестве плодить объекты.
Все верно. Потому мне работа со сборщиком и не нравится - пользователь перестает обращать внимание, сколько он объектов наплодил, и где.
В принципе, где-то даже упрощается разработка - не надо помнить об удалении занятого. Сборщик сам определит момент, когда на объект уже никто не ссылается, и сам его удалит. Но, мне такая позиция претит. Именно благодаря этой позиции мы имеем программы, которые работают все медленнее и медленнее, которым надо все более и более мощные аппаратные ресурсы на сходные по сложности задачи.
Василий, извините, но вы вообще не понимаете ничего в том, о чем сейчас пытаетесь рассуждать. Вообще ничего и никак.
Хм... А в сборщике мусора удаление непоэлементно? Не говоря уж о том, что другой поток, когда нет свободных ядер - осуществляется силами того же ядра, и замедляет основной поток.
На мой взгляд, в общем случае, при внимательном подходе, удаление мусора пользователем всегда эффективнее удаления сборщиком. Однако, при наплевательском подходе, безусловно, сборщик мусора выигрывает.
Потому мне сборщик и не нравится, что поощряет этот самый наплевательское обращение с ресурсами.
Чем делать предположения, о том как работает сборщик, просто сравните скорости автоматического удаления объектов и ручного. Все фантазии сразу улетучатся.
сравните скорости автоматического удаления объектов и ручного.
Желательно сразу ответ. На эксперименты не всегда есть время.