#%D0%BD%D0%B5%D0%BD%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5

2025-10-09

Хороший, плохой, цветной и быстрый

Давным-давно, когда с ездовым котом приключилась "записка шестая" , а знания об аллокаторах и опыт их применения ограничивался линейным и системным, перебросили мою команду в помощь другой команде, которая занималась системами навигации больших судов. Ездовые коты, особенно нестарые - это такие создания, которые редко изучают документацияю детально, а чаще бегло читают там про интерфейсы систем в проекте, malloc, new, системные аллокаторы и думают, что теперь-то точно понятно, как всё устроено. А потом приходит работа и такая: “Забудь всё, что ты знал. Ты не дочитал до страницы восемьсот что-то там РД, тут есть свой аллокатор - и он реально плохой”. Примерно так началось мое погружение в мир ненормального распределения памяти. Это сейчас я знаю с десяток разных аллокаторов, и специфику их работы, специфика правда больше игровая, но думаю многим будет интересно - зачем нужны все эти " танцы с аллокаторами ". В той статье все аллокаторы еще более менее нормальные, но есть еще ненормальные и они оказывается тоже нужны, и в определенных сферах разработки очень даже важны и применяются. А вот почему нужны и важны ненормальные - объяснений почти нет, как и самих реализаций в открытом доступе. В этой статье я расскажу, какие повстречал ненормальные алгоритмы распределения памяти, чем они живут, кого едят, и почему иногда malloc делает вид, что он не при делах и таки да, malloc может возвращать null и ту проверку мы убрали зря.

habr.com/ru/articles/954676/

#с++ #игры_и_консоли #разработка_игр #программирование #ненормальное_программирование

2025-09-26

Почему Фараон остается лучшей игрой в серии

В 90-х и 2000-х студия Impressions Games выпускала отличные исторические градостроительные симуляторы. Я играл во все игры этой серии от незабываемого Caesar 3, который вообще был первой моей компьютерной игрой на отцовском компуктере, до Императора про древний Китай. Но египетский Pharaoh и греческий Zeus запомнились намного четче, но вот почему я сказать не берусь. Единственное серьёзное отличие между Фараоном и Зевсом в нетехническом плане — это были графические ресурсы, внутри же там полностью сменилась вся команда и со слов старожилов сменился движок, но серия уже была известна и многочисленные отличия по возможности скрыли, перенеся практически без изменений разные механики из Фараона в Зевс, да похоже перестарались, и многим сейчас игра покажется скорее дополнением, а не полноценной номерной частью серии. Ностальгии пост и много скриншотов

habr.com/ru/articles/950938/

#разработка_игр #программирование #c++11 #ненормальное_программирование

2025-09-17

Я отклоняю комиты с использованием кучи и прошу коллег переписать такую логику

Хочу поделиться своим опытом разработки крупных игровых проектов на C++, где производительность и стабильность — это не просто приятные бонусы, а абсолютно естественные требования к разработке. За годы работы над движками и играми я понял, что подход к управлению памятью очень сильно влияет на весь проект. В отличие от многих приложений — игры, особенно большие, часто работают часами без прерываний и должны поддерживать стабильный фреймрейт и отзывчивость. Когда проседание fps или фриз происходит на глазах у сотен тысяч игроков, вам уже никто не поможет — ущерб уже нанесен, а в steam полетели отзывы о кривизне рук разработчиков. Недавно моя команда закончила работу над довольно старым и известным проектом, который портировали больше двух лет на плойку. Движок старый, большой и мощный, но работа с памятью была ориентирована на ПК времен конца 2000-х, и что меня поразило, так это насколько сильно большая часть кодовой базы зависела от динамической памяти во время выполнения. На ограниченном железе (далеко не у всех есть PS5 pro) и в условиях жёстких требований к сертификации на консолях такие решения быстро превращаются в проблему. В разработке для консолей (про мобильные устройства я молчу, потому что игра не влезает по памяти даже в восемь гигов) с ограниченными ресурсами, архитектура с частыми аллокациями не просто неэффективна — она становится реальной угрозой для стабильности проекта. Каждое выделение памяти в куче влечёт за собой накладные расходы: это дополнительные! миллисекунды ! (в целом на кадре) задержки, риск большой фрагментации памяти, и непредсказуемое поведение в долгой игровой сессии. После двух часов игры постоянные операции с кучей буквально «сжигают» половину бюджета кадра.

