'

О чем пойдет речь

Понравилась презентация – покажи это...





Слайд 0

Параллельное измерение: за гранью С++ Андрей Плахов О чем пойдет речь какие языки могут пригодиться в разработке игр для каких задач стоит использовать их, а не С++ на какие грабли можно наступить и о том, как космические корабли бороздят


Слайд 1

Параллельное измерение: за гранью С++ Андрей Плахов Чего не планируется маркетинг: «компании, не перешедшие на C#, умрут» holy war: «а вот Java гораздо круче» ретроспектива: «вот я в советское время…» высокая наука: «концепция монад в Haskell весьма элегантна» неблагодарность: «С++ отстой» глубина изложения (это лишь обзор) объективность (это лишь мое мнение)


Слайд 2

Параллельное измерение: за гранью С++ Андрей Плахов Задачи в программировании игр код, исполняемый у пользователя редакторы код, исполняемый на сервере throw-away утилиты игровой скрипт


Слайд 3

Параллельное измерение: за гранью С++ Андрей Плахов Скрипт?! да, скрипт – это точно такой же код а значит, скриптовый язык – это тоже ЯП а значит, скриптовики – это программисты значит, нам уже понадобился второй язык?


Слайд 4

Параллельное измерение: за гранью С++ Андрей Плахов С++ #ifndef __WAYPOINT_H_ #define __WAYPOINT_H_ class CWaypoint: public CObjectBase { OBJECT_BASIC_METHODS(CWaypoint) public: ZDATA CVec3 ptPos; int nFloor; int fRotation; vector<SCommand> 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( 0xA2722170, CWaypoint ) А еще скриптовые функции… А еще расстановка в редакторе…


Слайд 5

Параллельное измерение: за гранью С++ Андрей Плахов Что хотелось сказать class Waypoint: Vec3 ptPos int floor int rotation Command[] commands


Слайд 6

Параллельное измерение: за гранью С++ Андрей Плахов С++ class CUnit: … { … public: … bool IsAlive() const { return !bDead || IsTrain(); } … };


Слайд 7

Параллельное измерение: за гранью С++ Андрей Плахов Что хотелось сказать bool IsAlive() const { return !bDead; } Но только в этом проекте… Только временно, для сборки версии… Пока мы не поняли, откуда тот баг… bool IsAlive() const { return !bDead || IsTrain(); }


Слайд 8

Параллельное измерение: за гранью С++ Андрей Плахов С++ vector<SPatch> patches; … vector<SPatch> temp( patches ).swap( patches ); Что хотелось сказать? это злой ребус, отгадайте его? я очень крутой программист?


Слайд 9

Параллельное измерение: за гранью С++ Андрей Плахов Языки по типам среды исполнения компилируемые в native код компилируемые в managed код интерпретируемые смешанные


Слайд 10

Параллельное измерение: за гранью С++ Андрей Плахов Языки по типам выразительных средств императивные декларативные смешанные, с уклоном в 1 смешанные, с уклоном в 2


Слайд 11

Параллельное измерение: за гранью С++ Андрей Плахов Интерпретируемые языки: собственные Unreal Script Torque Script Проклятые Земли Script ?


Слайд 12

Параллельное измерение: за гранью С++ Андрей Плахов Интерпретируемые языки: Lua + легкий в исполнении и встраивании + прост в изучении (даже для …) + множество success stories + код можно менять на лету + микротреды (coroutines) излишняя гибкость, отсутствие важных compile-time проверок - отсутствие debugger


Слайд 13

Параллельное измерение: за гранью С++ Андрей Плахов Lua: грабли писать код на Lua сообща писать на Lua слишком сложную логику думать, что Lua – «лишь скрипт» давать скриптовику доступ к (почти) всем классам и методам движка


Слайд 14

Параллельное измерение: за гранью С++ Андрей Плахов Интерпретируемые языки: Python + самый мощный из интерпретируемых ЯП + возможности ООП и функциональных ЯП + код можно менять на лету + множество success stories… - но в геймдеве – также и failure silence… тяжелее и медленнее Lua* сложнее в изучении - излишняя гибкость, отсутствие важных compile-time проверок *JIT есть и для того, и для другого


Слайд 15

