Санкт-Петербургский Государственный Университет Математико-механический факультет





НазваниеСанкт-Петербургский Государственный Университет Математико-механический факультет
страница10/13
Дата публикации16.08.2013
Размер0.61 Mb.
ТипДипломная работа
100-bal.ru > Информатика > Дипломная работа
1   ...   5   6   7   8   9   10   11   12   13

Язык асинхронных вызовов


Данный язык являлся первой частью работы, был необходим для того, чтобы иметь возможность писать код, который делает асинхронный код. Это нужно для того, чтобы в дальнейшем писать работу с RPC на этом языке. Так как весь проект разрабатывается на MPS, то данный язык может быть применен для написания всех частей приложения, которые в дальнейшем будут сгенерированы в язык Java. На других же языках данное решение не применимо, поскольку разработка на других языках ведется не в MPS, а в среде данного языка.

Ниже приведен пример (лист.6) асинхронного блока в этом языке.

async (Human human = myService.getHuman()) {

...

succeed m || failwith new RuntimeException(...)

} handle (Throwable t) {

...

} finally {

...

}

Листинг 6. Пример асинхронного блока

Кроме создания асинхронных блоков, в языке также имеется возможность создавать асинхронные методы, для этого в начале метода будет записан дескриптор «async». Внутри асинхронного метода можно указать конструкцию «forward», которая передаст управление другому асинхронному методу, при этом метод должен возвращать точно такое же значение. Кроме того если асинхронный вызов делается внутри асинхронной конструкции, то можно не писать блок обработки ошибок. Блок finally является необязательным. В любой момент времени внутри асинхронного блока можно написать «failwith» или «succeed» с ошибкой или с результатом соответственно. Синтаксис async-handle-finally блоков похож на синтаксис try-catch-finally, с «failwith» и «succeed» вместо «throw» и «return».

Генерация происходит в анонимный класс, у которого есть два метода onSuccess и onFailure. Также для каждого метода finally создается класс, который умеет выполнять код из соответствующего блока, при этом блок может быть выполнен лишь единожды. Это нужно по той причине, что вызов метода этого класса происходит в нескольких местах: после удачного завершения, после неудачного завершения или после ошибки во время вызова метода.

Блок finally был добавлен в язык с целью наличия возможности отследить, когда закончены все запросы к серверу, чтобы выполнить какой-то код, то есть нужно было выполнять некоторые действия независимо от того, успешно ли выполнен async-блок или нет. Это вызвало бы дублирование кода при отсутствии finally-блока.

Язык сообщений


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

В примере (лист.7) указан контейнер сообщений, перечисление в нём, а также одно сообщение. messages MyMessages {

enum AccessLevel {

READ,

WRITE,

ADMIN

}

message Resource {

int id;

AccessLevel level;

array editors;

}

...

}

Листинг 7. Пример контейнера сообщений

Изначально в языке присутствовала конструкция oneOf, которая позволяла явно задать типы, которые могут быть в данном сообщении. Это единственное место, где нужно также передавать тип. Поскольку в такой структуре могло быть перечислено много значений, то размещение oneOf перед названием поля приводило к тому, что поле становилось нечитаемым, поэтому в первой версии был выбран синтаксис указанный в примере (лист. 8).

message Resource {

field id : int;

field AccessLevel level;

field editors : array(User);

field content : oneOf(Text, Sound, Video);

}

Листинг 8. Пример сообщения в старом стиле

Этот синтаксис выполнен в стиле языка Pascal. Это было необходимо на тот момент. Однако проанализировав другие IDL, были выделены особенности, которые ухудшают восприятие синтаксиса, также выделены те, которые улучшают. Основным критерием является C-подобность. Именно поэтому было необходимо избавиться от конструкции oneOf, а также от самого принципа ручного перечисления всех типов, так как это загромождает язык и делает его менее удобным, поскольку разработчик должен при каждом добавлении нового типа проследить все места, где может упоминаться этот тип.

Решением данной задачи является наследование. Оно позволяет избавиться от перечисления типов. При генерации кода происходит анализ зависимостей классов – концепт oneOf заполняется автоматически. Если в oneOf содержится всего 1 возможный класс, то тип сообщения не передается, что сокращает размер передаваемой информации.

Язык сообщений поддерживает не только создание сообщений с некоторым корнем, но и использование их в коде программы на MPS. Для этого была произведена работа по поддержке выведения типов сообщений, их полей и массивов. Это объёмная и сложная часть, поскольку требует высокого уровня аккуратности и понимания.