habr.com/ru/articles/947922/

#разработка_игр #ненормальное_программирование #программирование #с++14

2025-09-17

Я отклоняю комиты с использованием кучи и прошу коллег переписать такую логику

Хочу поделиться своим опытом разработки крупных игровых проектов на C++, где производительность и стабильность — это не просто приятные бонусы, а абсолютно естественные требования к разработке. За годы работы над движками и играми я понял, что подход к управлению памятью очень сильно влияет на весь проект. В отличие от многих приложений - игры, особенно большие, часто работают часами без прерываний и должны поддерживать стабильный фреймрейт и отзывчивость. Когда проседание fps или фриз происходит на глазах у сотен тысяч игроков, вам уже никто не поможет — ущерб уже нанесен, а в steam полетели отзывы о кривизне рук разработчиков. Недавно моя команда закончила работу над довольно старым и известным проектом, который портировали больше двух лет на плойку. Движок старый, большой и мощный, но работа с памятью была ориентирована на ПК времен конца 2000-х, и что меня поразило, так это насколько сильно большая часть кодовой базы зависела от динамической памяти во время выполнения. На ограниченном железе (далеко не у всех есть PS5 pro) и в условиях жёстких требований к сертификации на консолях такие решения быстро превращаются в проблему. В разработке для консолей (про мобильные устройства я молчу, потому что игра не влезает по памяти даже в восемь гигов) с ограниченными ресурсами, архитектура с частыми аллокациями не просто неэффективна — она становится реальной угрозой для стабильности проекта. Каждое выделение памяти в куче влечёт за собой накладные расходы: это дополнительные ! миллисекунды ! (в целом на кадре) задержки, риск большой фрагментации памяти, и непредсказуемое поведение в долгой игровой сессии. После двух часов игры постоянные операции с кучей буквально «сжигают» половину бюджета кадра.

habr.com/ru/articles/947922/

#разработка_игр #ненормальное_программирование #программирование #с++14

2025-08-19

Математика, биты, магия и немного ненормального программирования на C

Доброго времени суток, господа и дамы! Иногда у некоторых людей возникает желание заняться откровенным непотребством в программировании — то, что не несет практической пользы напрямую, но помогает развлечься. И я — не исключение. В этой статье я хочу рассказать вам о лайфхаках, трюках (магических и не очень), алгоритмах на языке C! Идея написать эту статью зародилась из моего поста . В нем я рассказал о том, что через последовательность Фибоначчи можно конвертировать мили в километры с небольшой погрешностью. Увидев, что многим понравилась, я задумался: почему бы не изучить еще какие-нибудь трюки, заодно практикуясь в программировании на C? Всех, кто заинтересовался — прошу под кат.

habr.com/ru/companies/timeweb/

#c #hacks #funs #tricks #хаки #фаны #си #математика #ненормальное_программирование #timeweb_статьи

2025-08-13

Прием и декодирование NMEA-данных от GPS-приемника

Прием и декодирование NMEA-данных от GPS-приемника а также, рассмотрение работы разных типов GPS (UART и RS-232): как правильно подключить модуль к микроконтроллеру STM32.

habr.com/ru/articles/936028/

#STM32 #разработка_программного_обеспечения #разработка_электроники #программирование_микроконтроллеров #gps #ненормальное_программирование #nmea #декодирование_данных

2025-07-28

Продвинутое использование препроцессора C/C++