Параллельное измерение: за гранью С++ Андрей Плахов Python: грабли использовать, как главный язык разработки писать код на Python сообща отдать Python-скрипты дизайнерам


Слайд 16

Параллельное измерение: за гранью С++ Андрей Плахов Native языки: C + самая оптимальная компиляция и выполнение + компиляторы для самых экзотических устройств + компиляторы понимают друг друга – нехватка выразительных средств – как правило, С++ лучше


Слайд 17

Параллельное измерение: за гранью С++ Андрей Плахов Native языки: D + улучшенный С, но не С++ + можно использовать их одновременно – не очень эффективный компилятор – «кто здесь»?


Слайд 18

Параллельное измерение: за гранью С++ Андрей Плахов Managed языки: Java + прост в изучении (для программиста) + множество success stories + управление памятью, reflection + предсказуемость, надежность runtime + неиспорченное ООП + множество инструментов и библиотек + упрощение портирования на Linux, MacOS, в браузеры, телефоны, КПК, тостеры, … – нехватка выразительных средств – и никаких консолей


Слайд 19

Параллельное измерение: за гранью С++ Андрей Плахов Java: заблуждения write once – run everywhere отрицание предыдущего пункта Java – это сложно Java тормозит Java – это не про PC игры Java – это не для дизайнеров


Слайд 20

Параллельное измерение: за гранью С++ Андрей Плахов Managed языки: С# + достаточная простота изучения + достаточная производительность (-15% от С++) + достаточная выразительность + управление памятью, reflection + предсказуемость, надежность runtime + множество success stories + мощные библиотеки – никакого портирования – и похоже, что никаких консолей


Слайд 21

Параллельное измерение: за гранью С++ Андрей Плахов C# можно использовать, как главный язык разработки под РС идеален для tools под Windows нельзя попадать в плен Managed C++ нужно изучить установку .NET Framework нужно изучить грабли с взаимодействием managed кода и templates


Слайд 22

Параллельное измерение: за гранью С++ Андрей Плахов Функциональные языки: OCaml, Haskell + выразительность + модификация кода во время исполнения ± культ – «кто здесь»? – «много значков – ниасилил» – stateless – это уж точно не про игры


Слайд 23

Параллельное измерение: за гранью С++ Андрей Плахов Смешанные языки: LISP + выразительность + компилятор за неделю + success stories, в том числе в играх + модификация кода во время исполнения ± культ – «много скобок – ниасилил» – не для разработки в команде


Слайд 24

Параллельное измерение: за гранью С++ Андрей Плахов Спецназ: Erlang + язык специального назначения + абсолютная масштабируемость + обеспечивает runtime надежность + эпические success stories + модификация кода во время исполнения – только для серверов ММО (не обязательно RPG)… – …да и то не для всех


Слайд 25

Параллельное измерение: за гранью С++ Андрей Плахов Святее папы римского: Nemerle + выразительность + на платформе .NET: совместим с C# и native кодом, надежен, имеет сборщик мусора, reflection и множество библиотек ± культовый, модный – создан недавно, притом любителями – пока нет success stories


Слайд 26

Параллельное измерение: за гранью С++ Андрей Плахов Святее папы римского: Boo + выразительность: захотите – это C#, захотите – Python, захотите – почти Lisp + выразительность: микротреды, функциональные переменные + выразительность: макросы + на платформе .NET + статическая типизация… + и быстро работает… + … но позволяет модификацию кода на лету – нет success stories, но уже есть failure ? – текущая версия 0.7.5


Слайд 27

Параллельное измерение: за гранью С++ Андрей Плахов Космические корабли слияние функциональных и императивных парадигм языки, в которых нет null pointer exceptions и большинства ошибок с выходом за пределы массива языки, работающие с концепцией dependency graph языки описания самих задач, а не методов решения


Слайд 28

Параллельное измерение: за гранью С++ Андрей Плахов Как же выбирать? на каких платформах надо работать? какие задачи необходимо решать? каков объем работ? какие люди будут писать код? есть ли IDE, debugger и т.п.? готовы ли вы платить новыми рисками за получаемые преимущества? И используйте С++, пока у вас нет полной уверенности!


Слайд 29

Параллельное измерение: за гранью С++ Андрей Плахов, Entis Games andrey.plakhov@entis.ru


×

HTML:





Ссылка: