160 likes | 335 Views
Разработка языка сценариев для систем виртуальной реальности. А.А. Безгодов А.Ю. Тропченко. Проблема. Рост сложности приложений Рост времени компиляции ( > 30 мин ) Рост сложности и времени разработки Рост стоимости Необходимость расширения функциональности приложения после выпуска.
E N D
Разработка языка сценариев для систем виртуальной реальности А.А. Безгодов А.Ю. Тропченко
Проблема • Рост сложности приложений • Рост времени компиляции (>30 мин) • Рост сложности и времени разработки • Рост стоимости • Необходимость расширения функциональности приложения после выпуска
Решения • Распределенная сборка проектов • У конечных пользователей нет исходных текстов • Сложность разработки • Программные модули (plug-ins) • Сложность разработки модулей • Языки сценариев • Низкая производительность • Совместное использование всех 3-х подходов
Языки сценариев • Lua • MEL (Maya embedded language) • Unreal Script • Angel Script • Quake C • Python • и др.
Применение в системах виртуальной реальности • Сценарии • Поведения объектов • Системы частиц • Материалы • Структурные описание данных
Цели и требования • Синтаксис С • Динамическая типизация • Типы данных: • Null • Float, Integer • Vector • String • Поддержка типов данных на уровне VM • Легкость встраивания в главное приложение
Пример кода 0! = 0 1! = 1 2! = 2 3! = 6 4! = 24 5! = 120 6! = 720 7! = 5040 8! = 40320 9! = 362880
Память и адресация • Основная память • Стек • Общее адресное пространство: • [ 0 | address ] – основная память • [ 1 | offset ] - стек
Выполнение выражения: c=a+2*b IP 0001: a = 4 LDAD, c 0002: b = 3 LOAD, a 0003: c = null 0003: c = 10 LOAD, b 0004: … CONST, 2 2 MUL 3 6 ADD 10 4 STORE TOP 0003 BASE
Local 3 Local 2 Local 1 Arg 1 Arg 2 Arg 3 FN Ptr Вызов функций LOAD FN Ptr LOAD arg3 LOAD arg2 LOAD arg1 LOAD FN Ptr LOAD arg3 LOAD arg2 LOAD arg1 Result CALL 3 CALL 3 STKRES 3 STKRES 3 … … LOAD Result LOAD Result TOP RETURN RETURN BASE …
Векторные операции • Поддержка на уровне команд VM: • ADD • SUB • MUL • Библиотеки функций: • vector(x, y, z, w) • dot(v1, v2) • cross(v1, v2)
Дальнейшее развитие • Массивы, списки, деревья и другие контейнеры • Структуры данных • Формат данных для векторов и матриц • Параллельное выполнение • Инструменты: • Отладчики • Профайлеры