Зачастую, в проектах ограничивается использование препроцессора по следующим причинам: — Он не похож на весь остальной язык; — Макросы могут возвращать неполные синтаксические конструкции, или вовсе различные, в зависимости от параметров. Ввиду перечисленных особенностей, читать код с активным использованием препроцессора зачастую становится на порядок сложнее кода без него. Со всеми его недостатками, инструмент есть в языке и достоин изучения.

habr.com/ru/companies/timeweb/

#препроцессор #c_language #макросы #метапрограммирование #c++ #C #ненормальное_программирование #функциональное_программирование #timeweb_статьи

2025-07-21

Самый обобщённый живучий алгоритм

Путь от костылей к универсальному живучему алгоритму В статье разбирается само устройство обобщённого алгоритма: как концептуально закладывать возможность учёта истории наблюдений, реконструкции мира и перебора альтернатив, чтобы ИИ-ассистенты/программисты могли реализовать эти механизмы под свои задачи. Детально разобран только универсальный перебор вариантов; реализация остальных особенностей предоставляется разработчику специализированное версии алгоритма. Статья для тех, кто хочет понять архитектурный каркас живучих решений — и самостоятельно наполнить его собственными инструментами под реальные задачи. Пропустить обложку через вентилятор

habr.com/ru/articles/929288/

#симуляция #с++ #алгоритмы #алгоритмы_поиска #разработка_игр #ииассистент #ии #боты #ненормальное_программирование #шаблоны

2025-07-11

От Аристотеля до Тьюринга: что такое функциональное программирование и как оно облегчает жизнь

Привет, меня зовут Марат Зимнуров, я тимлид в кросс-функциональной команде HR Admin Tech Авито . Тема функционального программирования не обделена вниманием — и все же тяжело найти действительно понятный и структурно изложенный разбор данного инструмента. Нет нормального гайда для старта — ни у нас, ни на Западе. Многие говорят про иммутабельность и монады, но путаются в основах. В статье разбираю, что такое функциональное программирование на самом деле и зачем оно нужно.

habr.com/ru/companies/avito/ar

#функциональное_программирование #функциональщина #ненормальное_программирование #теория #теория_категорий #философия_программирования #философия_разработки

2025-06-25

«IT-Планета 2025»: задачи второго этапа по PostgreSQL

Мы продолжаем свое участие в международной олимпиаде «IT-Планета». Как и в прошлые годы, проводился конкурс по SQL, состоящий из трех этапов: теоретический и практический туры, проходящие онлайн, и финальный очный тур. В первом туре участвовало свыше 4 500 человек, из которых 245 были отобраны во второй. В этом году я занимался разработкой задач и проведением первых двух туров. Предлагаю перейти к рассмотрению задач практического этапа.

habr.com/ru/companies/postgres

#ненормальное_программирование #sql #postgresql #решение_задач #базы_данных #итпланета #олимпиада #олимпиадные_задачи

2025-06-20

Зажигаем миллиард цветов миллионом строк

Надругательство над C# , C++ и HLSL , игрища с булками и буферами, тройная полиглотность, SIMD , пепекторы, DirectX , экономия 800 Тб ОЗУ, быстрая степень и многое другое. В этой части я расскажу и покажу, как делал софт на собственном фреймворке, который управляет ядерной подсветкой и механической видеостеной. Осторожно, трафик!

habr.com/ru/articles/902040/

#c# #net #C++ #hlsl #directx #подсветка #мониторы_и_тв #simd #ненормальное_программирование #программирование

2025-06-20

Зажигаем миллиард цветов миллионом строк

Надругательство над C# , C++ и HLSL , игрища с булками и буферами, тройная полиглотность, SIMD , пепекторы, DirectX , экономия 800 Тб ОЗУ, быстрая степень и многое другое. В этой части я расскажу и покажу, как делал софт на собственном фреймворке, который управляет ядерной подсветкой и механической видеостеной. Осторожно, трафик!

habr.com/ru/articles/902040/

#c# #net #C++ #hlsl #directx #подсветка #мониторы_и_тв #simd #ненормальное_программирование #программирование

2025-06-08

