?

Log in

No account? Create an account
Помощники - Valse oubliée [entries|archive|friends|userinfo]
aruslan

[ userinfo | livejournal userinfo ]
[ archive | journal archive ]
[ delicious | aruslan's delicious ]

Links
[Links:| Tags Profile Friends FG1 PP gamedev XNA FF Entries Comments Memories ]

Помощники [May. 30th, 2006|03:06 pm]
aruslan
[Tags|, , , , ]

Ненавижу
автоматически рождающиеся объекты типа блокирующего loading-on-demand. И синглтоны типа Майерса.
автоматически уничтожающиеся объекты под smart_ptr. И подсчёт ссылок.
автоматически регистрирующиеся получатели сообщений. И unbound рассылку сообщений.
автоматически создающиеся нетривиальные объекты со статическим storage duration. И вообще бурную деятельность до main().

мгновенность, нераспределенность, модель exception, lower-order programming.

Но научить правильно не всегда получается.
LinkReply

Comments:
[User Picture]From: dubor
2006-05-30 11:21 am (UTC)
стареешь =) "прощай бурная молодость полная дурацких шишек и ошибок!" )))
(Reply) (Thread)
[User Picture]From: sergey_shandar
2006-05-30 11:33 am (UTC)
Можно я покементю? :-)

>автоматически рождающиеся объекты типа блокирующего loading-on-demand. И синглтоны типа Майерса.
Ну это из за корявости C++ все.

>автоматически уничтожающиеся объекты под smart_ptr. И подсчёт ссылок.
И GC туда же? :-) Больше всего достает во всем это то, что даже когда объект уже как бы формально сдох, все равно приходится иммитировать жизнь, так как, какая то св...ь все еще держит указатель и когда GC, или еще кто то решит, вызвать деструктор - никто не знает (я еще ни разу не применял деструктор в C#, зачем вообще нужна функция которая вызывается неизвестно когда?). Так как мне просто приходится работать с COM и без AddRef и Release ну просто никак, на современном C++ эффективный и ЧЕСТНЫЙ GC практически не возможен. То вот мои наивный мысли, счетчик ссылок останется, но только для пустышек :-).
(Reply) (Thread)
[User Picture]From: aruslan
2006-05-30 11:51 am (UTC)
Импульсный GC с чёткой семантикой деструкции и финализации меня устраивает.
Типа уровень загрузили/выгрузили, или чанк уровня застримили/выкинули ;)

Имхо, классический GC применим только для тривиальных ADT.
Уж лучше смотреть тогда сильно в сторону от C++ ;)

А у тебя еще и COM, бедный.
Прокси хорош только если HRESULT можно все время кривой возвращать, нет?
О! Я зыбыл написать, что ненавижу исключения, вот! :)

С++ - говноязык, однозначно :)
(Reply) (Parent) (Thread) (Expand)
From: neteraser
2006-05-30 11:53 am (UTC)
не согласен. жизнь до main это показатель очень неслабого девпроцесса и культуры как по мне. а то что ты указал так это паебень, отношения не имеющая к жизни до main, а скорее просто от незнания.
(Reply) (Thread)
[User Picture]From: aruslan
2006-05-30 12:05 pm (UTC)
жизнь до main - по мне - так это от незамутнённости сознания.
от тупости и неумения переносить жизнь из одного периода в другой.

но всё это поебень, конечно :)
(Reply) (Parent) (Thread)
From: shodan_ru
2006-05-30 02:02 pm (UTC)
госспади, refcounted то за што...
:)
(Reply) (Thread)
[User Picture]From: aruslan
2006-05-30 02:27 pm (UTC)
шоданчег, есть периоды в жизни, когда аккуратно считаешь референсы, да.
(Reply) (Parent) (Thread) (Expand)
(no subject) - (Anonymous) Expand
[User Picture]From: sim0nsays
2006-05-30 03:59 pm (UTC)
Буду разводить на комменты.
А можно по каждому пункту "как надо"? Без читерств типа YMMV ;)
(Reply) (Thread)
[User Picture]From: aruslan
2006-05-30 10:19 pm (UTC)
Бля, Семёнчег, может тебе еще Реквием дать почитать? :)
Я не умею писать одновременно быстро, ясно и убедительно.
Выбери два, любитель треугольников.
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: plakhov
2006-05-30 04:17 pm (UTC)

