200 likes | 349 Views
Выпускная квалификационная работа. Разработка моста между средами выполнения .NET и Objective-C. Выполнил: Гришуль Е.С. Группа 6120 Научный руководитель: Павловская Т.А. Постановка задачи. Objective-C. .NET. Mac OS X. Windows. Мост. Mac OS. Linux. Unix. …. Выбор ОС. ядро UNIX
E N D
Выпускная квалификационная работа Разработка моста между средами выполнения .NET и Objective-C. Выполнил: Гришуль Е.С. Группа 6120 Научный руководитель: Павловская Т.А.
Постановка задачи Objective-C .NET Mac OS X Windows Мост Mac OS Linux Unix …
Выбор ОС • ядро UNIX • Платформы • x86/PPC • iPhone • Большая аудитория • Быстро растущий рынок ПО • Большое количество Open Source программ и средств разработки
Аудитория • Дизайнеры • Художники • Режиссеры • Верстальщики • Музыканты • Писатели • Пользователи iPhone и др.
Недостатки Objective-C • Отсутствие стандарта • GCC - единственный компилятор Objective-C кода • Непродуманные метаданные • Их недостаточно! • Недостающие метаданные можно узнать только из исходных кодов либо с помощью методов обратного проектирования • Некачественный API • Нет “нормальной” возможности создавать протоколы, свойства • Отсутствие возможности выгрузки кода(!) • Отсутствует раскрутка стека при исключениях • Отстутствие детальной документации • Отсутствие кроссплатформенной библиотеки • Проблемы, аналогичные “Dll Hell” • Что ведет к бинарной несовместимости между версиями • Отсутствие верификации кода • Плохое зрительное восприятие кода
С чем связать Objective-C? • Как написать быстрее? • Как написать надежнее? • Как отлаживать? • Как предотвращать потенциальные ошибки? • Как оградить других?
Аналоги • Cocoa# • Крайне плохая архитектура и реализация • Не поддерживается много лет • Ручная работа по созданию оберток • Реализованных оберток очень мало • Очень большое потребление памяти • Очень сильно нагружает сборщик мусора • Любое исключение приводит к падению • Крайне медленные вызовы • Monobjc • Ручная работа по созданию оберток • Большое потребление памяти • Сильно нагружает сборщик мусора • Любое исключение приводит к падению • Mobjc • Ручная работа по созданию оберток • Реализованных оберток очень мало • Нагружает сборщик мусора • Не поддерживает списки аргументов переменной длины • Медленные вызовы
Классы-обертки • Полноценные .NET объекты • Типы-значения • Не нагружают GC • Прозрачный маршалинг • Примитивных значений • Оберточных значений • Быстрые managed-unmanaged переходы • Совместимые сигнатуры • Аналогичная иерархия • Интеграция с механизмом подсчета ссылок • Преобразование исключений • Обработка списка параметров переменной длины .NET class class Proxy Proxy Proxy Objective-C class class class
Экспортирование • Обратный вызов • Прозрачный маршалинг • Быстрые и надежные переходы • Автоматический отлов и преобразование исключений • Совмещение с схемуправления памятью • Отсутствие фиксирования .NET объектов .NET Objective-C X86/PPC asm proxy Transition proxy class
Генерирование оберток • Написание руками • Mac OS 10.4 Tiger ~20000 методов • Mac OS 10.5 Leopard ~23000 методов • Рутинная однообразная работа • Человеческий фактор • Автоматическая кодогенерация • Недостаток метаинформации • Быстрый и эффективный рефакторинг • Выше поддерживаемость исходников
Архитектура моста Скрыто от пользователя Для пользователя Генератор оберток Ядро Анализатор среды выполнения Анализатор заголовков Прослойка совместимости с Mac OS X 10.4 Необработанные Обертки Обертки Weaver
Используемые средства • Генератор оберток использует: • NRefactory – лексер и парсерC# • NObjectiveAST – лексер и парсерObjective-C • Cecil – работа с CIL и метаданными • Ядро использует: • Mach-O среда • NUnit– модульное тестирование • Весь проект использует: • NAnt - система сборки
Результаты Замеров производительности
Результаты Замеров производительности
Резюме • Превосходство над аналогами • По производительности • По потреблению памяти • По безопасности • По функциональности • По простоте поддержания исходников • По спектру поддерживаемых платформ • По использованным технологиям • Легкость расширения • Автоматическая генерация оберток • Продуманная архитектура • Привлекательность для пользователя моста • Высокая гибкость и быстродействие • Мощная система трассировки • LGPL лицензия • Упрощение портирования имеющихся .NET приложенийс Windows на Mac OS