Апгрейд по реверс-инженерски: хакаем прошивку кнопочного телефона и пишем для него программы

Осторожно : в данной серии статей я рассказываю о реверс-инжиниринге и хакинге простых кнопочных звонилок. Цель простая: расширить скудный функционал телефонов ценой до 1 000 рублей и сделать их привлекательной платформой для самых разных гиков. Если вам интересно узнать, как происходит процесс взлома и изучения прошивок, а также написания новых программ для кнопочников — жду вас под катом!

habr.com/ru/companies/timeweb/

#bodyawm_ништячки #программирование #реверсинжиниринг #C #ненормальное_программирование #nes #эмулятор #gamedev #siemens #timeweb_статьи

2025-06-07

Самая сложная «Змейка»: Как я отреверсил и хакнул кнопочный телефон, чтобы написать для него классическую игру

Осторожно : в данной серии статей я рассказываю о реверс-инжиниринге и хакинге простых кнопочных звонилок. Цель простая: расширить скудный функционал телефонов ценой до 1 000 рублей и сделать их привлекательной платформой для самых разных гиков. Если вам интересно узнать, как происходит процесс взлома и изучения прошивок, а также написания новых программ для кнопочников — жду вас под катом!

habr.com/ru/companies/timeweb/

#bodyawm_ништячки #программирование #реверсинжиниринг #C #ненормальное_программирование #nes #эмулятор #gamedev #siemens #timeweb_статьи

2025-05-20

Создание объектов без конструктора по умолчанию в C++: искусство владения памятью

В данной статье рассматриваются метод создания объектов без использования конструктора по умолчанию с использованием возможностей стандарта C++17 , который предоставляет гибкие инструменты управления памятью и типобезопасностью. Мы рассмотрим техники, которые позволяют работать с такими объектами напрямую, сохраняя контроль над процессом инициализации и временем жизни объектов.

habr.com/ru/articles/910950/

#c++ #программирование #ненормальное_программирование

2025-05-14

Доступ к приватным методам класса в С++

В C++ инкапсуляция — один из ключевых принципов ООП, и приватные ( private ) члены класса защищены от прямого доступа извне. Однако иногда возникают ситуации, когда такой доступ необходим (например, при тестировании, сериализации или отладке). Обычно для этого используют friend -функции или геттеры/сеттеры, но есть и более экзотический способ — использование шаблонов и указателей на члены класса . В этой статье мы разберём, как можно получить доступ к приватным полям, не нарушая строгих правил компилятора напрямую, но используя особенности инстанцирования шаблонов.

habr.com/ru/articles/909246/

#ненормальное_программирование #c++

2025-04-18

WebAssembly голыми руками

WebAssembly являясь (относительно) молодой технологией уже довольно распространён в индустрии . Тем не менее, почти все материалы в сети по теме рассматривают WASM как цель для компиляции других более высокоуровневых языков. Информации же по работе с самим WebAssembly и написанию кода непосредственно на нем в сети крайне мало, а в рунете и подавно, что я и попробую исправить под катом.

habr.com/ru/articles/901976/

#wasm #nodejs #игра_жизнь #ненормальное_программирование #терминал

2025-03-26

Почему игродев остается на С++17

