Разработка моста между средами выполнения .NET и Objective-C.

20
РАЗРАБОТКА МОСТА МЕЖДУ СРЕДАМИ ВЫПОЛНЕНИЯ .NET И OBJECTIVE-C. Выпускная квалификационная работа Выполнил: Гришуль Е.С. Группа 6120 Научный руководитель: Павловская Т.А.

description

Выпускная квалификационная работа. Разработка моста между средами выполнения .NET и Objective-C. Выполнил: Гришуль Е.С. Группа 6120 Научный руководитель: Павловская Т.А. Постановка задачи. Objective-C. .NET. Mac OS X. Windows. Мост. Mac OS. Linux. Unix. …. Выбор ОС. ядро UNIX - PowerPoint PPT Presentation

Transcript of Разработка моста между средами выполнения .NET и Objective-C.

Page 1: Разработка моста между средами выполнения  .NET и Objective-C.

РАЗРАБОТКА МОСТА МЕЖДУ СРЕДАМИ

ВЫПОЛНЕНИЯ .NET И OBJECTIVE-C.

Выпускная квалификационная работа

Выполнил: Гришуль Е.С.Группа 6120

Научный руководитель: Павловская Т.А.

Page 2: Разработка моста между средами выполнения  .NET и Objective-C.

ПОСТАНОВКА ЗАДАЧИ

.NET Objective-C

Mac OS X

Windows

Linux

Unix

Mac OS

Мост

Page 3: Разработка моста между средами выполнения  .NET и Objective-C.

ВЫБОР ОС•ядро UNIX•Платформы

• x86/PPC • iPhone

•Большая аудитория•Быстро растущий рынок ПО•Большое количество Open Source программ и средств разработки

Page 4: Разработка моста между средами выполнения  .NET и Objective-C.

АУДИТОРИЯ

Дизайнеры Художники Режиссеры Верстальщики Музыканты Писатели

Пользователи iPhone и др.

Page 5: Разработка моста между средами выполнения  .NET и Objective-C.

OBJECTIVE-C

Приложение может быть написано на..

Python

Сервисы ОС доступны с помощью…

C/C++

Page 6: Разработка моста между средами выполнения  .NET и Objective-C.

НЕДОСТАТКИ OBJECTIVE-C Отсутствие стандарта

GCC - единственный компилятор Objective-C кода

Непродуманные метаданные Их недостаточно! Недостающие метаданные можно узнать только из исходных кодов либо с

помощью методов обратного проектирования

Некачественный API Нет “нормальной” возможности создавать протоколы, свойства Отсутствие возможности выгрузки кода(!) Отсутствует раскрутка стека при исключениях Отстутствие детальной документации

Отсутствие кроссплатформенной библиотеки Проблемы, аналогичные “Dll Hell”

Что ведет к бинарной несовместимости между версиями

Отсутствие верификации кода Плохое зрительное восприятие кода

Page 7: Разработка моста между средами выполнения  .NET и Objective-C.

ИНТЕГРАЦИЯ

?

Page 8: Разработка моста между средами выполнения  .NET и Objective-C.

С ЧЕМ СВЯЗАТЬ OBJECTIVE-C?

•Как написать быстрее?•Как написать надежнее?•Как отлаживать?•Как предотвращать потенциальные ошибки?•Как оградить других?

Page 9: Разработка моста между средами выполнения  .NET и Objective-C.

АНАЛОГИ Cocoa#

Крайне плохая архитектура и реализация Не поддерживается много лет Ручная работа по созданию оберток Реализованных оберток очень мало Очень большое потребление памяти Очень сильно нагружает сборщик мусора Любое исключение приводит к падению Крайне медленные вызовы

Monobjc Ручная работа по созданию оберток Большое потребление памяти Сильно нагружает сборщик мусора Любое исключение приводит к падению

Mobjc Ручная работа по созданию оберток Реализованных оберток очень мало Нагружает сборщик мусора Не поддерживает списки аргументов переменной длины Медленные вызовы

Page 10: Разработка моста между средами выполнения  .NET и Objective-C.

КЛАССЫ-ОБЕРТКИ

.NET

Objective-C

Proxy Proxy Proxy

class

class

class

classclass

•Полноценные .NET объекты• Типы-значения• Не нагружают GC

•Прозрачный маршалинг• Примитивных значений• Оберточных значений

•Быстрые managed-unmanaged переходы•Совместимые сигнатуры•Аналогичная иерархия•Интеграция с механизмом подсчета ссылок•Преобразование исключений•Обработка списка параметров переменной длины

Page 11: Разработка моста между средами выполнения  .NET и Objective-C.

.NET

Objective-C

X86/PPC asm

Transition proxy

ЭКСПОРТИРОВАНИЕ Обратный вызов Прозрачный маршалинг Быстрые и надежные переходы Автоматический отлов и преобразование исключений Совмещение с схем управления памятью Отсутствие фиксирования .NET объектов

classproxy

Page 12: Разработка моста между средами выполнения  .NET и Objective-C.

ГЕНЕРИРОВАНИЕ ОБЕРТОК

