Разработка языка сценариев для систем виртуальной реальности А.А. Безгодов А.Ю. Тропченко
Проблема Рост сложности приложений Рост времени компиляции (>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! = ! = ! =
Типы данных 20 байт 4 байта16 байт NULL INTint DOUBLEdouble VECTORfloat Float STRINGindex FUNCTIONindex REFERENCEindex
Память и адресация Основная память Стек Общее адресное пространство: –[ 0 | address ] – основная память –[ 1 | offset ] - стек
Система команд Стек и памятьДанныеПоток выполнения LOAD, address LDAD, address STORE CONST, operand STKRES, n REM ADDSUBMUL DIVMODNEG BIN_AND BIN_OR BIN_XOR BIN_NOT LOG_AND LOG_OR LOG_NOT IS_EQ IS_UNEQ IS_GRTR IS_LESS IS_GEQ IS_LEQ CALL, n RETURN JMP, addr JMPC, addr JMPNC, addr
Вызов функций … BASE TOP Arg 1 Arg 2 Arg 3 FN Ptr Local 3 Local 2 Local 1 Result LOAD FN Ptr LOAD arg3 LOAD arg2 LOAD arg1 CALL 3 STKRES 3 … RETURN LOAD FN Ptr LOAD arg3 LOAD arg2 LOAD arg1 CALL 3 STKRES 3 … RETURN LOADResult
Векторные операции Поддержка на уровне команд VM: –ADD –SUB –MUL Библиотеки функций: –vector(x, y, z, w) –dot(v1, v2) –cross(v1, v2)
Заключение Массивы, списки, деревья и другие контейнеры Структуры данных Формат данных для векторов и матриц Параллельное выполнение Инструменты: –Отладчики –Профайлеры
Вопросы?