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

Содержание

Слайд 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

Параллельное измерение: за гранью С++ Андрей Плахов С++ #ifndef __WAYPOINT_H_ #define __WAYPOINT_H_
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(
0xA2722170, CWaypoint )
А еще скриптовые функции…
А еще расстановка в редакторе…

Слайд 6

Параллельное измерение: за гранью С++

Андрей Плахов


Что хотелось сказать

class Waypoint:
Vec3 ptPos
int

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

Слайд 7

Параллельное измерение: за гранью С++

Андрей Плахов


С++

class CUnit: …
{

public:

bool IsAlive() const {

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

};

Слайд 8

Параллельное измерение: за гранью С++

Андрей Плахов


Что хотелось сказать

bool IsAlive() const {

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

Слайд 9

Параллельное измерение: за гранью С++

Андрей Плахов

С++

vector patches;

vector temp( patches ).swap( patches );

Что

Параллельное измерение: за гранью С++ Андрей Плахов С++ vector patches; … vector
хотелось сказать?

это злой ребус, отгадайте его?
я очень крутой программист?

Слайд 10

Параллельное измерение: за гранью С++

Андрей Плахов


Языки по типам среды исполнения

компилируемые в

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

Слайд 11

Параллельное измерение: за гранью С++

Андрей Плахов


Языки по типам выразительных средств

императивные

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

Слайд 12

Параллельное измерение: за гранью С++

Андрей Плахов

Интерпретируемые языки: собственные

Unreal Script
Torque Script
Проклятые Земли Script

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

Слайд 13

Параллельное измерение: за гранью С++

Андрей Плахов


Интерпретируемые языки: Lua

+ легкий в исполнении

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

Слайд 14

Параллельное измерение: за гранью С++

Андрей Плахов


Lua: грабли

писать код на Lua

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

Слайд 15

Параллельное измерение: за гранью С++

Андрей Плахов


Интерпретируемые языки: Python

+ самый мощный из

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

Слайд 16

Параллельное измерение: за гранью С++

Андрей Плахов


Python: грабли
использовать, как главный язык

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

Слайд 17

Параллельное измерение: за гранью С++

Андрей Плахов


Native языки: C

+ самая оптимальная

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

Слайд 18

Параллельное измерение: за гранью С++

Андрей Плахов


Native языки: D

+ улучшенный С, но

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

Слайд 19

Параллельное измерение: за гранью С++

Андрей Плахов


Managed языки: Java

+ прост в изучении

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

Слайд 20

Параллельное измерение: за гранью С++

Андрей Плахов


Java: заблуждения

write once – run

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

Слайд 21

Параллельное измерение: за гранью С++

Андрей Плахов


Managed языки: С#

+ достаточная простота изучения
+

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

Слайд 22

Параллельное измерение: за гранью С++

Андрей Плахов


C#

можно использовать, как
главный

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

Слайд 23

Параллельное измерение: за гранью С++

Андрей Плахов


Функциональные языки: OCaml, Haskell

+ выразительность
+ модификация

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

Слайд 24

Параллельное измерение: за гранью С++

Андрей Плахов


Смешанные языки: LISP

+ выразительность
+ компилятор за

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

Слайд 25

Параллельное измерение: за гранью С++

Андрей Плахов


Спецназ: Erlang

+ язык специального назначения
+ абсолютная

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

Слайд 26

Параллельное измерение: за гранью С++

Андрей Плахов


Святее папы римского: Nemerle

+ выразительность
+ на

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

Слайд 27

Параллельное измерение: за гранью С++

Андрей Плахов


Святее папы римского: Boo

+ выразительность: захотите

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

Слайд 28

Параллельное измерение: за гранью С++

Андрей Плахов


Космические корабли
слияние функциональных и императивных

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

Слайд 29

Параллельное измерение: за гранью С++

Андрей Плахов


Как же выбирать?

на каких платформах

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