Написание рукамиMac OS 10.4 Tiger ~20000 методовMac OS 10.5 Leopard ~23000 методовРутинная однообразная работаЧеловеческий фактор

Автоматическая кодогенерацияНедостаток метаинформацииБыстрый и эффективный рефакторингВыше поддерживаемость исходников

Page 13: Разработка моста между средами выполнения  .NET и Objective-C.

Скрыто от пользователя Для пользователя

АРХИТЕКТУРА МОСТА

Генератор оберток

Ядро

Weaver Обертки

Необработанные Обертки

Анализатор среды выполнения

Анализатор заголовков

Прослойка совместимости с Mac OS X 10.4

Page 14: Разработка моста между средами выполнения  .NET и Objective-C.

ИСПОЛЬЗУЕМЫЕ СРЕДСТВА Генератор оберток использует:

NRefactory – лексер и парсер C#NObjectiveAST – лексер и парсер Objective-CCecil – работа с CIL и метаданными

Ядро использует:Mach-O средаNUnit – модульное тестирование

Весь проект использует:NAnt - система сборки

Page 15: Разработка моста между средами выполнения  .NET и Objective-C.

РЕЗУЛЬТАТЫ ЗАМЕРОВ ПРОИЗВОДИТЕЛЬНОСТИ

Вы

зо

во

в м

ето

до

в

в с

ек

0 2000000 4000000 6000000 80000007440476

1729056

125747

52996

Cocoa#MobjcMonobjcNobjective

Со

зд

ани

е о

бъ

ект

ов

в с

ек

0 1000000 2000000 3000000 4000000 50000004870920

162561

68299

12265

Cocoa#MobjcMonobjcNobjective

По

тр

еб

ле

ни

е п

ам

яти

(K

iB)

0 5000 10000 15000 20000 25000 30000

428 149521380 28516Cocoa#MobjcMonobjcNObjective

Page 16: Разработка моста между средами выполнения  .NET и Objective-C.

РЕЗУЛЬТАТЫ ЗАМЕРОВ ПРОИЗВОДИТЕЛЬНОСТИ

Вы

зо

во

в м

ето

да

с

пе

ре

ме

нн

ым

чи

сл

ом

а

ргу

ме

нто

в в

се

к

0 5000 10000 15000 20000 25000 30000 35000

3341220612

2402Cocoa#MonobjcNobjective

За

щи

ще

ны

х в

ызо

во

в

в с

ек

1748284944

1

MobjcNobjective

Пр

ео

бр

азо

ва

ни

е

ис

клю

че

ни

й в

се

к

0 5000 10000 15000 20000 25000 30000 35000

331211375 Mobjc

Nobjective

Page 17: Разработка моста между средами выполнения  .NET и Objective-C.

СРАВНЕНИЕ ОБЪЕМОВ ИСХОДНОГО КОДА

Кол

ичество о

берток

(шт)

0 500 1000 1500 2000 2500

23001400

1635

Cocoa#MobjcMonobjcNobjective

Разм

ер и

сход

ны

х

файл

ов (

KiB

)

0 5000 1000015000200002500030000350004000045000

4025812818464205Cocoa#MobjcMonobjcNObjective

Page 18: Разработка моста между средами выполнения  .NET и Objective-C.

СМЕТА ЗАТРАТ№

п.п.

Статьи расходов Условные

обозначения

Затраты по

статьям (руб.)

1

1

Амортизационные отчисления Соб1062

2

2

Заработная плата Сос333333

3

3

Дополнительная заработная плата Сдоп33333,3

4

4

Отчисления в социальные

внебюджетные фонды

Ссф19199

5

5

Прочие затраты Сп382927

6

6

Накладные расходы Сн233333

Итого: 636262

Page 19: Разработка моста между средами выполнения  .NET и Objective-C.

РАСЧЕТ ЗАРАБОТНОЙ ПЛАТЫ

Состав работ Трудоемкость Суммарная основная заработная

плата

Знакомство с предметной областью 20 9 523 р.

Подготовка ТЗ 5 2 380 р.

Проектирование архитектуры

библиотеки

101 48 095 р.

Разработка библиотеки 350 166 666 р.

Разработка тестового приложения 15 7 142 р.

Рефакторинг 80 38 095 р.

Отладка 100 47 619 р.

Тестирование 14 6 666 р.

Подготовка экономической части 5 2 380 р.

Подготовка части по безопасности

жизнедеятельности

5 2 380 р.

Оформление пояснительной записки

и графического материала

5 2 380 р.

Консультации с руководителем 8 1664 р.

Итого: 700 333 333 р.

Page 20: Разработка моста между средами выполнения  .NET и Objective-C.

РЕЗЮМЕ Превосходство над аналогами

По производительности По потреблению памяти По безопасности По функциональности По простоте поддержания исходников По спектру поддерживаемых платформ По использованным технологиям

Легкость расширения Автоматическая генерация оберток Продуманная архитектура

Привлекательность для пользователя моста Высокая гибкость и быстродействие Мощная система трассировки LGPL лицензия Упрощение портирования имеющихся .NET приложений с

Windows на Mac OS