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

Post on 22-Jun-2015

606 views 0 download

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

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

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

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

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

1

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

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

сервисами:

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

OneNote COM API

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

VCS

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

2

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

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

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

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

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

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

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

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

Протокол Dropbox

Протокол SkyDrive

3

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

В цифрах

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

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

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

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

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

4

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

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

5

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

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

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

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

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

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

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

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: Компилятор, среда выполнения Среда разработки: редактор, отладчик и т.д.

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

Создание DSL

7

Редактор

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

Семантика

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

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

8

Узел (Node)

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

Язык (Language)

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

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

9

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

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

10

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

Шаблоны

11

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

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

12

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

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

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

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

.java

.h

.m

13

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

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

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

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

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

Enum

.m

.h

16

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

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

17

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

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

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

Retain, release, autorelease

Structure

18

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

Retain, release, autorelease

Editor

19

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

Retain, release, autorelease

20

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

Retain, release, autorelease

21

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

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

22

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

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

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

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

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

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

24

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

Импорт из Java

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

Выводы

25

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

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

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

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

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

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

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

26

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

generalgda@gmail.com

Татьяна Лях

tanyaluach@gmail.com