It grows!

[English translation may be some day]

В данной заметке я расскажу о своих злоключениях с умными указателями shared_ptr. После реализации генерации следующего уровня в своей игре Death-Mask, я заметил утечку памяти. Каждый новый уровень давал прирост + 1 мегабайт к потребляемой оперативной памяти. Очевидно что какие-то объекты оставались в памяти и не освобождали ее. Для исправления данного факта необходимо было реализовать корректную реализацию ресурсов при перегрузке уровня, чего видимо сделано не было. Так как я использовал умные указатели, то вариантов решения данной задачи было несколько, первый заключался в ручном отсмотре кода (долго и скучно), второй же предполагал исследование возможностей дебагера lldb, исходного кода libstdc++ на предмет возможности автоматического отслеживания изменений счетчика.

В интернете все советы сводились к тому чтобы вручную отсматривать код, исправить и бить себя плетями после нахождения проблемной строчки кода. Также предлагалось реализовать свою собственную систему работы с памятью, как это делают все крупные проекты разрабатываемые еще с 90-х и нулевых, до прихода умных указателей в стандарт C++11. Мною была предпринята попытка использовать брейкпоинты на конструкторе копии всех shared_ptr, после нескольких дней ничего дельного не получилось. Была идея добавить логирование в библиотеку libstdc++, однако трудозатраты (о)казались чудовищными.


Cowboy Bebop (1998)

Решение пришло мне в голову внезапно в виде отслеживания изменений приватной переменной shared_ptr – use_count. Сделать это можно с помощью встроенных в lldb ватчпоинтов (watchpoint) После создания shared_ptr через make_shared, изменения счетчика в lldb можно отслеживать с помощью строки:

watch set var camera._M_refcount._M_pi->_M_use_count

Где “camera” это shared_ptr объект состояние счетчика которого необходимо отследить. Конечно внутренности shared_ptr будут различаться в зависимости от версии libstdc++, но общий принцип понять можно. После установки ватчпоинта запускаем приложения и читаем стектрейс каждого изменения счетчика, потом отсматриваем код (sic!) находим проблему и исправляем. В моем случае объекты не освобождались из таблиц-кешэй и таблиц игровой логики. Надеюсь данный метод поможет вам разобраться с утечками при работе с shared_ptr, и полюбить этот инструмент работы с памятью еще больше. Удачного дебага.

Games Vision #3

[English translation may be some day]
Третий выпуск непостоянной рубрики об играх Games Vision.

Observer (ПК и консоли, Bloober Team) – киберпанк-хоррор от доблестных поляков. Короткий и очень атмосферный ужастик с Рутгером Хауэром в главной роли. Мне, как фанату киберпанка, в игре понравилось абсолютно все. Не очень сложные загадки, очаровательные глюки главного героя, геймплей со спокойными моментами в перемешку с экшеном, возможность в буквальном смысле копаться в воспоминаниях мертвых, сюжет в стиле Призрака в Доспехах + множество отсылок к Sci-Fi попкультуре. Из минусов – перебор с гличами, иногда кажется что из-за их обилия невозможно играть, также некоторых игроков выводили из себя специфические хоррор элементы, пугающие настолько что они не могли продолжать играть.
Оценка: 8/10

Paradigm (Windows/OS X, Jacob Janerka) – квест который умудряется пародировать и смеяться над всем и сразу. Здесь есть высмеивание СССР, Америки, жанра квестов, глэм-рока, старых приставок, людей, памятников, айтишников, конусов, компьютеров, женщин, детей, родителей, художников, любви, ученых, игровой индустрии, самых игроков – вообщем всего не перечислить. Абсолютно непредсказуемый сюжет, абсурдная атмосфера и арт, не особо сложные загадки. В игре есть редкие баги и вылеты, некоторые моменты и шутки слегка предсказуемы и не оригинальны.
Оценка: 9/10

Late Shift (ПК и консоли, CtrlMovie Ltd) – интерактивный фильм. Мне действительно жаль что в принципе хорошая задумка получила столь плохую реализацию. Плохо все – сюжет, отсутствие звездных актеров, актерская игра, постоянные зависания в версии для ПК, практически нулевая вариативность (иллюзорная). Совершенно непонятно как можно было выпустить игру с таким количеством проблем в 2010-х, ведь по сути это обычный видеоплеер, всю игру можно было разместить в интернете например на youtube, но вместо этого использовали Unity и умудрились сломать даже столь мощный игровой движок. Официальный форум в Steam посвящен фиксам, хотфиксам, воркараундам и т.д. Налицо техническая катастрофа, отсутствие службы поддержки пользователей, все тестирование происходит прямо на игроках. Купленные восторженные обзоры и отзывы.
Оценка: 3/10

Rise Programming Language

Today I present to you my own programming language called – Rise. Right now it’s could transpile code to javascript, there is no syntax check and other stuff, this is going to be implemented soon.

You can check Rise to JavaScript (ECMAScript 5 dialect) transpiler here:
https://gitlab.com/demensdeum/Rise

Also here is example application that was written entirely in Rise:

Source code of Rise Demo Application:
https://gitlab.com/demensdeum/RiseDemoApplication

You can contact me, if you have comments, ideas about my new language.

Corrupted City

[English translation may be some day]

Было тяжело дышать, на дисплее шлема выводился запас кислорода ровно на полчаса. За это время Ревил планировал добраться до городского центра и заполучить Маску Смерти. Вокруг стоял едкий зеленый туман, воздуха здесь небыло, по улицам бродили полуживые люди, существа захваченные влиянием Маски.
Звук шагов распространялся по пустым комнатам заброшенного здания, Ревил двигался осторожно, не зная чего ожидать в самом опасном месте Технолаба.

Don’t move !
by M-Delcambre

Город давно был захвачен коррупцией, однако не земной, которая порабощает умы политиков и властолюбивых. Коррупция Маски Смерти захватывает умы живых существ, они теряют контроль над собой и начинают жить ради выполнения ее желаний. Все попавшие под влияние, начинали верить что получат вечную жизнь в результате своего служения. Для поддержания контроля, Маске требуется постоянный приток новых рабов, захват новых территорий с чистыми существами.

На северо-западе Ревил увидел синее свечение о котором говорила ему Алиса, в центре его находится огромное здание, созданное строителями Технолаба. Странное, гротескное нагромождение торчащих каркасов и механических частей будто созданное безумцем, наводило ужас своим видом.

Ревил спустился из окна здания на улицу, для того чтобы продолжить путь, как вдруг он услышал громкий удар металлических конечностей об асфальт. Обернувшись он увидел перед собой Демона – биомеханическое существо с тремя человеческими головами, похожее на паука, медленно двигалось к нему. В небе появился круг странного зеркально-черного цвета, с трудом можно было оторвать взгляд. Раздался оглушительный рев городской сирены, призывающий существ-рабов на помощь Демону. Дело было чертовски плохо, однако на этот случай у Ревила был заготовлен сюрприз…