Pull to refresh

Comments 16

AString… автору, конечно, виднее, но как-то не совсем ясно, почему нельзя обойтись готовыми реализациями строк. Что за специфические требования к работе с памятью такие? std::string не всем удобен, могу согласиться — но почему бы тогда не использовать что-нибудь вроде QString из состава Qt?
и тащить весь Qt ради QString? Не звучит как хорошая идея. К тому же строки в Qt — COW, а поэтому жутко тормозные на современных многоядерных процессорах *насколько я знаю*

Моя основная мысль не в QString — его я привёл как пример — а в том, есть ли КРУПНЫЙ выигрыш от написания, а потом таскания за собой толстого велосипеда. Жизнь слишком коротка для такой "экономии на спичках" путём выпиливания их вручную из цельного массива сосны :)
P.S. Весь Qt, кстати, тащить не надо — ЕМНИП, хватает Core, в котором при этом много и других полезных штук. Ужасы же copy-on-write, как по мне, сильно преувеличены. Основные статьи идеологов борьбы с COW относятся к нулевым, причём рассматривают не самые жизненные ситуации. На многоядерных процессорах COW, несомненно, даёт проигрыш при частых операциях, касающихся необходимости соблюдения atomic — но я совсем не уверен, что этот проигрыш нынче так велик, каким он выглядел в том десятилетии. Вопрос интересный, хотелось бы провести парочку синтетических тестов.

Утрированно. Про масштабы экономии спички.
Надо понимать, что ЛОЛ ОЧЕНЬ большая игра. Чуть ли не самая (если не самая) массовая сетевая игра. И если получится сэкономить 1 спичку на серверном коде, то спасается не сосна, а целый лес. Это на серверной части вместо 1000 серверов для 1 000 000 игр, используется 900. Много? Вполне.
Клеить строки на сервере так и передавать их по сети так себе план в таких играх. Тут скорее проблема стабильности игрового клиента, когда за секунду надо показать пару сотен текстовых панелек с уроном разного типа, счетчики, обновляя параллельно индикаторы здоровья/маны, откаты и вот это вот все.
В LOL около 40 миллионов ежедневной аудитории, то есть 80-200 млн. игр в зависимости от дня недели. Так что очень много :)

Были бенчмарки, результат следующий: чем больше ядер, тем хуже для коровы.

Сначала отказываются экономить на спичках, а потом просят пользователей купить компы помощнее.
Я за последние годы привык, что мой комп всегда не в топе для игр. Особенно для воксельных — в них часто приходится просчитывать огромное количество блоков. Поскольку я люблю игры в жанре строительство\песочница\выживание, я перебрал некоторое количество интересных вариантов на эту тематику. И недавно я нашёл алмаз — не в плане геймплея, а в плане оптимизации. Игра с хорошей графикой и огромным миром — летает. А всё потому, что писали на сишечке и экономили на спичках)
Потому что специфичное решение, заточенное для решения определенных задач как правило лучше решения обобщенного.
универсальное — работающее (как правило) одинаково плохо во всех случаях
std::string работает только с char, не поддерживает UTF-8
std::string не обладает intrusive_ptr
std::string может быть перегружен лишней работой с памятью
std::string не поддерживает свой аллокатор
Свой класс строк может быть не совсем тем, что понимается в std::string. И вполне возможно, что не применим нигде, кроме этого движка.
Отличный труд, спасибо! Очень интересно!
Хорошая статья, поможет объяснять руководству почему нельзя по быстрому сделать какую то «фичу» противоречащую основным механикам.
Sign up to leave a comment.

Articles