26.03.2013, 17:53
|
#1
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Отрицательные моменты в Monkey
Для того чтобы у всех сформировалось правильное представление об этом движке, надо добавить к плюсам и очевидные минусы.
Поехали: - В Monkey нет такого понятия как Деструктор. Сам Марк пишет в хелпе что всё заменяет сборщик мусора, и всё что нам нужно это присвоить Null объекту. И вот тут и кроется противоречие. Если в вашем классе есть поля являющиеся объектами (данные по ссылке), то при удалении объекта класса этим полям так же нужно присвоить Null, иначе сборщик мусора их не заметит. Обычно это делается в деструкторе, где программист указывает как правильно удалить связанные данные. Причём этих проблем полны стандартные модули. Например:
Local myImage:image = LoadImage("someimage.jpg")
'free memory by Mark's solution
myImage = Null
'memory leak
|
Память утекает потому что внутри класса image есть поля ссылающиеся на текстуру, и их надо обнулить вручную. Благо Марк таки предусмотрел метод который это сделает, но вызывать его надо вручную до обнуления самой картинки так:
myImage.Discard()
myImage = Null
|
Вот такой вот костыль, а стоило сделать чтобы все методы Delete или Discard были деструктора и вызывались сами при обнулении - было бы всё красиво. Однако проблема куда глубже чем одна дополнительная строчка при удалении картинки: если мы загрузим картинки и будет хранить их в списке, то возможно нам захочется удалить их все просто воспользовавшись методом Clear списка. Который уничтожает все элементы. Однако опять же кто будет вызывать Discard() у каждой картинки? Fail - Нет никакого нормального способа получить доступ к пикселям картинки. Только через граббинг бэкбуфера, что имеет такие побочные эффекты как отсутствие изначальной альфы, необходимость делать граббинг в событии OnRender, и ограничение на размер картинки - не превышающий размеры этого самого бэкбуффера который обычно равен текущему разрешению экрана/окна
- Очень большие ограничения на свободное чтение/запись файлов. В основном Monkey предлагает загружать файл одним махом и потом работать с результатом, рандом же доступ к файлам обычно осложнен или вовсе запрещен (особенно это странно при доступе на чтение).
- Отсутствие вообще какой либо поддержки работы с файловой системой. Небольшая поддержка имеется лишь у пары таргетов.
Продолжение следует
__________________
|
(Offline)
|
|