Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Интерпретатор
Вельмаскин Н.А. (с)2013
или думаем над скриптовым движком для
Вашей игры
1
Вельмаскин Никита – Indie разработчик.
В gamedev’е с 1992 года. Самая первая игра
«Шахматы» для ZX Spectrum.
Самый знаме...
PocketGame – это «движок» со всем необходимым
инструментарием для быстрой разработки
кроссплатформенных 2D-игр.
Инженерные...
Что же такое
«Интерпретатор» ?
3
Из Википедии:
Это приложение или аппаратное средство,
выполняющее покомандный или построчный
анализ, обработку и мгновенно...
Простой интерпретатор - анализирует и тут же
выполняет программу покомандно (или построчно), по
мере поступления её исходн...
Интерпретатор компилирующего типа — это система,
состоящая из компилятора, переводящего исходный код
программы в промежуто...
Где можно
успешно
использовать
интерпретатор?
7
Везде, где только можно и где нельзя –
ограничивается только Вашей фантазией.
Игры
• RPG/MMORPG
• RTS / Turn-Based Strateg...
Достоинства и
недостатки
1. Кроссплатформенность — программа будет работать на
любой платформе, на которой есть соответствующий
интерпретатор.
2. У...
Недостатки
1. Интерпретируемая программа не может выполняться
отдельно без программы-интерпретатора.
Сам интерпретатор при...
Популярные платформы
и языки
12
LUA
Lua (порт. «луна») — интерпретируемый язык
программирования, разработанный подразделением Tecgraf
Католического универ...
Интерактивчик
Где есть LUA www.lua.org
15
Phyton www.python.org
Python (англ. python — питон) — высокоуровневый язык
программирования общего назначения с открытым к...
Где есть Phyton www.python.org
Интерактивчика не будет ;)
UnrealScript
UnrealScript – кроссплатформенный, высокоуровневый,
объектно-ориентированный язык программирования,
часть дви...
Интерактивчик
UnrealScript www.unrealengine.com
18
JavaScript
Встроен уже в любое современное устройство, где есть
интернет-браузер. А в сочетании с HTML5 –
неограниченные в...
Брать чужой или
делать свой ?
…To be, or not to be: that is the
question…
20
Чужой: плюсы
1. Уже все готово и отлажено. Количество «багов» сведено к
минимуму
2. Есть готовая документация
3. Есть гото...
Чужой: минусы
1. Сложность интеграции с уже готовым проектом.
Решение об использовании того или иного
интерпретатора необх...
Свой: плюсы
1. Очень плотная интеграция интерпретатора с ядром
приложения => большая скорость работы
2. Безграничные возмо...
Свой: минусы
1. Необходимо затратить уйму времени, денег и сил
на разработку и отладку самого скриптового
движка, синтакси...
Как работает
интерпретатор
….О сколько нам открытий чудных
Готовят просвещенья дух
И опыт, сын ошибок трудных,
И гений, па...
Компоненты
• Таблица идентификаторов содержит список всех
названий переменных, используемых в программе.
• Лексический ана...
Синтаксическое дерево
27
Это древовидная структура представления программы.
Именно это дерево и «исполняется» при запуске
...
• Блок семантического контроля (Semantic Checker).
Не обязателен. Проверяет синтаксическое дерево на
наличие ошибок.
• Ген...
• Генератор байт-кода (Bytecode Generator).
Не обязателен. Создает байт-код по промежуточному
коду.
• Виртуальная машина, ...
А если почитать?
http://www.gamedev.ru/articles/?id=70104
Хорошая статья:
Компиляторы: принципы, технологии
и инструменты
...
Свой
интерпретатор
31
Совет из опыта
За основу лучше взять уже готовый
интерпретатор языка Basic, где уже есть
линейные ветвления и циклы с усло...
Прежде чем резать…
1. Наилучший язык разработки – C/С++
2. Надо хорошо изучить среду, где будет исполняться
интерпретируем...
Lexer и Parser
Для C/С++ есть замечательный OpenSource инструмент - Bison.
Для других языков программирования см. статью:
...
Ясность синтаксиса
35
Оптимизация
36
Что бы зря не
оптимизировать
• Знайте архитектурные особенности работы
интерпретатора
• Определитесь с платформой, где буд...
Интерактивчик
Почему это
неоптимизированный
код?
40
«Враги интерпретатора»
1. Циклы (особенно вложенные)
2. Массивы (особенно многомерные)
3. Глобальные переменные
4. Рекурси...
Борьба с
«врагами интерпретаторов»
1. НЕ объявляйте переменные в теле цикла, это
существенно замедляет его
2. Обход двумер...
И на посошок!
1. Время от времени переносите уже
«устаканившейся» интерпретируемый код в
ядро приложения
2. Для анализа бы...
А если почитать?
Совершенный код. Второе
издание
Автор: С.Макконнелл
44
 +375 29 628 81 83 Никита