модель exception

wtf is модель exception? научи
(Reply) (Thread)
[User Picture]From: aruslan
2006-05-30 11:05 pm (UTC)

Re: модель exception

Исключения в обычных играх не нужны.
Но если бы были нужны или если мы говорим про специфические места типа Live и т.п., или если мы говорим про бизнес логику на стыке игра-биллинговая система, то

- они мгновенны - то есть откатить транзакцию или показать диалоговое окно или отложить обработку или тупо retry в процессе раскрутки стека нельзя; в теории это ненужно, на практике - тот же откат транзакций - или сбой в двухфазном коммите - гораздо более сильное средство.

- они непереносимы в другие контексты.
в многопоточном движке исключение типа "ошибка инициализации ассета" (и уж тем более "нет памяти") бессмысленно и возникает не там, где оно нужно. классическая проблема HRESULT и передачи ошибок в схемах типа pipelines-фильтры-IPC.

В принципе о них можно думать как о второй ветви continuation.
И в принципе в исключения можно нарастить всю историю трансформации исключения от "нет файла" до "поменяйте DVD с игрой" (как в .NET).

- у них жёсткий неуправляемый матчинг, основанный на прямолинейной иерархии наследования. часто хочется декларативной тегированной или шаблонно-тегированной схемы сопоставления.
(Reply) (Parent) (Thread) (Expand)
From: ex_alexeych
2006-05-30 05:33 pm (UTC)
Кризис среднего возраста накатывает? ;)
(Reply) (Thread)
[User Picture]From: aruslan
2006-05-30 10:40 pm (UTC)
Ага, долги раздаю.
(Reply) (Parent) (Thread)
[User Picture]From: ddima
2006-05-30 05:51 pm (UTC)
+1 (автоматически рождающиеся объекты типа блокирующего loading-on-demand. И синглтоны типа Майерса).

+1 (автоматически уничтожающиеся объекты под smart_ptr. И подсчёт ссылок).
Уж если объект умер,дайте ему умереть спокойно. Если кто-то хочет на него смотреть во время гибели, дайте ему извещение "оно умерло". Путь дольше этот кто-то сам что хочет, то и делает со своей ссылкой.

-1 (автоматически регистрирующиеся получатели сообщений. И unbound рассылку сообщений).
Руслан, а их-то за что? Короче, надеюсь, мы с с тобой еще подискутируем на эту тему. Хотя в unbound есть и свое зло :)

+1 (автоматически создающиеся нетривиальные объекты со статическим storage duration. И вообще бурную деятельность до main()).
См. пост выше.

мгновенность, нераспределенность, модель exception, lower-order programming.
Жопой чувствую, что надо тоже написать "+1" но тема нифига не раскрыта.
(Reply) (Thread)
[User Picture]From: aruslan
2006-05-30 11:10 pm (UTC)
> -1 (автоматически регистрирующиеся получатели сообщений.
> И unbound рассылку сообщений).

Ну тут ключевые слова автоматически и unbound.
То есть во всех известных мне местах рассылки сообщений
- дробили одно сообщение на цепочку сообщений (из-за бардака)
- вводили правила приоритетов на сообщения (из-за бардака и проблем)
- чётко разделяли сообщения на получателей (кто когда именно)
- выясняли, что делать, если получатель удаляется или создается в процессе
- выясняли, как прекратить дальнейшую обработку
- заменяли на прямые вызовы, потому что уже и так всё понятно.

То есть к концу возникало чёткое понимание, где же именно точка расширения или хука в системе.
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: justy_tylor
2006-05-30 05:54 pm (UTC)
автоматически уничтожающиеся объекты под smart_ptr. И подсчёт ссылок.
Ресурсы, когда они не могут быть заранее упакованы.
автоматически регистрирующиеся получатели сообщений. И unbound рассылку сообщений.
Обработка консольных команд, etc.
модель exception
А какие проблемы с исключениями, кроме вопросов эффективности конкретно в C++?
(Reply) (Thread)
[User Picture]From: aruslan
2006-05-30 10:38 pm (UTC)
Ресурсы, которые не могут быть заранее упакованы - это очень специфичный проблемный случай, который не может быть широко виден по коду. Точнее он вообще не должен быть виден практически. А если виден - значит дело не в ресурсах, а в процессе. То есть в голове. То есть проблема.

