Upload
codefest
View
606
Download
0
Embed Size (px)
Citation preview
Практика применения 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
Денис Гладкий
Татьяна Лях