Ненавижу
автоматически рождающиеся объекты типа блокирующего loading-on-demand. И синглтоны типа Майерса.
автоматически уничтожающиеся объекты под smart_ptr. И подсчёт ссылок.
автоматически регистрирующиеся получатели сообщений. И unbound рассылку сообщений.
автоматически создающиеся нетривиальные объекты со статическим storage duration. И вообще бурную деятельность до main().
мгновенность, нераспределенность, модель exception, lower-order programming.
Но научить правильно не всегда получается.
автоматически рождающиеся объекты типа блокирующего loading-on-demand. И синглтоны типа Майерса.
автоматически уничтожающиеся объекты под smart_ptr. И подсчёт ссылок.
автоматически регистрирующиеся получатели сообщений. И unbound рассылку сообщений.
автоматически создающиеся нетривиальные объекты со статическим storage duration. И вообще бурную деятельность до main().
мгновенность, нераспределенность, модель exception, lower-order programming.
Но научить правильно не всегда получается.
no subject
Date: May. 30th, 2006 11:21 (UTC)no subject
Date: May. 30th, 2006 11:33 (UTC)>автоматически рождающиеся объекты типа блокирующего loading-on-demand. И синглтоны типа Майерса.
Ну это из за корявости C++ все.
>автоматически уничтожающиеся объекты под smart_ptr. И подсчёт ссылок.
И GC туда же? :-) Больше всего достает во всем это то, что даже когда объект уже как бы формально сдох, все равно приходится иммитировать жизнь, так как, какая то св...ь все еще держит указатель и когда GC, или еще кто то решит, вызвать деструктор - никто не знает (я еще ни разу не применял деструктор в C#, зачем вообще нужна функция которая вызывается неизвестно когда?). Так как мне просто приходится работать с COM и без AddRef и Release ну просто никак, на современном C++ эффективный и ЧЕСТНЫЙ GC практически не возможен. То вот мои наивный мысли, счетчик ссылок останется, но только для пустышек :-).
no subject
Date: May. 30th, 2006 11:51 (UTC)Типа уровень загрузили/выгрузили, или чанк уровня застримили/выкинули ;)
Имхо, классический GC применим только для тривиальных ADT.
Уж лучше смотреть тогда сильно в сторону от C++ ;)
А у тебя еще и COM, бедный.
Прокси хорош только если HRESULT можно все время кривой возвращать, нет?
О! Я зыбыл написать, что ненавижу исключения, вот! :)
С++ - говноязык, однозначно :)
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: May. 30th, 2006 11:53 (UTC)no subject
Date: May. 30th, 2006 12:05 (UTC)от тупости и неумения переносить жизнь из одного периода в другой.
но всё это поебень, конечно :)
no subject
Date: May. 30th, 2006 12:19 (UTC)так, может быть, будет более понятно.
no subject
Date: May. 30th, 2006 16:39 (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: May. 30th, 2006 17:37 (UTC)А потом ты ребутишь PS2 IOP и вынужден все начинать сначала :)
Жызнь до main() - зло.
P.S. Мне стала нравится идеология MW, который инициализирует все только по явному запросу mwInit().
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: May. 30th, 2006 14:02 (UTC):)
no subject
Date: May. 30th, 2006 14:27 (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:мой пароль на работе
From: (Anonymous) - Date: Jun. 1st, 2006 18:26 (UTC) - Expand(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From: (Anonymous) - Date: Jun. 1st, 2006 18:28 (UTC) - Expand(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: May. 30th, 2006 15:59 (UTC)А можно по каждому пункту "как надо"? Без читерств типа YMMV ;)
no subject
Date: May. 30th, 2006 22:19 (UTC)Я не умею писать одновременно быстро, ясно и убедительно.
Выбери два, любитель треугольников.
(no subject)
From:(no subject)
From:модель exception
Date: May. 30th, 2006 16:17 (UTC)Re: модель exception
Date: May. 30th, 2006 23:05 (UTC)Но если бы были нужны или если мы говорим про специфические места типа Live и т.п., или если мы говорим про бизнес логику на стыке игра-биллинговая система, то
- они мгновенны - то есть откатить транзакцию или показать диалоговое окно или отложить обработку или тупо retry в процессе раскрутки стека нельзя; в теории это ненужно, на практике - тот же откат транзакций - или сбой в двухфазном коммите - гораздо более сильное средство.
- они непереносимы в другие контексты.
в многопоточном движке исключение типа "ошибка инициализации ассета" (и уж тем более "нет памяти") бессмысленно и возникает не там, где оно нужно. классическая проблема HRESULT и передачи ошибок в схемах типа pipelines-фильтры-IPC.
В принципе о них можно думать как о второй ветви continuation.
И в принципе в исключения можно нарастить всю историю трансформации исключения от "нет файла" до "поменяйте DVD с игрой" (как в .NET).
- у них жёсткий неуправляемый матчинг, основанный на прямолинейной иерархии наследования. часто хочется декларативной тегированной или шаблонно-тегированной схемы сопоставления.
Re: модель exception
From:Re: модель exception
From:no subject
Date: May. 30th, 2006 17:33 (UTC)no subject
Date: May. 30th, 2006 22:40 (UTC)no subject
Date: May. 30th, 2006 17:51 (UTC)+1 (автоматически уничтожающиеся объекты под smart_ptr. И подсчёт ссылок).
Уж если объект умер,дайте ему умереть спокойно. Если кто-то хочет на него смотреть во время гибели, дайте ему извещение "оно умерло". Путь дольше этот кто-то сам что хочет, то и делает со своей ссылкой.
-1 (автоматически регистрирующиеся получатели сообщений. И unbound рассылку сообщений).
Руслан, а их-то за что? Короче, надеюсь, мы с с тобой еще подискутируем на эту тему. Хотя в unbound есть и свое зло :)
+1 (автоматически создающиеся нетривиальные объекты со статическим storage duration. И вообще бурную деятельность до main()).
См. пост выше.
мгновенность, нераспределенность, модель exception, lower-order programming.
Жопой чувствую, что надо тоже написать "+1" но тема нифига не раскрыта.
no subject
Date: May. 30th, 2006 23:10 (UTC)> И unbound рассылку сообщений).
Ну тут ключевые слова автоматически и unbound.
То есть во всех известных мне местах рассылки сообщений
- дробили одно сообщение на цепочку сообщений (из-за бардака)
- вводили правила приоритетов на сообщения (из-за бардака и проблем)
- чётко разделяли сообщения на получателей (кто когда именно)
- выясняли, что делать, если получатель удаляется или создается в процессе
- выясняли, как прекратить дальнейшую обработку
- заменяли на прямые вызовы, потому что уже и так всё понятно.
То есть к концу возникало чёткое понимание, где же именно точка расширения или хука в системе.
(no subject)
From:(no subject)
From:no subject
Date: May. 30th, 2006 17:54 (UTC)Ресурсы, когда они не могут быть заранее упакованы.
автоматически регистрирующиеся получатели сообщений. И unbound рассылку сообщений.
Обработка консольных команд, etc.
модель exception
А какие проблемы с исключениями, кроме вопросов эффективности конкретно в C++?
no subject
Date: May. 30th, 2006 22:38 (UTC)Консольные команды как отладочно-подстроечное средство - это очень специфичный проблемный случай [...]. А если весь игровой код висит на консольных командах - значит нужно менять что-то в дизайне игрового кода. Ты еще скажи, что у вас геймдизайн консольными командами настраивается.
В любом случае - обширное использование консольных команд равноценно скриптованию, а определение команд - интеграции. Подписчики на события в данном контексте - это результат смешения котлет и мух в голове, имхо.
Исключения
- мгновенны (не допускают откладывания обработки),
- жёсткий неуправляемый matching (класс-наследники vs regexp/шаблоны/тэгирование),
- непереносимы в другие контексты (потоки и т.п.),
- непреобразуемы без потерь на границе слоёв (C++),
- плохо соотносятся с созданием и никак - с уничтожением (C++),
- не всегда эффективны.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: May. 30th, 2006 21:04 (UTC)no subject
Date: May. 30th, 2006 22:25 (UTC)То есть что я C++ ненавижу, это вроде и так все знают.
Но здесь скорее мое неумение научить.
Балансу между тупостью и рисковостью.
Люди или слишком бояться начинают, или уходят в расколбас.
А нарушение любого правила - это всегда средство выразительности.
Оно всегда должно быть осознанным.
И оно должно быть, иначе не интересно.
(no subject)
From: (Anonymous) - Date: Jun. 1st, 2006 09:46 (UTC) - Expand(no subject)
From:no subject
Date: May. 31st, 2006 21:57 (UTC)Всё что ты выше перечислил - позволяют переложить задачи с людей на роботов(это разжижает мозг или освобождает его для других задач?). С риском, что роботы выйдут из под контроля. И что хрено его знает, как эти роботы выполнили задачу, мы видим только результат. Но вполне может выйти и так, что всё будет здорово.
Можно потратить [#] дней для того, что бы придумать и реализовать схему, в которой не будет ничего лишнего. А можно использовать shared_ptr вместо instrusive_ptr "потому что меньше писать и не надо шо-то наследовать от RefCount". Это уменьшает мифическое время разработки.
</mho>
no subject
Date: May. 31st, 2006 22:12 (UTC)Всё, что я перечислил - И разжижает мозг, И не даёт нормально переложить на роботов.
Это как бы такой локальный оптимум.
Я еще много буду писать про локальные оптимизации.
Т.е. это иллюзии.
Правильнее чутка выше подойти. И искать чуть более глобальный оптимум.
Понятно написал?
(no subject)
From:(no subject)
From:(no subject)
From: (Anonymous) - Date: Jun. 1st, 2006 09:34 (UTC) - Expand(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: Jun. 2nd, 2006 13:46 (UTC)no subject
Date: Jun. 2nd, 2006 16:46 (UTC)http://aruslan.livejournal.com/75096.html
Советовали какой-то LJ Watcher.
Если будешь возиться - расскажи, что получилось :)
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: Jun. 9th, 2006 00:42 (UTC)no subject
Date: Jun. 9th, 2006 11:41 (UTC)У меня игра у уровнем загружалась за считанные секунды (около трёх, вроде бы).
Могу сказать, что sscanf не ускоряет загрузку, однозначно.