Также был реализован паттерн Builder, который позволяет создавать сообщения в программе, используя укорочены код. Данное решение повсеместно используется в языках, которые реализованы в MPS. Ниже (лист.9) приведен пример того, как можно создать новое сообщение.

Resource res = new Resource {

id : 12;

level : AccessLevel.READ;

result.editors.add(...);

}

Листинг 9. Пример создания сообщения

К данному языку сначала был реализован генератор в язык Java. Кроме сериализации и десериализации было необходимо написать часть, которая делает сообщения совместимыми с обычным языком Java, то есть нужно было все нахождения сообщений в коде программ заменить на Java-классы, переопределить все instanseOf, equals и hash, так как стандартные выдавали бы неверные результаты.
1   ...   5   6   7   8   9   10   11   12   13

Похожие:

Санкт-Петербургский Государственный Университет Математико-механический факультет iconСанкт-Петербургский государственный университет Математико-механический факультет
Министерством образования и науки Российской Федерации. В 2012-2013 учебном году литературное образование в школе на базовом уровне...
Санкт-Петербургский Государственный Университет Математико-механический факультет iconСанкт-Петербургский государственный морской технический университет...
Рецензия на книгу: С. А. Остроумов "Биотический механизм самоочищения пресных и морских вод: элементы теории и приложения" (Москва,...
Санкт-Петербургский Государственный Университет Математико-механический факультет iconМатематико-механический факультет
Государственное образовательное учреждение высшего профессионального образования
Санкт-Петербургский Государственный Университет Математико-механический факультет icon«Санкт-Петербургский государственный университет» (СПбГУ) Исторический факультет утверждаю
Краснодарский государственный историко-археологический музей-заповедник им. Е. Д. Фелицына
Санкт-Петербургский Государственный Университет Математико-механический факультет iconОбзор современных систем управления бизнес-процессами
Агапова Татьяна, математико-механический факультет, 2 курс
Санкт-Петербургский Государственный Университет Математико-механический факультет iconПсихическое здоровье в Германии и России: Клиническая и исследовательская инициатива
Санкт-Петербургский научно-исследовательский Санкт-Петербургский государственный университет
Санкт-Петербургский Государственный Университет Математико-механический факультет iconМатематико-механический факультет asmpy ассемблер python compiled (*. pyc ) файлов
Государственное образовательное учреждение высшего профессионального образования
Санкт-Петербургский Государственный Университет Математико-механический факультет iconСанкт-петербургский Государственный университет Восточный факультет Филиппов Е. А. Аннотация
Метадическая разработка интегрированного урока с использованием возможностей интерактивной доски
Санкт-Петербургский Государственный Университет Математико-механический факультет iconПравительство Российской Федерации Санкт Петербургский государственный...
Муниципальное автономное образовательное учреждение «Средняя общеобразовательная школа №21»
Санкт-Петербургский Государственный Университет Математико-механический факультет iconСанкт-Петербургский центр научно-технической информации «Прогресс»,...
Особенности размещения государственного заказа в связи с изменениями в федеральном
Санкт-Петербургский Государственный Университет Математико-механический факультет icon«Санкт-Петербургский государственный университет» (СПбГУ) Исторический факультет утверждаю
Учебно-методический комплекс по дисциплине «Биохимия молока и мяса» составлен на основе
Санкт-Петербургский Государственный Университет Математико-механический факультет iconПрограмма по формированию навыков безопасного поведения на дорогах...
Санкт-Петербургский Государственный Политехнический Университет, Факультет Иностранных Языков
Санкт-Петербургский Государственный Университет Математико-механический факультет iconРоссийской Федерации Санкт Петербургский государственный университет Физический факультет
Цель изучения дисциплины: Обучение магистрантов аналитическим методам анализа структуры и эволюции нелинейных полей
Санкт-Петербургский Государственный Университет Математико-механический факультет iconОсновная образовательная программа (ооп) бакалавриата, реализуемая...
«Санкт-Петербургский государственный университет телекоммуникаций им проф. М. А. Бонч-Бруевича» (СПбгут) по направлению подготовки...
Санкт-Петербургский Государственный Университет Математико-механический факультет iconОсновная образовательная программа (ооп) бакалавриата, реализуемая...
«Санкт-Петербургский государственный университет телекоммуникаций им проф. М. А. Бонч-Бруевича» (СПбгут) по направлению подготовки...
Санкт-Петербургский Государственный Университет Математико-механический факультет iconСанкт-Петербургский государственный университет Факультет философии и политологии
Контрольная работа по дисциплине «Культура речи и деловое общение» является допуском студента заочной формы обучения к зачету


Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск