Никита Вельмаскин - Интерпретатор или думаем над...

47
Интерпретато р Вельмаскин Н.А. (с)2013 или думаем над скриптовым движком для Вашей игры

Upload: it-share

Post on 15-Jun-2015

538 views

Category:

Technology


3 download

DESCRIPTION

Доклад Никиты Вельмаскина с IT_Share GameDev Web

TRANSCRIPT

Page 1: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Интерпретатор

Вельмаскин Н.А. (с)2013

или думаем над скриптовым движком для Вашей игры

Page 2: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

1

Вельмаскин Никита – Indie разработчик. В gamedev’е с 1992 года. Самая первая игра «Шахматы» для ZX Spectrum.

Самый знаменитый стартап: Pocket F.A.L.L.O.U.T. – порт игры Fallout2 на мобильные платформу WinMobile/PocketPC.

О докладчике

www.pf-pda.net

Page 3: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

PocketGame – это «движок» со всем необходимым инструментарием для быстрой разработки кроссплатформенных 2D-игр.

Инженерные решения PocketGame:•Кроссплатформенность•Масштабируемость•Оптимизация под слабые устройства•Собственный язык программирования•Быстрая локализация

Page 4: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Что же такое «Интерпретатор»

?

3

Page 5: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Из Википедии:Это приложение или аппаратное средство, выполняющее покомандный или построчный анализ, обработку и мгновенное выполнение команды исходной программы или запроса.

Интерпретатор

4

Page 6: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Простой интерпретатор - анализирует и тут же выполняет программу покомандно (или построчно), по мере поступления её исходного кода на вход интерпретатора.

Достоинства: •Мгновенная реакция на поступившую команду

Недостатки: •Такой тип интерпретатора обнаруживает ошибки в тексте программы только при попытке выполнения команды (или строки) с ошибкой.

Разновидности

Такой интерпретатор хорош для мобильных платформ, на стороне клиента

5

Page 7: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Интерпретатор компилирующего типа — это система, состоящая из компилятора, переводящего исходный код программы в промежуточное представление (в байт-код), и собственно интерпретатора, который выполняет полученный промежуточный код (так называемая виртуальная машина).

Достоинства: •большее быстродействие выполнения программ •гибкость в разработке задач.

Недостатки: •большее требование к ресурсам и требование на корректность исходного кода.

Такой интерпретатор хорош для использования на сервере

6

Разновидности

Page 8: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Где можно успешно

использовать интерпретатор?

7

Page 9: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Везде, где только можно и где нельзя – ограничивается только Вашей фантазией.

Игры• RPG/MMORPG• RTS / Turn-Based Strategy, TBS• Аркады со множеством объектов, взаимодействующих

с игроком• Шутеры (интеллект ботов)

СУБД (исполнение запросов, выполнение процедур и функций на сервере БД)

Бизнес-приложения (расчет рисков, бухгалтерия)

8

Page 10: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Достоинства и недостатки

Page 11: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

1. Кроссплатформенность — программа будет работать на любой платформе, на которой есть соответствующий интерпретатор.

2. Ускоренный процесс исправления ошибок и обновления логики всего приложения

3. Гибкость - можно распоряжаться возможностями языка программирования и самой платформы интерпретатора

4. Коммерческая составляющая – можно заработать денег, при наличии хороших бизнес-идей использования платформы и интерпретируемого языка

Достоинства

10

Page 12: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Недостатки1. Интерпретируемая программа не может выполняться

отдельно без программы-интерпретатора. Сам интерпретатор при этом может быть очень «тяжелым».

2. Интерпретируемая программа выполняется медленнее (в 5-10 раз по сравнению с обычным приложением)

3. Практически отсутствует оптимизация кода, что приводит к дополнительным потерям в скорости работы

4. При неумелой организации структуры файлов игры, появляется «бэкдор» для нечестных игроков (читерство)

11

Page 13: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Популярные платформыи языки

12

Page 14: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

LUALua (порт. «луна») — интерпретируемый язык программирования, разработанный подразделением Tecgraf Католического университета Рио-де-Жанейро. Разработанный интерпретатор является свободно распространяемым, с открытыми исходными текстами на языке Си.

www.lua.org

Хорош для мобильных платформ, ввиду своей интеграции с C/C++, легкости, скорости и гибкости движка

Пример кода:

13

Page 15: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Интерактивчик

Page 16: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Где есть LUAwww.lua.org

15

Page 17: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Phyton www.python.org

Python (англ. python — питон) — высокоуровневый язык программирования общего назначения с открытым кодом C++. Лицензия бесплатная.

Пример кода:

Хорош для серверных платформ, из-за «прожорливости» и размера интерпретатора

16

Page 18: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Где есть Phyton www.python.org

Интерактивчика не будет ;)

Page 19: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

UnrealScriptUnrealScript – кроссплатформенный, высокоуровневый,

объектно-ориентированный язык программирования, часть движка Unreal Engine. Права на использование принадлежат Epic Games. Лицензия бесплатная и коммерческая.

www.unrealengine.com

Документация на русском:http://www.gamedev.ru/community/udk/articles/UnrealScriptReference

Пример кода:

Графика у движка Unreal просто потрясающая, даже на мобильных устройствах!

17

Page 20: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Интерактивчик

Page 21: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

UnrealScript

www.unrealengine.com

18

Page 22: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

JavaScriptВстроен уже в любое современное устройство, где есть интернет-браузер. А в сочетании с HTML5 – неограниченные возможности для создания игр и приложений.

Пример кода:

19

Page 23: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Брать чужой или делать

свой ?

…To be, or not to be: that is the question…

20

Page 24: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Чужой: плюсы1. Уже все готово и отлажено. Количество «багов» сведено к

минимуму

