Разработка языка сценариев для систем виртуальной реальности



Скачать 57.29 Kb.
Дата15.01.2013
Размер57.29 Kb.
ТипЗадача
УДК 004.4`41
Разработка языка сценариев для систем виртуальной реальности
А.А. Безгодов

Санкт-Петербургский государственный университет информационных технологий, механики и оптики
Научный руководитель – д.т.н., профессор А.Ю. Тропченко

Санкт-Петербургский государственный университет информационных технологий, механики и оптики
Направление – информационные технологии
Задача создания языка управления и конфигурирования приложения появляется в связи с ростом сложности программных систем. Нередко, изменение одного параметра в коде программы приводит к необходимости длительной компиляции, что усложняет и увеличивает время разработки. Часто, задача настройка поведения приложения поручается людям, которые не имеют прямого отношения к программированию. Типичным примером такой задачи является настройка пользовательского интерфейса. Написание игровых или тренировочных сценариев для систем виртуальной реальности – это пример еще одной задачи, которую затруднительно решать на этапе разработки приложения. Более того, такие задачи могут возникать уже после разработки программной системы.

В связи с этим, сложные программные системы разделяют на две части: ядро (kernel) и скрипт или язык сценариев (script). Ядро нередко называют хост-программой (host-program). В ядре реализуются основные классы и функциональность. Ядро обычно разрабатывается с использованием таких языков программирования как C, С++, C# или других.

В качестве языков сценариев выбирают более простые и гибкие языки, такие как Lua, Python и других встраиваемых языках (embedded languages).

В данной работе предлагается еще один такой язык сценариев. Приводятся требования, сформулированные на этапе разработки, и особенности реализации, а также перспективы развития. Требования к разрабатываемому языку были сформулированы после анализа нескольких аналогичных языков:

  1. Lua – интерпретируемый язык программирования, разработанный в католическом университете Рио-де-Жанейро. Весьма распространенный язык, используется для целей конфигурирования и задания поведения приложений, а также как средство для небольших баз данных. Имеет динамическую типизацию. В качестве основы использует понятие таблицы и через них позволяет реализовать ряд важных программных парадигм. Открытый исходный код [3], [4].

  2. Unreal Script – скриптовый язык разработанный фирмой Epic для игр серии “Unreal”. Используется для описания игровых событий. Имеет статическую типизацию. Широко используется параллелизм выполнения задач – как правило, каждый объект имеет свой поток исполнения в рамках виртуальной машины. Имеет широкую поддержку типов, часто использующихся в играх, такие как вектор, углы Эйлера, матрицы и т.п. Исходный код является закрытым. [5]

  3. Angel Script – является инициативной разработкой. Имеет статическую типизацию, является объектно-ориентированным.
    Важной особенностью, является весьма прозрачный механизм связывания функций хост-программы и скрипт. Открытый исходный код [6].

На основании были сформулированы следующие начальные требования:

  • Синтаксис близкий к синтаксису языка C.

  • Динамическая типизация – это позволяет упростить язык, компилятор уменьшить набор команд для виртуальной машины.

  • Поддержка таких встроенных типов как: нулевой тип (nil), целые числа, числа с плавающей запятой, строки, четырехмерные вектора.

  • Встроенная в виртуальную машину поддержка операций над строками и векторами.

Для разрабатываемого языка была определена следующая грамматика:

program = { chunk } EOF.

chunk = statement ";"

| "function" Ident "(" epsilon|Ident {"," Ident} ")" "{" {statement} "}"

statement = ";"

| expression ";"

| assignment ";"

| "var" Ident ["=" expression] ";"

| "const" Ident "=" expression ";"

| "if" "(" expression ")" statement [ "else" statement ]

| "for" "(" [assignment] ";" [expression] ";" [assignment] ")" statement

| "return" [expression] ";"

| "continue" ";"

| "break" ";"

| "{" {statement} "}"

assignment = access "=" expression.

expression = logic_or.

logic_or = logic_and {"||" logic_and}.

logic_and = bit_or {"&&" bit_or}.

bit_or = bit_xor {"|" bit_xor}.

bit_xor = bit_and {"^" bit_and}.

bit_and = cmp_op {"&" cmp_op}.

cmp_op = add_op [("=="|"!="|"<"|">"|"<="|">=") add_op].

add_op = mul_op { ("+"|"-") mul_op }.

mul_op = unit_op { ("*"|"/"|"%") unit_op }.

unit_op = ["+"|"-"|"~"|"!"] operand.

operand = access [func_call] | String | Number | "(" expression ")".

func_call = "(" epsilon | expression {"," expression} ")";

access = Ident;

Виртуальная машина является стековой. Размер стека определяется на этапе компиляции хост-программы. Стек используется для хранения промежуточных данных на каждом этапе вычислений, а также при передаче данных в функцию и возврате значений из функций.

Стек имеет два указателя — указатель вершины и указатель базы. Таким образом, обращение к стеку возможно как относительно базы, так и относительно вершины. Обычно, адресация относительно базы используется при обращении к параметрам функции и к локальным переменным. Адресация относительно вершины используется для обращения к результатам промежуточных вычислений.

Каждая переменная содержит поле типа и поле данных, которое интерпретируется в зависимости от поля типа. Память виртуальной машины реализуется в виде массива таких переменных фиксированной длины.

Команда виртуальной машины состоит из двух полей: кода команды и поля операнда. Если команда не требует операнда — поле операнда игнорируется. Виртуальная машина имеет следующий список команд:

HALT NOP LOAD LDAD STORE CONST

STKRES REM CALL RETURN JMP JMPC JMPCN ADD SUB MUL DIV MOD BIN_AND BIN_OR BIN_XOR BIN_NOT LOG_AND LOG_OR

IS_EQ IS_UNEQ IS_GRTR IS_LESS IS_GEQ IS_LEQ LOG_NOT NOT NEG

Каждая подпрограмма состоит из нескольких команд. Выделяется корневая подпрограмма, в которую помещаются команды инициализации переменных. Данная подпрограмма вызывается сразу после компиляции модуля. Остальные подпрограммы формируются в процессе компиляции объявленных функций.

Стек и основная память виртуальной машины не пересекаются, однако для упрощения работы с локальными переменными они были объединены в одно адресное пространство. В связи с этим, адрес команды состоит из двух частей: селектора стека (1 бит) и адресной части (31 бит).

Если селектор стека равен 0, то адресная часть интерпретируется как индекс в основной памяти.

Если селектор стека равен 1, то адресная часть интерпретируется как смещение относительно базы стека. Причем, смещение может быть как положительным так и отрицательным, что позволяет эффективно реализовать доступ к локальным переменными и аргументам функции.

Векторные операции поддерживаются как на уровне команд и типов данных виртуальной машины, так и набором внешних функций. Например, операции сложения, вычитания, покомпонентного умножения векторов осуществляются командами ADD, SUB и MUL соответственно. Другие же операции, такие как скалярные, векторные произведения и ряд других преобразований, например отражение — реализуются набором внешних функций.

Пример программы, которая считает площадь треугольника заданного вершинами:

function TriSquare(p1, p2, p3) {

var a = p2 - p1;

var b = p3 - p1;

var xpd = cross(a, b);

var len = length(xpd) * 0.5;

return len;

}
var s = TriSquare( vector4(1,1,1,1), vector4(4,1,2,1), vector4(2,4,1,1) );

print("Square is ", s, " m^2\r\n");
Результат выполнения:

Square is 4.769696
Данный язык сценариев достаточно нов, однако уже показал свою работоспособность в решении простых задач. Тем не менее, для того, чтобы данный язык приобрел качества современных скриптовых языков, необходим ряд усовершенствований и дальнейших улучшений:

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

  2. Поддержка матриц 4х4.

  3. Поддержка составных типов, аналогичным структурам С или таблицам Lua.

  4. Поддержка объектной модели.

  5. Поддержка параллельного исполнения внутренних функций.

  6. Внедрение развитой системы отладки и профилирования исполняемых сценариев.

  7. Профилирование виртуальной машины с целью выяснения трудоемких участков кода.


Список литературы

  1. Ахо Альфред В., Лам, Моника, С., Сети, Рави, Ульман Джефри Д. Компиляторы: принципы, технологии и инструментарий, 2-е изд. Пер. С англ. — М. ООО «И.Д. Вильямс», 2008.

  2. Зубков С.В. Assembler для DOS, Windows и UNIX – 3-е изд., — М.: ДМК Пресс; СПб.: Питер, 2004.

  3. Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes. 2007. Lua 5.1 Reference Manual.

  4. Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes. 2007. The Evolution of Lua. Proceedings of ACM HOPL III (2007) 2-1–2-26.

  5. Tim Sweeney, Michiel Hendriks. UnrealScript Language Reference. http://udn.epicgames.com/Two/UnrealScriptReference.html

  6. Angel Script Manual. http://www.angelcode.com/angelscript/sdk/docs/manual/index.html

Похожие:

Разработка языка сценариев для систем виртуальной реальности iconРазработка новейших технологий виртуальной реальности о компании
Москве. Основным видом деятельности Компании является построение систем многопользовательской трехмерной виртуальной реальности новейшего...
Разработка языка сценариев для систем виртуальной реальности iconД противопоставления систем искусственного интеллекта и виртуальной реальности в преподавании когнитивной графики в университете
...
Разработка языка сценариев для систем виртуальной реальности iconИспользование языка сценариев JavaScript
Цель данного параграфа рассмотреть некоторых из них и научить вас использовать их на своих html-страничках. Подробнее возможности...
Разработка языка сценариев для систем виртуальной реальности iconКогнитивное моделирование региональной социально-экономической системы
Целью таких исследований является разработка структурно устойчивых систем и сценариев их устойчивого развития
Разработка языка сценариев для систем виртуальной реальности iconТехническое задание на выполнение работ по теме: «Визуальный анализ виртуальной реальности»
«Формирование системы аналитических компетенций для инноваций в бизнесе и государственном управлении»
Разработка языка сценариев для систем виртуальной реальности iconРазработка методов представления и обработки естественного языка для проблемно-ориентированных систем автоматического понимания речи

Разработка языка сценариев для систем виртуальной реальности iconСистема управления в милиции: конструирование виртуальной реальности с реальными пострадавшими Асмик Новикова, Фонд «Общественный вердикт» (Москва)
Лиции (полиции) при столкновении архаичных управленческих систем со сложной реальностью, с которым им приходится иметь дело. Люди,...
Разработка языка сценариев для систем виртуальной реальности iconЭпистемологические проблемы исследования виртуальной реальности
ВР, так и инструмента – адекватных средств концептуализации вр. Поэтому, рассмотрим некоторые принципиальные мировоззренческие установки,...
Разработка языка сценариев для систем виртуальной реальности iconИсследование пользователей среды виртуальной реальности
Особое место среди современных методик визуализации занимает виртуальная реальность
Разработка языка сценариев для систем виртуальной реальности iconК. А. Кулаков, М. А. Крышень
Целью проекта является разработка алгоритмов генерации тестовых систем оданлду различных классов, разработка web-сервера Web-SynDic...
Разместите кнопку на своём сайте:
ru.convdocs.org


База данных защищена авторским правом ©ru.convdocs.org 2016
обратиться к администрации
ru.convdocs.org