CodeFest 2012. Гладкий Д. — Практика применения MPS на примере...

27
Практика применения MPS на примере проекта Денис Гладкий Татьяна Лях

Transcript of CodeFest 2012. Гладкий Д. — Практика применения MPS на примере...

Page 1: CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «MobileNoter HD»

Практика применения MPS на примере проекта

Денис Гладкий Татьяна Лях

Page 2: CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «MobileNoter HD»

© Технологика

Базовые подсистемы

1

Чтение/запись *.one файлов

Синхронизация с «облачными»

сервисами:

Page 3: CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «MobileNoter HD»

© Технологика

OneNote COM API

Объектная модель документа

VCS

Модель данных OneNote

2

Page 4: CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «MobileNoter HD»

© Технологика

Синхронизация с «облачными» сервисами

Общий алгоритм синхронизации:

- Вычисление файловой разности

- Отправка/удаление локальных файлов

- Загрузка/удаление файлов в хранилище

- Построение индекса локальных файлов

Интерфейс «облачного» файлового хранилища

Протокол Dropbox

Протокол SkyDrive

3

Page 5: CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «MobileNoter HD»

© Технологика

В цифрах

Модель данных Парсер Синхронизация Всего

*.java файлов 206 77 61 344

# cтрок кода ~7438 ~14818 ~5847 ~28103

Объём *.java файлов ~280 Kb ~896 Kb ~500 Кб ~1.6 Mb

Цель: портировать этот КОД на iOS.

4

Page 6: CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «MobileNoter HD»

© Технологика

На этапе планирования

5

Неудовлетворённость IDEA + Java

А писать придётся на Objective-C + Xcode

AppCode был в виде постоянно падающей «беты»

Классические проблемы дублирования кода

Править одни и те же «баги» в 2-х местах

Писать [новый] функционал дважды

Page 7: CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «MobileNoter HD»

© Технологика

Domain-Specific Language

6

Domain-specific language (noun): a computer programming language of limited expressiveness focused on a particular domain.

-Martin Fowler

Существующие DSL: Эффективное решение «частных» задач:

Увеличение продуктивности разработки Улучшение коммуникаций с заказчиком

«Success stories»: SQL, HLSL/GLSL

Создание своего DSL: Компилятор, среда выполнения Среда разработки: редактор, отладчик и т.д.

Page 8: CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «MobileNoter HD»

© Технологика

Создание DSL

7

Редактор

Абстрактный синтаксис (AST Model)

Семантика

Page 9: CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «MobileNoter HD»

© Технологика

Базовые понятия MPS

8

Узел (Node)

Концепция (Concept)

Язык (Language)

Page 10: CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «MobileNoter HD»

© Технологика

Язык структуры

9

Page 11: CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «MobileNoter HD»

© Технологика

Язык редактора

10

Page 12: CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «MobileNoter HD»

© Технологика

Шаблоны

11

Page 13: CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «MobileNoter HD»

© Технологика

Как делать транслятор?

12

Точный перевод абстрактного синтаксического дерева одного языка в синтаксическое дерево другого языка

Взять уже готовый язык текстового документа и транслировать из расширения Java в текстовый документ

Page 14: CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «MobileNoter HD»

© Технологика

Объявление и определение класса

.java

.h

.m

13

Page 15: CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «MobileNoter HD»

© Технологика 14

Объявление и определение класса

Page 16: CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «MobileNoter HD»

© Технологика 15

Объявление и определение класса

Page 17: CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «MobileNoter HD»

© Технологика

Enum

.m

.h

16

Page 18: CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «MobileNoter HD»

© Технологика

Проблемы трансляции

17

Анонимные классы

Ручное управление памятью

Page 19: CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «MobileNoter HD»

© Технологика

Retain, release, autorelease

Structure

18

Page 20: CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «MobileNoter HD»

© Технологика

Retain, release, autorelease

Editor

19

Page 21: CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «MobileNoter HD»

© Технологика

Retain, release, autorelease

20

Page 22: CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «MobileNoter HD»

© Технологика

Retain, release, autorelease

21

Page 23: CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «MobileNoter HD»

© Технологика

Трансляция стандартной библиотеки

22

1) typedef для имен классов; интерфейс адаптируется при помощи «категорий»

2) В java вводим классы из Objective-C

Page 24: CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «MobileNoter HD»

© Технологика 23

Трансляция стандартной библиотеки

Page 25: CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «MobileNoter HD»

© Технологика

Нововведения MPS 2.0

24

Копирование из Java

Импорт из Java

Page 26: CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «MobileNoter HD»

© Технологика

Выводы

25

- Сырость проработанности use cases - Слабая [offline] поддержка - «Птичий язык»

+ Низкая цена отказа + Проекты с большим сроком жизни + И таки да, оно работает

Page 27: CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «MobileNoter HD»

© Технологика

Большие проекты

Сложные задачи

Интересные люди

Спасибо за внимание!

26

Денис Гладкий

[email protected]

Татьяна Лях

[email protected]