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