Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемwww.kriconf.ru
1 Параллельное измерение: за гранью С++ Андрей Плахов О чем пойдет речь какие языки могут пригодиться в разработке игр для каких задач стоит использовать их, а не С++ на какие грабли можно наступить и о том, как космические корабли бороздят
2 Параллельное измерение: за гранью С++ Андрей Плахов Чего не планируется маркетинг: «компании, не перешедшие на C#, умрут» holy war: «а вот Java гораздо круче» ретроспектива: «вот я в советское время…» высокая наука: «концепция монад в Haskell весьма элегантна» неблагодарность: «С++ отстой» глубина изложения (это лишь обзор) объективность (это лишь мое мнение)
3 Параллельное измерение: за гранью С++ Андрей Плахов Задачи в программировании игр код, исполняемый у пользователя редакторы код, исполняемый на сервере throw-away утилиты игровой скрипт
4 Параллельное измерение: за гранью С++ Андрей Плахов Скрипт?! да, скрипт – это точно такой же код а значит, скриптовый язык – это тоже ЯП а значит, скриптовики – это программисты значит, нам уже понадобился второй язык?
5 Параллельное измерение: за гранью С++ Андрей Плахов С++ #ifndef __WAYPOINT_H_ #define __WAYPOINT_H_ class CWaypoint: public CObjectBase { OBJECT_BASIC_METHODS(CWaypoint) public: ZDATA CVec3 ptPos; int nFloor; int fRotation; vector commands; ZEND int operator&( IBinSaver &f ) { f.Add(2,&ptPos); f.Add(3,&nFloor); f.Add(4,&fRotation); f.Add(5,&commands); return 0; } CWaypoint(); }; #endif #include "StdAfx.h" #include "aiWaypoint.h" CWaypoint::CWaypoint() : ptPos(VNULL3), nFloor(0), fRotation(0) { } REGISTER_SAVELOAD_CLASS( 0xA , CWaypoint ) А еще скриптовые функции… А еще расстановка в редакторе…
6 Параллельное измерение: за гранью С++ Андрей Плахов Что хотелось сказать class Waypoint: Vec3 ptPos int floor int rotation Command[] commands
7 Параллельное измерение: за гранью С++ Андрей Плахов С++ class CUnit: … { … public: … bool IsAlive() const { return !bDead || IsTrain(); } … };
8 Параллельное измерение: за гранью С++ Андрей Плахов Что хотелось сказать bool IsAlive() const { return !bDead; } Но только в этом проекте… Только временно, для сборки версии… Пока мы не поняли, откуда тот баг… bool IsAlive() const { return !bDead || IsTrain(); }
9 Параллельное измерение: за гранью С++ Андрей Плахов С++ vector patches; … vector temp( patches ).swap( patches ); Что хотелось сказать? это злой ребус, отгадайте его? я очень крутой программист?
10 Параллельное измерение: за гранью С++ Андрей Плахов Языки по типам среды исполнения компилируемые в native код компилируемые в managed код интерпретируемые смешанные
11 Параллельное измерение: за гранью С++ Андрей Плахов Языки по типам выразительных средств 1. императивные 2. декларативные 3. смешанные, с уклоном в 1 4. смешанные, с уклоном в 2
12 Параллельное измерение: за гранью С++ Андрей Плахов Интерпретируемые языки: собственные Unreal Script Torque Script Проклятые Земли Script
13 Параллельное измерение: за гранью С++ Андрей Плахов Интерпретируемые языки: Lua + легкий в исполнении и встраивании + прост в изучении (даже для …) + множество success stories + код можно менять на лету + микротреды (coroutines) - излишняя гибкость, отсутствие важных compile-time проверок - отсутствие debugger
14 Параллельное измерение: за гранью С++ Андрей Плахов Lua: грабли писать код на Lua сообща писать на Lua слишком сложную логику думать, что Lua – «лишь скрипт» давать скриптовику доступ к (почти) всем классам и методам движка
15 Параллельное измерение: за гранью С++ Андрей Плахов Интерпретируемые языки: Python + самый мощный из интерпретируемых ЯП + возможности ООП и функциональных ЯП + код можно менять на лету + множество success stories… - но в геймдеве – также и failure silence… - тяжелее и медленнее Lua* - сложнее в изучении - излишняя гибкость, отсутствие важных compile-time проверок *JIT есть и для того, и для другого
16 Параллельное измерение: за гранью С++ Андрей Плахов Python: грабли использовать, как главный язык разработки писать код на Python сообща отдать Python-скрипты дизайнерам
17 Параллельное измерение: за гранью С++ Андрей Плахов Native языки: C + самая оптимальная компиляция и выполнение + компиляторы для самых экзотических устройств + компиляторы понимают друг друга – нехватка выразительных средств – как правило, С++ лучше
18 Параллельное измерение: за гранью С++ Андрей Плахов Native языки: D + улучшенный С, но не С++ + можно использовать их одновременно – не очень эффективный компилятор – «кто здесь»?
19 Параллельное измерение: за гранью С++ Андрей Плахов Managed языки: Java + прост в изучении (для программиста) + множество success stories + управление памятью, reflection + предсказуемость, надежность runtime + неиспорченное ООП + множество инструментов и библиотек + упрощение портирования на Linux, MacOS, в браузеры, телефоны, КПК, тостеры, … – нехватка выразительных средств – и никаких консолей
20 Параллельное измерение: за гранью С++ Андрей Плахов Java: заблуждения write once – run everywhere отрицание предыдущего пункта Java – это сложно Java тормозит Java – это не про PC игры Java – это не для дизайнеров
21 Параллельное измерение: за гранью С++ Андрей Плахов Managed языки: С# + достаточная простота изучения + достаточная производительность (-15% от С++) + достаточная выразительность + управление памятью, reflection + предсказуемость, надежность runtime + множество success stories + мощные библиотеки – никакого портирования – и похоже, что никаких консолей
22 Параллельное измерение: за гранью С++ Андрей Плахов C# можно использовать, как главный язык разработки под РС идеален для tools под Windows нельзя попадать в плен Managed C++ нужно изучить установку.NET Framework нужно изучить грабли с взаимодействием managed кода и templates
23 Параллельное измерение: за гранью С++ Андрей Плахов Функциональные языки: OCaml, Haskell + выразительность + модификация кода во время исполнения ± культ – «кто здесь»? – «много значков – ниасилил» – stateless – это уж точно не про игры
24 Параллельное измерение: за гранью С++ Андрей Плахов Смешанные языки: LISP + выразительность + компилятор за неделю + success stories, в том числе в играх + модификация кода во время исполнения ± культ – «много скобок – ниасилил» – не для разработки в команде
25 Параллельное измерение: за гранью С++ Андрей Плахов Спецназ: Erlang + язык специального назначения + абсолютная масштабируемость + обеспечивает runtime надежность + эпические success stories + модификация кода во время исполнения – только для серверов ММО (не обязательно RPG)… – …да и то не для всех
26 Параллельное измерение: за гранью С++ Андрей Плахов Святее папы римского: Nemerle + выразительность + на платформе.NET: совместим с C# и native кодом, надежен, имеет сборщик мусора, reflection и множество библиотек ± культовый, модный – создан недавно, притом любителями – пока нет success stories
27 Параллельное измерение: за гранью С++ Андрей Плахов Святее папы римского: Boo + выразительность: захотите – это C#, захотите – Python, захотите – почти Lisp + выразительность: микротреды, функциональные переменные + выразительность: макросы + на платформе.NET + статическая типизация… + и быстро работает… + … но позволяет модификацию кода на лету – нет success stories, но уже есть failure – текущая версия 0.7.5
28 Параллельное измерение: за гранью С++ Андрей Плахов Космические корабли слияние функциональных и императивных парадигм языки, в которых нет null pointer exceptions и большинства ошибок с выходом за пределы массива языки, работающие с концепцией dependency graph языки описания самих задач, а не методов решения
29 Параллельное измерение: за гранью С++ Андрей Плахов Как же выбирать? на каких платформах надо работать? какие задачи необходимо решать? каков объем работ? какие люди будут писать код? есть ли IDE, debugger и т.п.? готовы ли вы платить новыми рисками за получаемые преимущества? И используйте С++, пока у вас нет полной уверенности!
30 Параллельное измерение: за гранью С++ Андрей Плахов, Entis Games
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.