?

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: 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)
[User Picture]From: sergey_shandar
2006-05-31 12:41 am (UTC)

Re: модель exception

А причем здесь HRESULT? Насколько я понимаю, НЕ СУЩЕСТВУЕТ другого способа, как передать ХОТЯ БЫ один байтик, дать удаленному клиенту знать что произошла ошибка. Вот этот ХОТЯ БЫ и есть HRESULT (не забываем что через него же COM Proxy сообщает что сервер сдох). А если нужно расширенные ошибки, то - IErrorInfo есть на то. COM нужно рассматривать как базу для общения между большими разными модулями, а сверху уже городить огород с обработкой.

Конечно система не идеальная, лучще что бы компилятор решал где могут быть ошибки (если ему известна логика поведения модулей), а где нет, нужна обработка или нет, но это уже в сторону Singularity. Оно нас всех вылечит...
(Reply) (Parent) (Thread)
[User Picture]From: aruslan
2006-05-31 09:02 pm (UTC)

Re: модель exception

Я про HRESULT в плане - одно из существующих средств.

Аналогичная проблема есть в классическом паттерне типа фильтры (пайплайн).
Скажем, alla UNIX система наборных мелких утилит, которые ты соединяешь output->input.

Если ты рассчитываешь, что всё хорошо -- всё хорошо.
Но если что-то поросло - удачи :)
(Reply) (Parent) (Thread)