Опубликован: 13.10.2008 | Уровень: специалист | Доступ: платный
Лекция 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 >
Ринат Гатауллин
Ринат Гатауллин

Здравствуйте. Интересует возможность получения диплома( https://intuit.ru/sites/default/files/diploma/examples/P/955/Nekommerch-2-1-PRF-example.jpg ). Курс пройден. Сертификат не подходит. В сертификате ошибка, указано по датам время прохождения около 14 дней, хотя написано 576 часов.

Вячеслав Кузнецов
Вячеслав Кузнецов

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

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

Дмитрий Черкасов
Дмитрий Черкасов
Россия, Москва
Иван Герасимов
Иван Герасимов
Россия, калининград, Балтийский институт экономики и финансов, 2013