![]() |
#61 | |||
Новичок
Регистрация: 20.12.2007
Сообщений: 20
Репутация: 0
|
Жесть :D
![]() XNA и C# - действительно революция. И я уверен, что в скором времени крупные конторы перейдут именно на XNA. Утверждение что C# прямо таки сильно отстает от С++ - неверно. Учитывайте факт о том, сколько десятков лет совершенствовались компиляторы С++'ные и сколько C# - это раз, второе: оптимизация .Net, действительно существует. Воть: Цитата:
http://www.grimes.demon.co.uk/dotnet/man_unman.htm http://www.osnews.com/story.php/5602...File-IO/page3/ http://blogs.msdn.com/ricom/archive/...ry-reader.aspx Нужно время, чтобы на XNA начали делать действительно быстрые игры. Должно сложится правильное мнение "как" именно делать игры на .Net. Цитата:
|
|||
![]() |
|
![]() |
#62 | ||
Игроман
Регистрация: 31.07.2006
Адрес: loltraktorville
Сообщений: 2,780
Репутация: 786
|
Цитата:
Был бы C# действительно так быстр, как ты утверждаешь, то профи давным давно бы сидели на нем, однако же этого не произошло. Цитата:
Кстати в одном из тестов есть: ___________________double math Visual C++___________6.4 Visual C#____________17.7 Это довольно важно в 3D и как видим тут просто пропасть.
__________________
Люди — идиоты. Они сделали кучу глупостей: придумали костюмы для собак, должность рекламного менеджера и штуки вроде айфона, не получив взамен ничего, кроме кислого послевкусия. А вот если бы мы развивали науку, осваивали Луну, Марс, Венеру… Кто знает, каким был бы мир тогда? Человечеству дали возможность бороздить космос, но оно хочет заниматься потреблением — пить пиво и смотреть сериалы. Рей Бредбери. Последний раз редактировалось Feanor62rus; 20.12.2007 в 22:38. |
||
![]() |
|
![]() |
#63 | ||||
Кандидат наук
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта
|
У меня достаточно опыта, чтобы понять недостатки XNA, не пробуя её на вкус. Вы, надо думать, на C++ игр тоже не писали. А вот я - писал дипломный проект.
Цитата:
Цитата:
Операция сборки мусора достаточно дорогостоящее удовольствие. Во время ее выполнения все потоки приложения приостанавливаются. То есть играете Вы в Quake, и тут - раз! - потоки приостановились, ибо мусорок решил кто-то убрать. Пусть даже на десятую долю секунды (а ведь программа памяти мнооого кушает! По 512 метрам поди пройдись, а тот же Кризис 3 гига жрёт, как Вы же говорили...). Но, как знают игроки, подобный тормоз не просто глаза режет - он смерти подобен. Ибо за эти доли секунды средней руки снайпер из вас отбивную сделает. Занавес. Цитата:
JohnK, Вы, как и noLove, не можете понять одной вещи: игры - приложения специфические. C# может не отставать от С++ в офисных программах, он даже может делать его в специально оптимизированных тестах - но в играх он будет безнадёжно отставать. Почему - почитайте хотя бы http://www.rsdn.ru/article/devtools/perftest.xml. Посмотрите на тест с древовидной сортировкой (Tree sort). Вот где выходит наружу наличие в C# сборщика памяти. Процитирую: Цитата:
Только из одного этого примера видно, что для игр C# не подходит в принципе, и если у Вас нет чего возразить именно на ситуацию со сборкой памяти (а это вывод, подчеркну, из заявления о работе сборщиков, т.е. именно того, что должно быть в идеале), то уж признайте - написанные на C# Crysis и иже с ним будет тормозить безбожно просто потому, что постоянно будет пахать сборщик памяти. В C++ же есть возможность оптимизации по памяти, inline-функции и соответствующая оптимизация и т.п., чего в C# просто быть не может. Я не исключаю, что в простых приложениях с объёмом памяти в 50-100 мегабайт C# будет не уступать C++, и плевать даже на ситуацию с double math преснопамятным (хотя, как верно заметил Feanor62rus, все 3D-вычисления именно таковыми и являются). Но чисто из-за огромной потребности профессиональных игр в памяти сборщик мусора для них является катастрофой и гигантским тормозом. Если Вы этого не понимаете - Вы не знаете азы программирования, а делаете поверхностные выводы из статей, даже не задумываясь над их содержанием.
__________________
Товарищ, верь: пройдет она - Эпоха лживых, злых понятий. Весь мир очнется ото сна, И на обломках "демократий" Напишут наши имена! Мы были волшебницами (оригинальное фентези) Тень Войны (фанфик по ГП) |
||||
![]() |
|
![]() |
#64 | ||
Новичок
Регистрация: 19.03.2007
Сообщений: 33
Репутация: 2
|
Скрытый текст: напиши на заборе об этом, чтобы стать реально крутым, здесь я только понты вижу, и ни бОльше. Сейчас куча народу поступает в универы на пристрижные специальности типа информационных технологий, автоматизация, и т.д. и лишь единицы из этих выпускников реально что то могут. Скрытый текст: А ты явно статью до конца не дочитал. Там вроде ясно расписаны моменты, провоцирующие запуск GC. А чтобы память не забивалась то ее тоже ручками освобождать можно, никто не мешает это делать |
||
![]() |
|
![]() |
#65 | |||
Кандидат наук
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта
|
Цитата:
Цитата:
Я же лишь констатирую - Вам не хватает то ли логики, то ли знаний для конкретного спора. Цитата:
Если бы в C# была возможность ручного удаления объектов... но вот незадача - тогда мы теряем так возносимое Вами отличие от C++, и постепенно превращаем C# чуть ли не в его аналог.
__________________
Товарищ, верь: пройдет она - Эпоха лживых, злых понятий. Весь мир очнется ото сна, И на обломках "демократий" Напишут наши имена! Мы были волшебницами (оригинальное фентези) Тень Войны (фанфик по ГП) |
|||
![]() |
|
![]() |
#67 | ||
Новичок
Регистрация: 20.12.2007
Сообщений: 20
Репутация: 0
|
На каком основании вы мне минус в репутации сделали? Слишком умный чтоли? Вот и показал какой ты модер.
Я вижу сборщик мусора - это единственный контр-аргумент. Так вот, многие уже давно научились делать так, чтоб провоцировать его вызовы как можно реже, если этого не умеете делать вы - примите мои собалезнования. Тем более XBOX360 имеет никакующий сброщик, вот и приходится аккуратно писать. |
||
![]() |
|
![]() |
#68 | ||
Кандидат наук
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта
|
noLove
Сколько раз Вам повторять, чтобы Вы поняли? C# - это тот самый GC. Он записан в спецификации. Всё остальное - это, извините, unsafe. А unsafe - это C++. Какое у C# будет преимущество перед C++, если писать unsafe-коды, не подскажите? Проблема не в том, когда вызывается GC, а в том, что когда он это делает, он пробегается по целым 3-4 гигам памяти и её чистит. А в Вашей же статье написано, что все остальные потоки на это время приостанавливаются... То есть и рендеринг, и физика, и AI. Привет, тормозам. Скрытый текст: Наверное, единственный, который Вы увидели или по которому у Вас есть что сказать. Вторым по серьёзности идёт double math - чуть выше написано. А дальше ещё много чего можно вставить. Принципиальное отсуствие inline'ов, например. Когда язык донельзя виртуализирован - это весело, я вам скажу. Цитата:
Вы сами себе противоречите. Вы фактически сейчас казали, что XBOX не поддерживает спецификацию .NET. Учитывая, GC есть даже в мобильных устройствах (см. статейку noLove), могу с уверенностью заявить - Вы ошибаетесь.
__________________
Товарищ, верь: пройдет она - Эпоха лживых, злых понятий. Весь мир очнется ото сна, И на обломках "демократий" Напишут наши имена! Мы были волшебницами (оригинальное фентези) Тень Войны (фанфик по ГП) Последний раз редактировалось pokibor; 21.12.2007 в 09:46. |
||
![]() |
|
![]() |
#69 | ||
Новичок
Регистрация: 19.03.2007
Сообщений: 33
Репутация: 2
|
Цитата:
да и к тому же писать на шарпе горадо приятнее. КОд получается легко читаем и легко усвояем Цитата:
А чтобы не провоцировать GC еще раз повторяю, ненужные объекты нужно удалять ручками. GC при этом не сработает могу с уверенностью заявить что ты не знаешь о чем говоришь |
||
![]() |
|
![]() |
#70 | ||
Кандидат наук
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта
|
Цитата:
Я сейчас нашёл одну статейку про разработку игр на XNA. Так вот, там единственный аргумент в её пользу состоял как раз таки в том, что код на ней, видите ли, получается короче. Ну так код с использованием движка (напр. Irrlicht) получается столь же коротким и понятным. И что дальше? P.S. При заходе на третий круг у меня лопнет терпение и я просто буду удалять уже рассмотренные вещи. Цитата:
При удалении объектов вручную, ещё раз повторяю, код будет unsafe и мало чем отличаться от C++'ого кроме отсуствия оптимизации. В чём тогда преимущество C#? Какая мне разница, выделять и очищать память на C++ или делать то же самое на C#? Ну так объясните мне, чего я не знаю. Кажись, M$ заявлял, что программы на C# и XNA будут на XBOX работать. Но как же они могут работать, если на PC есть GC и его можно использовать, а на XBOX его нет? ![]()
__________________
Товарищ, верь: пройдет она - Эпоха лживых, злых понятий. Весь мир очнется ото сна, И на обломках "демократий" Напишут наши имена! Мы были волшебницами (оригинальное фентези) Тень Войны (фанфик по ГП) |
||
![]() |
|
![]() |
#71 | |||
Новичок
Регистрация: 20.12.2007
Сообщений: 20
Репутация: 0
|
Цитата:
Цитата:
Цитата:
|
|||
![]() |
|
![]() |
#72 | ||
Новичок
Регистрация: 19.03.2007
Сообщений: 33
Репутация: 2
|
Цитата:
Цитата:
ты такой умный, а ты знаешь что такое IDisposible? |
||
![]() |
|
![]() |
#73 | |||
Кандидат наук
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта
|
Цитата:
![]() Ибо Irrlicht это как раз и есть, говоря Вашим языком, набор пространств имён (irr; irr::core; irr::gui; irr::io; irr::scene; irr::video) и классов/интерфейсов (IrrlichtDevice, IVideoDriver, ISceneNode, vector3d ...). Уж тут то не надо пытаться со мной спорить, ибо я на Irrlicht писал, а Вы его, судя по всему, в глаза не видели. Если Вы думаете, что Irrlicht - это конструктор по типу GameMaker'а, то крупно заблуждаетесь. Цитата:
ООО, Вы хоть по C# хелп читали (кстати, Вы ещё и название интерфейса неправильно написали. Оно через 'a' пишется)? Процетирую MSDN: Цитата:
Мда... И Вы ещё обвиняете меня в незнании C# и XNA... А то что прямым текстом в MSDN написано, не прочитали.
__________________
Товарищ, верь: пройдет она - Эпоха лживых, злых понятий. Весь мир очнется ото сна, И на обломках "демократий" Напишут наши имена! Мы были волшебницами (оригинальное фентези) Тень Войны (фанфик по ГП) Последний раз редактировалось pokibor; 21.12.2007 в 10:43. |
|||
![]() |
|
![]() |
#74 | ||
Новичок
Регистрация: 20.12.2007
Сообщений: 20
Репутация: 0
|
Уж разрешите поправлю коллегу. Он, кстати вполне прав, но раз уж вы так придирчевы, то знайте: XNA это фреймворк, т.е. не GAPI, но и не двиг. А про ирлича вы отожгли, тов. модератор.
Цитата:
Цитата:
![]() |
||
![]() |
|
![]() |
#75 | ||
Кандидат наук
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта
|
Цитата:
Если Вы возражаете, распишите-как по-подробнее отличия XNA от Irrlicht. Кроме того, что Irrlicht позволяте писать как под C++, так и имеет .NET-версию, в отличие от чисто .NET'ной XNA. Цитата:
А то так и я могу тетрис на Прологе написать и говорить Вам: "Смотрите! Он работает без тормозов на передовом Пне/Атлоне! Prolog - вот лучший язык для игростроя! Все переходим на него!" Уж извольте прокомментировать. Этот текст взят из MSDN. Что такое MSDN и кто его писал Вы, надеюсь, знаете. А там прямо написано: "Defines a method to release allocated unmanaged resources." И что относится к unmanaged resources, там тоже написано: "unmanaged resources such as window handles, or open files and streams". Возражения? Сошлётесь на ошибку в MSDN? Сейчас по-подробнее прочитал про IDisposable - чуть со стула со смеху не свалился. Я то по простоте душевной думал, что он только для определённого класса объектов. Оказалось - нет, M$ расщедрилась на возможность сделать класс unmanaged. После чего мы, правда, терям все достоинства автоматической сборки мусора, взамен получая кучу проблем. Начнём с того, что наследование от IDisposable требует нехилых трудозатрат, т.к. нужно вручную вызывать Dispose() всех предков и обрабатывать все исключения, которые ими возвращаются, да ещё и необходимо ручками прописывать работу с любым классом, являющимся unmanaged. Далее, если есть два класса - один unmanaged, другой - managed и они как-то связаны (а в игре все объекты тесно связаны) - то всё очень-очень печально, ибо проверки прописывать замучаешься. Значит, половину игры нужно делать unmanaged. При том, что долбаний с Dispose куча (не в пример нормальным деструкторам в C++). Итог? 1) IDisposable порождает проблемы похлеще, чем C++'ные деструкторы, т.е. ухудшает код по сравнению с C++ (кто там хвастался, что на C# код понятнее?) 2) Он не даёт никаких преимуществ по сравнению с C++, зато убивает преимущества GC 3) Его нужно везде прописывать ручками. При этом замечу, что автоматическая сборка памяти всё равно никуда не девается и исправно жрёт свои ресурсы. Хотя бы на определение, а есть ли ей смысл сейчас вызываться (т.е. производительность всё равно страдает). Такими темпами мы придём к необходимости писать на C# в стиле C++. Вперёд! Осталось совсем немного - признать необходимость юзания unsafe-кода (хотя unmanaged - это по сути и есть unsafe, ибо он опасен утечкой всех unmanaged ресурсов, которые C#-писатели освобождать не привыкли). Я в шоке... Сейчас почитал про реализацию GC - ещё на пару минут жизнь себе продлил. Он-то, оказывается, реализован очень-очень грамотно. Он не считает ссылки на объект, а по дереву объекты обходит. И объект не нужен, если его нельзя достичь из корневого узла. А это ещё какое замедление алгоритма, особенно в сложных приложениях вроде игр, где дерево имеет кучу длинных ветвей... P.S. Если что - реализация грамотная без сарказма (если реализовывать иным образом - то объект спокойно может "потеряться", к примеру, если сам на себя ссылается). Вот только опять же для сложных приложений плохо подходящая.
__________________
Товарищ, верь: пройдет она - Эпоха лживых, злых понятий. Весь мир очнется ото сна, И на обломках "демократий" Напишут наши имена! Мы были волшебницами (оригинальное фентези) Тень Войны (фанфик по ГП) Последний раз редактировалось pokibor; 21.12.2007 в 12:32. |
||
![]() |
|
![]() |
#76 | ||
Пугатель
![]() Регистрация: 26.06.2005
Адрес: Москва, СССР
Сообщений: 6,111
Репутация: 1096
|
Цитата:
Цитата:
__________________
![]() Хорошо смеется тот, кто стреляет первым! (танкистская мудрость) |
||
![]() |
|
![]() |
#77 | ||
Новичок
Регистрация: 19.03.2007
Сообщений: 33
Репутация: 2
|
Цитата:
В том-то и дело, что одно из этих событий - переполнение памяти. А игры (я уже писал Выше, но Вы не поняли!) играются на близкой к предельной памяти, и быстрое её жрут (постоянно нужно грузить что-то новое или изменять старое). Иными словами, этот самый сборщик будет врубаться часто и со вкусом. Я уж не говорю о том, что вся доступная память компьютера будет быстро сжираться игрой до последнего мегабайта. Скрытый текст: а никто его не мешает к managed Объектам прикрутить Цитата:
XNARacer - наглядный пример игры на платформе .NET XNA, там есть все, современная графика, звук, физика, игровая логика. Оно летает при всем при этом Скрытый текст: ой, а в плюсах будто бы не надо все вручную писать *** Всякие готовые GAPI на плюсах пользовать бред. Для этих так называемых супермегапроектов. ибо эти GAPI - очередная прослойка => очередные тормоза. pokibor, а ты уычавствовал в создании "вершин игростроя"? IDisposable - мечта pokibor Последний раз редактировалось pokibor; 21.12.2007 в 16:24. |
||
![]() |
|
![]() |
#78 | |||
Кандидат наук
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта
|
Цитата:
Но факт в том, что Irrlicht даёт полный спектр классов для доработки движка на любом уровне. И он, в отличие от XNA, open source (откуда, собственно, этот любой уровень и берётся). Дальше у Вас идёт цитата моих слов в текте Вашего поста... к чему это, не понял. Наверное, ошибка... Потрудитесь перечитать свой пост после его публикации. И какой тогда смысл? Половина объекта будет managed и будет убираться сборщиком мусора, половина - unmanaged и будет убираться Dispose. Вы, кажется, не поняли, что Dispose работает в полном отрыве от сборщика мусора. Либо - либо, а попытки совместить приведут к тому, что у Вас в объекте будут недостатки обоих подходов - т.е. жуткие руковывороты с Dispose и лишние затраты памяти/её уборка GC. О революции в игрострое говорит тема, а GC не даёт C# и XNE быть революцией. Не только он, конечно (и что это про double math заглохло? Нет возражений?), но в частности. Цитата:
В плюсах деструктор вызывается автоматически и не ведёт к конфликтам с автоматически убираемой памятью, а также извращений с отловом исключений. Цитата:
GAPI - это сборник часто употребляемых функций, не более того. Вас никто не заставляет пользоваться только его средствами от начала и до конца. Вы всегда можете открыть исходный код (Irrlicht - open source, а вот XNA - нет...) и поменять там что нужно, или просто частично использовать стандартные функции, а частично - непосредственно DirectX или OpenGL-функции. C# и XNA такого выбора не дают. К чему вопрос? Нет, не участвовал. Однако я писал диплом на соответствующую тему и защитил его с отличной оценкой (это если говорить о заслугах, причём отдельно замечу, что этот разговор начали ВЫ, а не я). Вы, надо думать, и этим похвастаться не можете. За меня о моих мечтах говорите? IDisposable - это мой ночной кошмар. Деструктор, который нужно вызывать ручками, да ещё следить, чтобы он не дай Бог не стал конфликтовать с автоматической сборкой, отлавливать все исключения... Нет, спасибо. Моя мечта уже реализована в C++. И в последний раз - просьба мой ник не искажать. Я над Вашим не издеваюсь.
__________________
Товарищ, верь: пройдет она - Эпоха лживых, злых понятий. Весь мир очнется ото сна, И на обломках "демократий" Напишут наши имена! Мы были волшебницами (оригинальное фентези) Тень Войны (фанфик по ГП) |
|||
![]() |
|
![]() |
#79 | ||
Новичок
Регистрация: 19.03.2007
Сообщений: 33
Репутация: 2
|
в ХНЕ нЕчего править. ТАм долго базовые классы. Например, описание структуры Vector3, Texture, Texture2D, Texture3D, VertexBuffer, и так далее.
Профессиональные геймдевелоперы здесь не сидят, и врядли будут сидеть. А То, что ты называешь потенциальными геймдевелоперами - так они на геймдеве сидят, а здесь это так... для виду... |
||
![]() |
|
![]() |
#80 | ||
Пугатель
![]() Регистрация: 26.06.2005
Адрес: Москва, СССР
Сообщений: 6,111
Репутация: 1096
|
Цитата:
__________________
![]() Хорошо смеется тот, кто стреляет первым! (танкистская мудрость) |
||
![]() |
|
![]() |
|
|