Опубликован: 13.10.2008 | Доступ: свободный | Студентов: 1593 / 172 | Оценка: 4.22 / 3.70 | Длительность: 09:12:00
ISBN: 978-5-9963-0003-7
Лекция 2:

Rotor и Mono

< Лекция 1 || Лекция 2 || Лекция 3 >
Аннотация: Mono - открытая платформа для разработки кроссплатформенных (Linux, MAC, Windows) приложений на основе .NET Framework. Rotor - реализация .NET с открытыми исходными тестами. Компоненты Rotor: компиляторы, CLI, системные и вспомогательные средства

Mono

Mono - платформа разработки с открытыми исходными кодами, основанная на Microsoft .NET Framework. Mono позволяет разработчикам, имеющим дело с платформами UNIX, Linux, FreeBSD, Mac OS X, Solaris и Windows, создавать и развертывать кроссплатформенные приложения стандарта .NET Проект Mono спонсируется компанией Novell. Mono включает в себя как средства разработки, так и инфраструктуру, необходимую для исполнения клиентских и серверных .NET-приложений. Mono позиционируется как "средство будущего для разработки Linux-приложений".

Реализация .NET в Mono основана на стандартах ECMA и включает среди прочего компилятор C#, общеязыковую исполняющую среду (Common Language Runtime) и множество библиотек. Библиотеки представляют собой библиотеки Microsoft .NET (в том числе ADO .NET, System.Windows.Forms и ASP .NET), совместимые с конкретными платформами, собственные библиотеки Mono и библиотеки классов сторонних разработчиков. В состав Mono входит Gtk# - множество расширений .NET для инструментария Gtk+ и различные библиотеки GNOME. Эти библиотеки позволяют разрабатывать полноценные GNOME-приложения с использованием Mono. Кроме того, библиотеки поддерживают разработку пользовательских интерфейсов с использованием GLADE. Проект Mono также включает интегрированную среду разработки (IDE), визуальные средства отладки и редактирования.

Компоненты Mono

Mono состоит из трех групп компонент: 1) компоненты ядра; 2) стек разработки для Mono/Linux/GNOME; и 3) стек компонент Microsoft.

К компонентам ядра относятся компилятор C#, виртуальная машина и основные библиотеки классов. Эти компоненты основаны на стандартах Ecma-334 и Ecma-335. Таким образом, Mono предоставляет соответствующую стандартам бесплатную версию виртуальной машины общеязыковой среды (CLI) с открытым исходным кодом.

Стек разработки для Mono/Linux/GNOME предоставляет инструменты для разработки приложений с использованием библиотек GNOME и других бесплатных библиотек с открытым исходным кодом. К ним относится: Gtk# для разработки графического интерфейса пользователя (GUI), библиотеки Mozilla для работы с системой рендеринга Gecko, библиотеки Unix, библиотеки для работы с базами данных, стек компонент безопасности и язык описания XML-схем RelaxNG. Gtk# позволяет приложениям Mono интегрироваться в GNOME подобно обычным Linux-приложениям. Библиотеки работы с базами данных позволяют соединяться с MySQL, SQLite, PostgreSQL, Firebird, Open Database Connectivity (ODBC), Microsoft SQL Server (MSSQL), Oracle, объектно-реляционными базами данных db4o и многими другими.

Стек компонент Microsoft предоставляет средства переноса приложений для Windows .NET на Linux-платформу К этим компонентам относятся ADO .NET, ASP .NET, Windows.Forms и другие.

Архитектура среды Mono

Общая структура Mono

Рис. 2.1. Общая структура Mono

Библиотека классов

Библиотека классов предоставляет самые разные возможности для разработки приложений. Большинство библиотек написано на C#, но могут быть использованы приложением на любом .NET-совместимом языке. Библиотеки классов содержат пространства имен логически связных классов. Библиотеки представляют собой сборки (assemblies).

Сборки и пространства имен

Пространства имен предоставляют механизм логического объединения близких по назначению классов в иерархическую структуру. Таким образом решается часть вопросов с совпадением имен классов (например, может существовать два класса с именем Connector - один в пространстве имен для работы с сетями, а другой в пространстве имен для работы с базами данных). На вершине иерархии находятся несколько основных пространств имен - например, пространство имен Accessibility, Windows или System; эти пространства содержат вложенные подпространства - например, System содержит пространства System.IO, System.Net и другие. Можно создавать свои собственные пространства имен.

Сборки представляют собой особые библиотеки классов. Сборка - набор из одного или нескольких файлов с определениями типов и файлами ресурсов. Один из файлов сборки выбирают для хранения ее декларации. Декларация - это набор таблиц метаданных, которые содержат различную информацию о сборке, в том числе имена составляющих ее файлов, региональные стандарты сборки, версию, издателя сборки, общедоступные экспортируемые типы. Сборки позволяют упаковать типы, сделать их доступными, обеспечить безопасность и управление версиями. Сборка позволяет разграничить логическое и физическое понятие повторно используемых типов. Сборка может содержать типы, реализованные на различных языках программирования. Сборки - не особенность Mono, они являются частью инициативы .NET. Примерами сборок являются mscorlib.dll, System.dll, System.Data.dll и Accessibility.dll. Пространства имен могут быть реализованы в нескольких сборках, состоящих из нескольких файлов.

Общеязыковая среда и общеязыковая спецификация

Общеязыковая среда (The Common Language Infrastructure - CLI) реализована в виде исполняемого файла Mono. Среда используется для исполнения скомпилированных .NET-приложений. Общеязыковая среда определена в стандарте ECMA-335.

Общеязыковая спецификация (The Common Language Specification - CLS) определена в главе 6 стандарта ECMA-335 и описывает интерфейсы CLI. Компилятор Mono генерирует образ, соответствующий CLS. Образ содержит код на промежуточном языке (the Common Intermediate Language). Исполняющая среда Mono исполняет этот образ.

Just-in-time компиляция

Just-in-time compilation (JIT) - компиляция по требованию. Такой вариант компиляции позволяет компилировать методы и другие элементы программы именно в тот момент, когда они вызываются приложением. Исполняющая среда Mono содержит just-in-time компилятор для следующих архитектур: x86, SPARC, PowerPC, ARM, S390 (32-битная и 64-битная версии), x86-64, IA64 и SPARC-64. Среда выполняет just-in-time компиляцию в машинный код и кэширует этот код на время исполнения приложения. Также можно выполнить предварительную компиляцию и кэширование части кода до исполнения.

Управляемый и неуправляемый коды

Код .NET/Mono-приложения - управляемый. То есть он контролируется общеязыковой средой, проверяется на безопасность типов и потоков, пользуется возможностями сборщика мусора и так далее. Однако, приложения .NET/Mono могут использовать неуправляемый код с помощью библиотек System.Runtime.InteropServices. Необходимость использовать неуправляемый код возникает по разным причинам: желание вызывать унаследованный код, написанный без использования .NET, необходимость прямого обращения к памяти и т. д. Многие поставляемые с Mono компоненты используют неуправляемый код (например, так делают библиотеки Gtk#).

Интегрированная среда разработки Mono (IDE)

MonoDevelop представляет собой бесплатную среду, интегрирующуюся в GNOME. Эта среда разрабатывалась преимущественно для программирования на C# и других .NET-совместимых языках, таких как Nemerle, Boo и Java (посредством IKVM.NET). Среда разработки включает средства управления классами, встроенный Help, средства генерации кода, подсказки, Stetic (дизайнер пользовательских интерфейсов), поддержку проектов и встроенный отладчик.

MonoDoc представляет собой браузер, позволяющий просматривать документацию по API и различные примеры кода (samples). Браузер использует wiki-образный стиль управления документацией, так что разработчики могут дополнять и корректировать статьи.

Проекты, основанные на Mono

Существует множество проектов, расширяющих Mono: Cocoa# - обертки вокруг Mac OS X toolkit (Cocoa); Gecko# - средства встраивания машины рендеринга, используемой Mozilla (Gecko);

Gtk# - C#-обертки библиотек Gtk+ и GNOME, написанных на C; Tao - набор графических и игровых расширений.

Вопросы лицензирования

Компилятор C# Mono и инструментарий Mono предоставляются по лицензии GNU General Public License (GPL), библиотеки исполняющей среды - по лицензии GNU Lesser General Public License (LGPL), а библиотеки классов - по лицензии MIT. Таким образом, все компоненты Mono в той или иной степени являются бесплатными и предоставляют доступ к исходному коду. Разработчики, расширяющие Mono, должны подписать соглашение, позволяющее Novell изменить условия лицензирования этих расширений. Существует версия .NET, разработанная Microsoft для FreeBSD, Windows и Mac OS X. Эта версия называется Shared Source CLI (Rotor). Лицензия Rotor явно запрещает его использование в коммерческих целях.

Rotor

Первые версии Rotor появились в 2002 году. Rotor предоставляет бесплатную реализацию Microsoft Common Language Runtime с открытыми исходными текстами. Rotor включает исходные коды компиляторов C# и Jscript, ассемблера и дизассемблера Common Intermediate Language (CIL), отладчика, профайлера, линковщика и других инструментов общеязыковой исполняющей среды. Код Rotor можно использовать, модифицировать и распространять в некоммерческих целях.

Версия общеязыковой среды Rotor (Shared Source Common Language Infrastructure - SSCLI) позволяет разработчикам изучать детали реализации различных библиотек .NET, реализовывать свои собственные версии общеязыковой среды.

Общеязыковая среда предоставляется предварительно сконфигурированной для работы на платформах Windows, FreeBSD (версия 4.7 и новее) и Mac OS X 10.2. Единственное, что может понадобиться настроить, - это PAL (Platform Abstraction Layer).

Текущая версия общеязыковой среды - это SSCLI 2.0. Она содержит большинство классов .NET Framework 2.0.

Итоги

Если удается сделать приложение кросс-платформенным, это всегда приветствуется. Те, кто предпочитают по тем или иным причинам разрабатывать приложения для многих платформ и при этом знают о достоинствах Microsoft .NET, могут использовать Rotor и Mono для более быстрого написания и развертывания безопасных приложений для Linux, UNIX или Mac OS X.

< Лекция 1 || Лекция 2 || Лекция 3 >
Вячеслав Кузнецов
Вячеслав Кузнецов

Здравствуйте.

Как оплатить курс?