2. Есть готовая документация

3. Есть готовые инструменты работы (IDE, отладчики, профилировщики)

4. В большинстве случаев можно найти уже готового спеца по языку программирования

5. А если уж очень-очень постараться, то можно найти спеца и по ядру интерпретатора

21

Page 25: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Чужой: минусы1. Сложность интеграции с уже готовым проектом.

Решение об использовании того или иного интерпретатора необходимо принять еще ДО начала разработки.

2. Если исходные языки программирования у проекта и интерпретатора различны, то необходимо разрабатывать «мост» между двумя системами (Java -> C++)

3. Необходимо вникать в особенности «движка» для его расширения/плотной интеграции с приложением.

4. Могут возникнуть проблемы с правообладателем. Неприемлемо для стартапов.

22

Page 26: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Свой: плюсы1. Очень плотная интеграция интерпретатора с ядром

приложения => большая скорость работы

2. Безграничные возможности для оптимизации и расширения скриптового движка

3. Очень интересен сам процесс создания.

4. Нет нарушения авторских прав и, следовательно, не надо никому платить за лицензию

23

Page 27: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Свой: минусы1. Необходимо затратить уйму времени, денег и сил

на разработку и отладку самого скриптового движка, синтаксиса языка программирования, документации к нему.

2. Специалистов по движку и языку программирования необходимо взращивать внутри коллектива. Снаружи – их нет

24

Page 28: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Как работает интерпретатор

….О сколько нам открытий чудныхГотовят просвещенья духИ опыт, сын ошибок трудных,И гений, парадоксов друг,И случай, бог изобретатель…

25

Page 29: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Компоненты

• Таблица идентификаторов содержит список всех названий переменных, используемых в программе.

• Лексический анализатор (Lexer). Преобразует последовательность символов (из файла-источника) в последовательность лексем

• Синтаксический анализатор (Parser). Берет последовательность лексем и строит по ним синтаксическое дерево. 26

Page 30: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Синтаксическое дерево

27

Это древовидная структура представления программы. Именно это дерево и «исполняется» при запуске интерпретируемого кода.

Page 31: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

• Блок семантического контроля (Semantic Checker). Не обязателен. Проверяет синтаксическое дерево на наличие ошибок.

• Генератор промежуточного кода (Intermediate Code Generator). Преобразует синтаксическое дерево в промежуточный код.

• Оптимизатор (Optimizer). Не обязателен. Оптимизирует промежуточный код.

28

Page 32: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

• Генератор байт-кода (Bytecode Generator). Не обязателен. Создает байт-код по промежуточному коду.

• Виртуальная машина, выполняющая этот байт-код.

• Стек вызовов – хранит ссылки на текущие запущенные блоки кода (процедуры/функции), а так же точки возврата.

29

Page 33: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

А если почитать?

http://www.gamedev.ru/articles/?id=70104

Хорошая статья:

Компиляторы: принципы, технологии и инструменты Ахо А.В., Сети Р., Ульман Д.Д.

30

Page 34: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Свой интерпретатор

31

Page 35: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Совет из опыта

За основу лучше взять уже готовый интерпретатор языка Basic, где уже есть линейные ветвления и циклы с условием.

32

И вокруг него собрать свое синтаксическое ядро языка и механизмы интерпретатора.

Page 36: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Прежде чем резать…1. Наилучший язык разработки – C/С++

2. Надо хорошо изучить среду, где будет исполняться интерпретируемый код. Узнать все сильные и слабые стороны платформы и ОС

1. Разработать синтаксис языка и его конструкции, которые удовлетворяли бы требованиям решаемых задач и был понятен человеку при чтении кода

2. Максимально интегрировать ядро интерпретатора в ядро приложения

3. И только после этого разработать анализатор лексем и парсер

33

Page 37: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Lexer и ParserДля C/С++ есть замечательный OpenSource инструмент - Bison.

Для других языков программирования см. статью: http://ru.wikipedia.org/wiki/Синтаксический_анализ

34

Конструкции будущего языка описываются самим разработчиком в специальном формате bison.

www.gnu.org/s/bison

Page 38: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Ясность синтаксиса

35

Page 39: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Оптимизация

36

Page 40: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Что бы зря не оптимизировать

• Знайте архитектурные особенности работы интерпретатора

• Определитесь с платформой, где будет исполняться интерпретируемый код и знайте ее особенности

• Делайте код программы проще

37

Page 41: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Интерактивчик

Page 42: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Почему это неоптимизированны

й код?

40

Page 43: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

«Враги интерпретатора»1. Циклы (особенно вложенные)

2. Массивы (особенно многомерные)

3. Глобальные переменные

4. Рекурсия

5. Огромные файлы исходного кода

41

Page 44: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

Борьба с «врагами интерпретаторов»1. НЕ объявляйте переменные в теле цикла, это

существенно замедляет его

2. Обход двумерного массива – сначала у, потом x

3. Большие файлы, по возможности, дробите на мелкие и подгружайте в память по мере надобности

4. Используйте системные коллекции (на стороне ядра приложения) для хранения и поиска данных, а не массивы интерпретатора

5. Знайте особенности работы интерпретатора

42

Page 45: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

И на посошок!1. Время от времени переносите уже

«устаканившейся» интерпретируемый код в ядро приложения

2. Для анализа быстродействия используйте профилировщики

3. Не забывайте об утечках памяти – проверяйте инструментами анализа утечек каждый модуль

43

Page 46: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

А если почитать?

Совершенный код. Второе издание

Автор: С.Макконнелл

44

Page 47: Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Вашей игры

+375 29 628 81 83 Никита

URL demo-версии движка PocketGame:

http://maskin-soft.ru/pocketgame

Вах, какой доклад!

https://facebook.com/velmaskin