Консольные команды как отладочно-подстроечное средство - это очень специфичный проблемный случай [...]. А если весь игровой код висит на консольных командах - значит нужно менять что-то в дизайне игрового кода. Ты еще скажи, что у вас геймдизайн консольными командами настраивается.
В любом случае - обширное использование консольных команд равноценно скриптованию, а определение команд - интеграции. Подписчики на события в данном контексте - это результат смешения котлет и мух в голове, имхо.

Исключения
- мгновенны (не допускают откладывания обработки),
- жёсткий неуправляемый matching (класс-наследники vs regexp/шаблоны/тэгирование),
- непереносимы в другие контексты (потоки и т.п.),
- непреобразуемы без потерь на границе слоёв (C++),
- плохо соотносятся с созданием и никак - с уничтожением (C++),
- не всегда эффективны.
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: __rico
2006-05-30 09:04 pm (UTC)
фактически вышенаписанное означает "я ненавижу с++" :)
(Reply) (Thread)
[User Picture]From: aruslan
2006-05-30 10:25 pm (UTC)
Ага.
То есть что я C++ ненавижу, это вроде и так все знают.
Но здесь скорее мое неумение научить.
Балансу между тупостью и рисковостью.

Люди или слишком бояться начинают, или уходят в расколбас.
А нарушение любого правила - это всегда средство выразительности.
Оно всегда должно быть осознанным.
И оно должно быть, иначе не интересно.
(Reply) (Parent) (Thread) (Expand)
(no subject) - (Anonymous) Expand
[User Picture]From: _winnie
2006-05-31 09:57 pm (UTC)
<mho>
Всё что ты выше перечислил - позволяют переложить задачи с людей на роботов(это разжижает мозг или освобождает его для других задач?). С риском, что роботы выйдут из под контроля. И что хрено его знает, как эти роботы выполнили задачу, мы видим только результат. Но вполне может выйти и так, что всё будет здорово.
Можно потратить [#] дней для того, что бы придумать и реализовать схему, в которой не будет ничего лишнего. А можно использовать shared_ptr вместо instrusive_ptr "потому что меньше писать и не надо шо-то наследовать от RefCount". Это уменьшает мифическое время разработки.
</mho>
(Reply) (Thread)
[User Picture]From: aruslan
2006-05-31 10:12 pm (UTC)
Не совсем так, Пушыстик.
Всё, что я перечислил - И разжижает мозг, И не даёт нормально переложить на роботов.
Это как бы такой локальный оптимум.
Я еще много буду писать про локальные оптимизации.
Т.е. это иллюзии.

Правильнее чутка выше подойти. И искать чуть более глобальный оптимум.

Понятно написал?
(Reply) (Parent) (Thread) (Expand)
(no subject) - (Anonymous) Expand
[User Picture]From: __anubis__
2006-06-02 01:46 pm (UTC)
блиа, ваш http://lj.setia.ru/threader/ нихера тут не работает почему-то... %)
(Reply) (Thread)
[User Picture]From: aruslan
2006-06-02 04:46 pm (UTC)
Есть такое.
http://aruslan.livejournal.com/75096.html
Советовали какой-то LJ Watcher.
Если будешь возиться - расскажи, что получилось :)
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: _winnie
2006-06-09 12:42 am (UTC)
а вот Doom3 грузил модели из текстого файла. И вроде хорошая игра. И скорость загрузки хоть и не реактивная, но приемлемая, и не меши эти парсящиеся sscanf её тормозят, наверное(голословно).
(Reply) (Thread)
[User Picture]From: aruslan
2006-06-09 11:41 am (UTC)
Ну, я как-то на выходных (еще в Jaleco) сконвертил уровень Дума 3.
У меня игра у уровнем загружалась за считанные секунды (около трёх, вроде бы).

Могу сказать, что sscanf не ускоряет загрузку, однозначно.
(Reply) (Parent) (Thread)