URL demo-версии движка PocketGame:
http://maskin-soft.ru/pocketgame
Вах, какой доклад!
https://...
Upcoming SlideShare
Loading in …5
×

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

1,282 views

Published on

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

Published in: Technology
  • Be the first to comment

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

  1. 1. Интерпретатор Вельмаскин Н.А. (с)2013 или думаем над скриптовым движком для Вашей игры
  2. 2. 1 Вельмаскин Никита – Indie разработчик. В gamedev’е с 1992 года. Самая первая игра «Шахматы» для ZX Spectrum. Самый знаменитый стартап: Pocket F.A.L.L.O.U.T. – порт игры Fallout2 на мобильные платформу WinMobile/PocketPC. О докладчике www.pf-pda.net
  3. 3. PocketGame – это «движок» со всем необходимым инструментарием для быстрой разработки кроссплатформенных 2D-игр. Инженерные решения PocketGame: •Кроссплатформенность •Масштабируемость •Оптимизация под слабые устройства •Собственный язык программирования •Быстрая локализация
  4. 4. Что же такое «Интерпретатор» ? 3
  5. 5. Из Википедии: Это приложение или аппаратное средство, выполняющее покомандный или построчный анализ, обработку и мгновенное выполнение команды исходной программы или запроса. Интерпретатор 4
  6. 6. Простой интерпретатор - анализирует и тут же выполняет программу покомандно (или построчно), по мере поступления её исходного кода на вход интерпретатора. Достоинства: •Мгновенная реакция на поступившую команду Недостатки: •Такой тип интерпретатора обнаруживает ошибки в тексте программы только при попытке выполнения команды (или строки) с ошибкой. Разновидности Такой интерпретатор хорош для мобильных платформ, на стороне клиента 5
  7. 7. Интерпретатор компилирующего типа — это система, состоящая из компилятора, переводящего исходный код программы в промежуточное представление (в байт-код), и собственно интерпретатора, который выполняет полученный промежуточный код (так называемая виртуальная машина). Достоинства: •большее быстродействие выполнения программ •гибкость в разработке задач. Недостатки: •большее требование к ресурсам и требование на корректность исходного кода. Такой интерпретатор хорош для использования на сервере 6 Разновидности
  8. 8. Где можно успешно использовать интерпретатор? 7
  9. 9. Везде, где только можно и где нельзя – ограничивается только Вашей фантазией. Игры • RPG/MMORPG • RTS / Turn-Based Strategy, TBS • Аркады со множеством объектов, взаимодействующих с игроком • Шутеры (интеллект ботов) СУБД (исполнение запросов, выполнение процедур и функций на сервере БД) Бизнес-приложения (расчет рисков, бухгалтерия) 8
  10. 10. Достоинства и недостатки
  11. 11. 1. Кроссплатформенность — программа будет работать на любой платформе, на которой есть соответствующий интерпретатор. 2. Ускоренный процесс исправления ошибок и обновления логики всего приложения 3. Гибкость - можно распоряжаться возможностями языка программирования и самой платформы интерпретатора 4. Коммерческая составляющая – можно заработать денег, при наличии хороших бизнес-идей использования платформы и интерпретируемого языка Достоинства 10
  12. 12. Недостатки 1. Интерпретируемая программа не может выполняться отдельно без программы-интерпретатора. Сам интерпретатор при этом может быть очень «тяжелым». 2. Интерпретируемая программа выполняется медленнее (в 5-10 раз по сравнению с обычным приложением) 3. Практически отсутствует оптимизация кода, что приводит к дополнительным потерям в скорости работы 4. При неумелой организации структуры файлов игры, появляется «бэкдор» для нечестных игроков (читерство) 11
  13. 13. Популярные платформы и языки 12
  14. 14. LUA Lua (порт. «луна») — интерпретируемый язык программирования, разработанный подразделением Tecgraf Католического университета Рио-де-Жанейро. Разработанный интерпретатор является свободно распространяемым, с открытыми исходными текстами на языке Си. www.lua.org Хорош для мобильных платформ, ввиду своей интеграции с C/C++, легкости, скорости и гибкости движка Пример кода: 13
  15. 15. Интерактивчик
  16. 16. Где есть LUA www.lua.org 15
  17. 17. Phyton www.python.org Python (англ. python — питон) — высокоуровневый язык программирования общего назначения с открытым кодом C++. Лицензия бесплатная. Пример кода: Хорош для серверных платформ, из-за «прожорливости» и размера интерпретатора 16
  18. 18. Где есть Phyton www.python.org Интерактивчика не будет ;)
  19. 19. UnrealScript UnrealScript – кроссплатформенный, высокоуровневый, объектно-ориентированный язык программирования, часть движка Unreal Engine. Права на использование принадлежат Epic Games. Лицензия бесплатная и коммерческая. www.unrealengine.com Документация на русском: http://www.gamedev.ru/community/udk/articles/UnrealScriptReference Пример кода: Графика у движка Unreal просто потрясающая, даже на мобильных устройствах! 17
  20. 20. Интерактивчик
  21. 21. UnrealScript www.unrealengine.com 18
  22. 22. JavaScript Встроен уже в любое современное устройство, где есть интернет-браузер. А в сочетании с HTML5 – неограниченные возможности для создания игр и приложений. Пример кода: 19
  23. 23. Брать чужой или делать свой ? …To be, or not to be: that is the question… 20
  24. 24. Чужой: плюсы 1. Уже все готово и отлажено. Количество «багов» сведено к минимуму 2. Есть готовая документация 3. Есть готовые инструменты работы (IDE, отладчики, профилировщики) 4. В большинстве случаев можно найти уже готового спеца по языку программирования 5. А если уж очень-очень постараться, то можно найти спеца и по ядру интерпретатора 21
  25. 25. Чужой: минусы 1. Сложность интеграции с уже готовым проектом. Решение об использовании того или иного интерпретатора необходимо принять еще ДО начала разработки. 2. Если исходные языки программирования у проекта и интерпретатора различны, то необходимо разрабатывать «мост» между двумя системами (Java -> C++) 3. Необходимо вникать в особенности «движка» для его расширения/плотной интеграции с приложением. 4. Могут возникнуть проблемы с правообладателем. Неприемлемо для стартапов. 22
  26. 26. Свой: плюсы 1. Очень плотная интеграция интерпретатора с ядром приложения => большая скорость работы 2. Безграничные возможности для оптимизации и расширения скриптового движка 3. Очень интересен сам процесс создания. 4. Нет нарушения авторских прав и, следовательно, не надо никому платить за лицензию 23
  27. 27. Свой: минусы 1. Необходимо затратить уйму времени, денег и сил на разработку и отладку самого скриптового движка, синтаксиса языка программирования, документации к нему. 2. Специалистов по движку и языку программирования необходимо взращивать внутри коллектива. Снаружи – их нет  24
  28. 28. Как работает интерпретатор ….О сколько нам открытий чудных Готовят просвещенья дух И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель… 25
  29. 29. Компоненты • Таблица идентификаторов содержит список всех названий переменных, используемых в программе. • Лексический анализатор (Lexer). Преобразует последовательность символов (из файла- источника) в последовательность лексем • Синтаксический анализатор (Parser). Берет последовательность лексем и строит по ним синтаксическое дерево. 26
  30. 30. Синтаксическое дерево 27 Это древовидная структура представления программы. Именно это дерево и «исполняется» при запуске интерпретируемого кода.
  31. 31. • Блок семантического контроля (Semantic Checker). Не обязателен. Проверяет синтаксическое дерево на наличие ошибок. • Генератор промежуточного кода (Intermediate Code Generator). Преобразует синтаксическое дерево в промежуточный код. • Оптимизатор (Optimizer). Не обязателен. Оптимизирует промежуточный код. 28
  32. 32. • Генератор байт-кода (Bytecode Generator). Не обязателен. Создает байт-код по промежуточному коду. • Виртуальная машина, выполняющая этот байт-код. • Стек вызовов – хранит ссылки на текущие запущенные блоки кода (процедуры/функции), а так же точки возврата. 29
  33. 33. А если почитать? http://www.gamedev.ru/articles/?id=70104 Хорошая статья: Компиляторы: принципы, технологии и инструменты Ахо А.В., Сети Р., Ульман Д.Д. 30
  34. 34. Свой интерпретатор 31
  35. 35. Совет из опыта За основу лучше взять уже готовый интерпретатор языка Basic, где уже есть линейные ветвления и циклы с условием. 32 И вокруг него собрать свое синтаксическое ядро языка и механизмы интерпретатора.
  36. 36. Прежде чем резать… 1. Наилучший язык разработки – C/С++ 2. Надо хорошо изучить среду, где будет исполняться интерпретируемый код. Узнать все сильные и слабые стороны платформы и ОС 1. Разработать синтаксис языка и его конструкции, которые удовлетворяли бы требованиям решаемых задач и был понятен человеку при чтении кода 2. Максимально интегрировать ядро интерпретатора в ядро приложения 3. И только после этого разработать анализатор лексем и парсер 33
  37. 37. Lexer и Parser Для C/С++ есть замечательный OpenSource инструмент - Bison. Для других языков программирования см. статью: http://ru.wikipedia.org/wiki/Синтаксический_анализ 34 Конструкции будущего языка описываются самим разработчиком в специальном формате bison. www.gnu.org/s/bison
  38. 38. Ясность синтаксиса 35
  39. 39. Оптимизация 36
  40. 40. Что бы зря не оптимизировать • Знайте архитектурные особенности работы интерпретатора • Определитесь с платформой, где будет исполняться интерпретируемый код и знайте ее особенности • Делайте код программы проще 37
  41. 41. Интерактивчик
  42. 42. Почему это неоптимизированный код? 40
  43. 43. «Враги интерпретатора» 1. Циклы (особенно вложенные) 2. Массивы (особенно многомерные) 3. Глобальные переменные 4. Рекурсия 5. Огромные файлы исходного кода 41
  44. 44. Борьба с «врагами интерпретаторов» 1. НЕ объявляйте переменные в теле цикла, это существенно замедляет его 2. Обход двумерного массива – сначала у, потом x 3. Большие файлы, по возможности, дробите на мелкие и подгружайте в память по мере надобности 4. Используйте системные коллекции (на стороне ядра приложения) для хранения и поиска данных, а не массивы интерпретатора 5. Знайте особенности работы интерпретатора 42
  45. 45. И на посошок! 1. Время от времени переносите уже «устаканившейся» интерпретируемый код в ядро приложения 2. Для анализа быстродействия используйте профилировщики 3. Не забывайте об утечках памяти – проверяйте инструментами анализа утечек каждый модуль 43
  46. 46. А если почитать? Совершенный код. Второе издание Автор: С.Макконнелл 44
  47. 47.  +375 29 628 81 83 Никита URL demo-версии движка PocketGame: http://maskin-soft.ru/pocketgame Вах, какой доклад! https://facebook.com/velmaskin

×