Последние пару-тройку лет на конференциях все чаще я слышу жалобы знакомых в игрострое о том, что текущий вектор развития "современного C++" не соответствует потребностям игровой разработки. Реальные полезные нововведения фактически закончились с выходом C++17, а попытки внедрить C++20 часто заканчиваются обнаружением множества "гейзенбагов" и существенным снижением производительности - критичные для нас на 10-15% от сборки к сборке. Пошатавшись по разным игровым студиям, блин, скоро будет 15 лет как я тут, у меня таки немножечко есть, что вам рассказать. Все современные студии, что крупнее двух с половиной землекопов, пишущие игры на плюсах, шарпе или чем-то близком - используют Visual Studio или переходят со своих поделок на Unreal/Unity, который так-то тоже плюсы, хоть и со странностями. Так исторически сложилось, что винда и майки были, есть и в ближайшем будущем горизонта лет десяти останутся самым крупным рынком ПК-консольных игр, а сами консоли давно стали "ну совсем ПК", но чтобы не терять эксклюзивы (и шекели) вендоры в этом не признаются никогда. Мобилки, как-бы отдельно, и там свои свои покемоны Mac с Android, но в Visual Studio в том или ином виде создаются, дебажатся и оптимайзятся 95% игр, остальное - погрешность. С момента начала золотой эры игростроя (где-то в конце 90-х), большинство игр писались с учетом того, что они будут выпущены на ПК, под ПК понимается - под винду. И наследие многих A+-студий так или иначе связано с Microsoft, даже для не-Microsoft консолей и мобилок.

habr.com/ru/articles/894736/

#с++ #с++17 #игры #игры_и_игровые_приставки #ненормальное_программирование

2025-03-21

Почему TeqFW использует только ES-модули?

Ни у кого не получится показать другому то, что тот не хочет или не может увидеть. Объяснять и показывать нужно только тем, кто а) может понять , б) хочет понять . В этой публикации я демонстрирую пару своих документов для LLM, которые предписывают " силиконовым ", какими правилами им следует руководствоваться при создании кода для моей платформы. " Силиконовым " можно впаривать любую дичь - они всеядные ( могут понять ) и покладистые ( согласны понять ). За это мы их и любим! Кому интересно, что за инструкции - прошу под кат. Кто хочет сразу получить ответ на вопрос в заголовке - могут задать его (и множество других) соответствующему преднастроенному GPT-чату . Кто не хочет ни того, ни другого - в вашей ленте есть ещё куча других, более интересных публикаций.

habr.com/ru/articles/892942/

#teqfw #tequila #ненормальное_программирование #почему_бы_и_нет #llm

2025-03-19

Game++. Unpacking containers

Независимо от того, начинаете ли вы разрабатывать свою игру или присоединяетесь к уже существующему проекту, когда приходит время оптимизировать память и заниматься разным улучшайзингом, то всегда встают одни и те же вопросы. Стоит ли использовать собственные контейнеры? Если использовать свои, то какой лучше выбрать - похожий на vector, или больше подойдет map? Является ли связный список наилучшим выбором при частых вставках и удалениях элементов? А откуда эти вставки вообще взялись, но это конечно другой вопрос. В большинстве случаев студии начинают реализовывать свои решения, заточенные под игру, это со временем приводит к появлению библиотеки решений, а частенько и полной замене всего STL стека. Основная причина - это добиться непрерывного размещения элементов в памяти, чтобы максимизировать локальность кэша при их обходе. Надеюсь, понятно для чего это делают: часто быстрее обойти 1000 элементов, которые лежат друг за другом, чем дюжину, которая раскидана по разным частям оперативки. Если вы не готовы писать и поддерживать свою STL, старайтесь, использовать vector, он хотя бы предсказуем по времени на всех платформах. Так вам скажет большинство разработчиков игр на C++, но проблема в том, что vector перераспределяет хранимые объекты в памяти при вставке новых элементов, а также при удалении любого элемента, кроме последнего. Это означает, что указатели на элементы вектора становятся недействительными, и тогда все зависимости и взаимодействия между элементами перестают работать. Конечно, можно обращаться к элементам через индексы вместо указателей, но индексы тоже теряют актуальность при вставке или удалении элементов не с конца контейнера. К тому же, аллокация памяти тоже небесплатная и может сильно подкосить перф при неправильном использовании. Да, вектора много где выигрывают у других контейнеров, но не одним только вектором жив игрострой, у нас есть кое-что и побыстрее и постабильнее.

habr.com/ru/articles/891700/

#с++ #игры_и_игровые_приставки #разработка_игр #программирование #ненормальное_программирование

Client Info

Server: https://mastodon.social
Version: 2025.07
Repository: https://github.com/cyevgeniy/lmst