Работаем с Mono. Часть 1: Основные принципы Mono, инструменты, создание простейшего приложения
Mono — программная платформа, позволяющая разработчикам достаточно просто создавать развитые кроссплатформенные приложения. Технология Mono разрабатывается в виде open source реализации технологии .NET Framework от Microsoft и поддерживает стандарты ECMA-334 (стандарт языка C#) и ECMA-335 (стандарт среды исполнения (Common Language Runtime, CLI). Открытость указанных стандартов позволяет уменьшить проблемы создания кроссплатформенных приложений.
В базовом варианте Mono состоит из нескольких компонентов:
- Компилятор языка C# — компилятор с полной поддержкой версий 1.0 и 2.0 языка C#. Кроме того в последних версиях поддерживаются практически все возможности версии C# 3.0, а начиная с версии Mono 2.6 включена поддержка возможностей версии C# 4.0 (пока только как опция, полноценная поддержка заявлена в версии 2.8).
- Среда исполнения Mono — состоит из среды исполнения (CLI) непосредственно, компилятора среды исполнения (Just-In-Time, JIT), генератора машинного кода (Ahead-Of-Time, AOT), загрузчика сборок, сборщика мусора, подсистемы управления многопоточностью и компонентов поддержки взаимодействия между сборками и COM (или аналогами в Linux, например XCOM).
- Базовая библиотека классов — набор стандартных классов, совместимых с классами Microsoft .NET Framework.
- Библиотека классов Mono — набор классов, поддерживающих дополнительные функции для разработки Linux-приложений. Например, классы для поддержки Zip, OpenGL, Cairo, Gtk+.
Совместимость Mono и Microsoft .NET Framework
В текущей версии Mono поддерживаются следующие версии и возможности Microsoft .NET Framework:
PascalABC.Net сравнение работы программы на Windows и Linux/Mono
- поддержка версии .NET 1.1:
- язык C# 1.0;
- базовые библиотеки версии 1.1: mscorlib, System, System.Xml;
- ASP .NET 1.1 (разработка веб-приложений);
- ADO .NET 1.1 (модель доступа к данным);
- Winforms/System.Drawing 1.1 (пользовательский интерфейс Microsoft Windows);
- базовые классы пространств имен System.Management (информация о системе, работа с устройствами) и System.EnterpriseServices (разработка масштабируемых бизнес-приложений, преимущественно на базе COM+ технологии) не поддерживаются в связи с отсутствием близких по идеологии технологий в Linux.
- поддержка версии .NET 2.0:
- язык C# 2.0 (поддержка дженериков (шаблонов, generics);
- базовые библиотеки версии 2.0: mscorlib, System, System.Xml;
- ASP .NET 2.0 (кроме WebParts);
- ADO .NET 2.0;
- Winforms/System.Drawing 2.0 (не поддерживаются языки с письмом справа налево);
- поддержка версий .NET 3.0 и 3.5:
- C# 3.0;
- System.Core (базовая библиотека классов);
- LINQ (Language Integrated Query, интегрированный язык запросов);
- ASP .NET 3.5;
- ASP .NET MVC (создание веб-приложений с поддержкой шаблона “модель-представление-поведение”);
- LINQ to SQL — поддержка большинства (но не полного комплекта) функций;
- WCF (Windows Communication Foundation) — частичная поддержка на уровне библиотек Silverlight 2.0;
- WPF (Windows Presentation Foundation) — не поддерживается и пока поддержка не планируется;
- WF (Workflow Foundation) — не поддерживается, планируется поддержка с версии WF4;
- поддержка версии .NET 4.0, реализованная в версии Mono в SVN:
- C# 4.0;
- ASP .NET 4.0 (пока частичная поддержка);
- LINQ 4.0.
Описание основных компонентов и возможностей Mono
Компилятор Mono C# поддерживает версии языков C# 1.0, 2.0 и 3.0. Для создания кода можно использовать один из нескольких вариантов компилятора, в зависимости от потребностей:
Раздел 1.4 Создание новой программы с использованием Mono
- mcs — компилятор, поддерживающий версию 1.1 среды исполнения. Компилирует код на языках C# 1.0 и C#3.0 (без поддержки дженериков и всего, что с ними связано). Данный компилятор планируется исключить в версии Mono 2.8, как устаревший.
- gmcs — компилятор, поддерживающий версии от 2.0 до 3.5 среды исполнения и обладающий полной поддержкой C# 3.0.
- smcs — опциональный компилятор для создания Moonlight (аналог Microsoft Silverlight) приложений.
- dmcs — опциональный компилятор, реализованный в тестовом варианте в версии Mono 2.6 и планируемый к включению в версию 2.8. Поддерживает среду исполнения версии 4.0 и язык C# 4.0.
Начиная с версии Mono 2.2 реализована поддержка классов компилятора Mono.CSharp.Evaluator (сборка Mono.Sharp.dll) для создания собственных сервисов компиляции.
Среда исполнения Mono поддерживает инфраструктуру промежуточного языка CLI (Common Language Infrastructure), соответствующую стандарту ECMA-335. Виртуальная машина среды исполнения допускает возможность запуска приложений и сборок, скомпилированных в других системах (например, возможно запускать в Linux без перекомпиляции приложения, созданные при помощи Microsoft Visual Studio для исполнения в Microsoft Windows).
Также, вместо использования виртуальной машины, среда исполнения может быть интегрирована в приложение с целью создания встраиваемой системы, не требующей установки Mono для запуска и обладающей высоким быстродействием. При этом, в приложение включаются только необходимые компоненты среды исполнения.
В среде Mono реализован Ahead-Of-Time (AOT) компилятор промежуточного языка. Цель этого компилятора в том, чтобы уменьшить время запуска программы и оптимизировать ее код, путем компиляции промежуточного языка CLI в машинный код. Аналогом в Microsoft .NET Framework является утилита Ngen. Для запуска приложения в этом режиме можно воспользоваться опцией —aot среды исполнения (также можно включить полную оптимизацию кода при помощи опцее -O=all). Например:
mono -O=all –aot program.exe
В качестве сборщика мусора в данный момент используется Boehm’s GC, однако в текущей разрабатываемой ветке SVN присутствует совершенно новый сборщик мусора, разработанный специально для Mono.
Установка Mono
Mono входит в репозитории огромного количества дистрибутивов, поэтому проблем с установкой из репозитория возникнуть не должно. Другой вопрос, какие версии располагаются в репозиториях. На данный момент на сайте проекта Mono предлагается скачать бинарные файлы версии 2.4.x. Эти же версии лежат в репозиториях современных дистрибутивов. Последней стабильной версией Mono считается 2.6.3, которая имеется только в виде исходных текстов.
Если есть желание установить Mono 2.6.3, то придется заняться самостоятельной сборкой версии из исходных текстов.
В качестве подопытной системы выберем недавно вышедшую Ubuntu 10.04. Тем не менее пользователям других версий и дистрибутивов это не должно особенно огорчать, потому что разница будет только в менеджерах пакетов и именах пакетов.
Для чистоты эксперимента, чтобы определить все пакеты, которые нужны, возьмем систему Ubuntu 10.04 установленную с нуля и обновленную (при помощи Synaptic или aptitude) до текущего состояния.
Первым делом создадим каталог для исходных текстов и сборки проектов:
mkdir ~/projects/mono cd ~/projects/mono
Для работы с пространством имен System.Windows.Forms (на классах которого построен графический интерфейс операционных систем семейства Microsoft Windows) необходимо установить библиотеку libgdiplus, которая реализует функции Microsoft GDI+ для Mono. Взять исходные тексты этой библиотеки можно с сайта проекта Mono:
wget http://ftp.novell.com/pub/mono/sources/libgdiplus/libgdiplus-2.6.2.tar.bz2
Распакуем исходные тексты и перейдем в каталог проекта:
tar jxf libgdiplus-2.6.2.tar.bz2 cd libgdiplus-2.6.2
При базовой установке Ubuntu устанавливается минимальный набор инструментов для разработчика, поэтому необходимо проследить, чтобы нужные инструменты присутствовали в системе. Для установки и работы потребуются компилятор g++, парсер Bison, интерпретатор макроязыка M4, библиотека Glib 2.0, GetText для поддержки интернационализации. Для работы с Mono требуется также Pkg-config. При отсутствии в системе эти пакеты (и их зависимости) нужно будет установить. Для Ubuntu это делается командой:
sudo apt-get install libglib2.0-dev m4 bison gettext pkg-config
Для работы библиотеки libgdiplus нужна библиотека libcairo2 версии не ниже 1.6.4. Эта библиотека входит в состав исходных текстов libgdiplus и может быть скомпилирована совместно с ней, однако при наличии более свежей версии рекомендуется пользоваться именно ей. В репозиториях Ubuntu 10.04 лежит libcairo2 версии 1.8.10. Установим ее из репозитория:
sudo apt-get install libcairo2-dev
Остается только сконфигурировать и собрать libgdiplus. По умолчанию установка производится в каталог /usr/local/bin для библиотеки и /usr/local/include для заголовочных файлов, что не всегда удобно, так как в будущем понадобится настройка переменных окружения LD_LIBRARY_PATH и LD_RUN_PATH. Удобнее, если библиотеки и заголовочные файлы будут расположены в /usr/bin и /usr/include соответственно.
./configure –prefix=/usr make sudo make install
Скачиваем mono runtime:
cd .. wget http://ftp.novell.com/pub/mono/sources/mono/mono-2.6.3.tar.bz2 cd mono-2.6.3
Рассмотрим наиболее интересные параметры конфигурации исходных текстов:
—with-xen-opt=yes,no
Этот параметр установлен в yes по умолчанию. При этом mono оптимизмруется для работы под средствами виртуализации Xen. В реальной среде производительность несколько ниже. Мы в нашем случае будем использовать no.
—with-large-heap=yes,no
Возможность выделения приложением больших объемов памяти (свыше 3 Гб). По умолчанию no.
—with-moonlight=yes,no
Включение поддержки Moonlight — свободного аналога Microsoft Silverlight.
—with-libgdiplus=installed,sibling,
Местоположение библиотеки libgdiplus для поддержки классов System.Windows.Forms. Значение installed означает, что библиотека установлена в системе (как в нашем случае), sibling — исходные тексты библиотеки лежат в каталоге с текстами mono, — библиотека установлена по указанному пути (используется, если библиотека установлена в нестандартный каталог или установлено несколько разных версий в разных каталогах).
—enable-big-arrays
Включение поддержки больших массивов, у которых индекс выходит за пределы Int32.MaxValue. По умолчанию такие массивы не поддерживаются даже в 64-битных системах (в том числе и в Microsoft Windows для архитектуры x64).
—enable-parallel-mark
Включение многопоточного сборщика мусора при наличии нескольких процессоров. По умолчанию сборщик мусора однопоточный. Следует заметить, что разработчики Mono предупреждают, что возможность является экспериментальной и не протестирована тщательно.
Конфигурируем и устанавливаем Mono:
./configure –prefix=/usr –with-xen-opt=no –with-moonlight –with-libgdiplus=installed make sudo make install
В моем случае изначально сборка закончилась неудачно в связи с тем, что make почему-то не хватило прав, хотя собиралось все в домашнем каталоге пользователя. Если вдруг такое произошло, помогает sudo make вместо make.
Mono Runtime готов к работе.
Создание первого приложения
С целью протестировать работоспособность Mono создадим традиционное приложение Hello World с выводом в терминал и вариант с созданием окна.
Для вывода в терминал воспользуемся методом WriteLine класса Console.
cd ~/projects cat > hello_world1.cs > EOF
Скомпилируем программу с поддержкой .NET версии 1.1:
mcs hello_world1.cs
Или с поддержкой .NET версии 2.0:
gmcs hello_world1.cs
Компиляция должна пройти без ошибок и запуск:
mono hello_world1.exe
приводит к выводу в консоль сообщения “Hello World! This is our first Mono program”
Сделаем ознакомительное приложение с использованием графического интерфейса. В среде Linux уместнее всего было бы использовать библиотеки Gtk#, однако в данный момент эта библиотека не установлена и это будет темой одной из будущих статей. Воспользуемся библиотекой Winforms, которая входит в состав Mono по умолчанию. Работа с этой библиотекой также будет описана в будущих статьях, поэтому код дается без комментариев.
cat > hello_world2.cs public Hello() < Text=”Hello World! This is our first Mono program”; >> EOF
Скомпилируем программу с поддержкой .NET версии 1.1:
mcs hello_world2.cs -pkg:dotnet
Или с поддержкой .NET версии 2.0:
gmcs hello_world2.cs -pkg:dotnet
Не забываем указать ключ -pkg:dotnet, подключающий библиотеки, содержащие пространство имен System.Windows.Forms.
mono hello_world2.exe
на экране появится пустое окно с заголовком “Hello World! This is our first Mono program” и кнопками сворачивания, разворачивания и закрытия.
MoMA — анализатор “чужих” сборок
Как было сказано выше, Mono совместим с .NET Framework на уровне исполняемых файлов и сборок. Однако, как это часто бывает, запуск скомпилированных, например, в Microsoft Visual Studio программ заканчивается ошибочно. В этом случае не помешает определить, стало ли причиной ошибки отсутствие какой-либо библиотеки в среде Mono в Linux (и решить проблему установкой этой библиотеки) или проблема связана с тем, что та или иная возможность не поддерживается в Mono.
В этом поможет инструмент Mono Migration Analyzer (MoMA), который можно скачать с сайта проекта Mono.
Для запуска MoMA его нужно распаковать в отдельный каталог и запустить сборку MoMA.exe:
unzip -x moma2-6.zip cd MoMA mono MoMA.exe
Тестирование сборок на совместимость состоит из пяти шагов и интуитивно понятно, более того реальный шаг всего один — выбор сборок для тестирования, остальные шаги содержат справочную информацию, итоги тестирования и форму для сбора информации о том, как улучшить данный инструмент.
Следует отметить, что MoMA — инструмен достаточно простой, поэтому возможны варианты, что какие-то проблемы в коде найдены не будут, а также возможно нахождение проблемы, которая, тем не менее, не помешает исполнению кода.
Все проблемы, которые находит MoMA можно свести к четырем видам.
-
Missing Methods — отсутствующие методы.В сборке присутствует вызов методов, которые не имеют никакой реализации (в том числе даже заглушки) в Mono. Если такое приложение попытаться скомпилировать в Mono, это приведет к ошибке вида:
file1.cs(10,15): error CS0117: ‘xxxxx’ does not contain a definition for ‘yyyyy’
Бороться с этой проблемой можно двумя способами. Первый состоит в том, чтобы заменить отсутствующий метод другими методами, реализующими ту же задачу. Второй состоит в том, чтобы реализовать отсутствующий метод и, по возможности, предложить его для включения в новую версию Mono.
Работа с MoMA из командной строки
В случае, если использование графического интерфейса не нужно или невозможно, можно использовать MoMA из командной строки.
При этом указывается параметр —nogui, может быть указан параметр —out с указанием месторасположения отчета об анализе, а затем указывается одна или несколько анализируемых сборок. Например:
mono MoMA.exe —nogui —out Report.html App.exe ../Lib1.dll ../Lib2.dll Lib3.dll
FastReport Mono. Что это, и для чего?
Моно — это платформа разработки с открытым исходным кодом на основе .NET Framework, позволяет разработчикам создавать кросс-платформенные приложения. Реализация Mono .NET основана на стандартах ECMA для C # и Common Language Infrastructure.
Разработанный компанией Novell, Xamarin, а теперь Microsoft и .NET Foundation, проект Mono имеет активное и энтузиастское сообщество. Mono включает как инструменты разработчика, так и инфраструктуру, необходимую для запуска клиентских и серверных приложений .NET.
Платформа Mono состоит из нескольких компонентов:
Компилятор C # — поддерживает C # стандарта 1.0, 2.0, 3.0, 4.0, 5.0 и 6.0 (ECMA).
Mono Runtime — среда выполнения ECMA Common Language Infrastructure (CLI). Среда исполнения предоставляет компилятор Just-in-Time (JIT), компилятор Ahead-of-Time (AOT), загрузчик библиотек, сборщик мусора и др.
Библиотека классов .NET Framework. Платформа Mono предоставляет реализацию библиотек WinForms, ADO.Net, ASP.Net и других.
Mono Class Library – было создано множество классов с дополнительной функциональностью специально для Mono, которые выходят за рамки библиотеки базового класса, предоставляемой Microsoft.
Несмотря на предвзятое отношение разработчиков к платформе Mono, многие известные компании используют его. Например:
- Novell использует Mono для клиентских и серверных приложений;
- Unity Technologies использует Mono в инструменте моделирования компьютерных игр Unity 3D. Это дает возможность создавать кросс-платформенные видеоигры;
- Artisteer использует Mono для переноса своего веб дизайнера на другую платформу. Начиная с версии 2.2, можно запустить свое программное обеспечение с помощью Mono.
Так как кросс-платформенных генераторов не так уж и много, а действительно хороших, так вообще по пальцам посчитать можно, FastReports решила создать генератор отчетов для Mono. Тем более, что уже есть готовый популярный генератор отчетов FastReport.Net, на базе которого и был создан FastReport.Mono. Он появился в 2013 году, и на тот момент повторял функционал FastReport.Net.
Однако сейчас, между ними есть различия. Что уж таить, FR.Net значительно продвинулся вперед. Тем не менее FastReport.Mono остается сильным конкурентом в своей нише. И лично я не знаю других генераторов отчетов под фреймворк Mono с таким богатым функционалом.
Что же предлагает FastReport.Mono?
- Удобный и функциональный дизайнер отчетов;
- Подключение к любой БД, и не только. Даже текстовые файлы могут быть источниками данных, не говоря уже об XML и JSON;
- Наличие встроенного скрипта отчета. Что наделяет отчет огромными возможностями. Ведь вы можете использовать библиотеки Mono прямо в отчете, для произведения преобразований данных, а также работать с объектами отчета;
- Веб отчеты, на основе ASP.Net;
Давайте рассмотрим детальнее. Итак, с FastReport.Mono можно работать в разных операционных системах. Ну конечно же, Mono кросс-платформенный фреймворк. Поэтому нам доступны системы: Windows, MacOs, семейство Linux.
Для работы с Mono, а соответственно и с FastReport.Mono подходят следующие среды разработки:
Microsoft Visual Studio (под Windows), MonoDevelop (Windows, MacOs, Linux) и Embarcadero Delphi Prism (Windows, MacOs, Linux).
Языки программирования, для работы с FR.Mono: C#, VB.Net, Oxygene (Embarcadero Delphi Prism).
Язык встроенного скрипта отчета: C#, VB.Net. Все также, как и в FastReport.Net.
Источники данных, доступные по умолчанию: XML, CSV. А для подключения к базам данных нужно использовать источник данных пользовательского приложения, или внешние коннекторы, устанавливаемые в систему.
Интересные особенности генератора отчетов:
- диалоговые формы – перед отображением отчета можно вывести форму с элементами управления. Таким образом пользователь отчета может задать параметры отображения отчета. Например, отфильтровать нужные значения;
- наследование отчетов – возможность использовать отчет как базовый шаблон для других. Это удобно, когда вы делаете много подобных отчетов. Кроме того, изменения в базовом отчете отобразятся во всех наследованных отчетах. Это тоже можно отнести к плюсам. Ведь не нужно изменять большое количество отчетов, если требуются правки базового шаблона;
- Компонент предварительного просмотра отчета – позволяет просматривать отчет и делать его экспорт, отправлять email, а также управлять просмотром отображая план отчета, переходить между страницами;
- Дизайнер отчета может быть вызван отдельно как самостоятельная программа, может быть вызван во время разработки пользовательского приложения, а также во время выполнения пользовательского приложения. Последний вариант очень интересен. По сути вы встраиваете дизайнер в свою программу и даете пользователю возможность редактировать отчеты самостоятельно.
- Продвинутый режим печати – еще один продуманный инструмент. Настройки печати очень богатые.
Веб отчеты реализуются посредством технологии ASP.Net и ASP.Net MVC. Что тут сказать — современный и востребованный подход.
Список возможных экспортов отчета достаточно большой:
- Acrobat PDF;
- Images Jpeg/PNG/BMP/GIF/TIFF;
- RichText;
- Word OOXML (docx);
- PowerPoint OOXML (pptx);
- HTML;
- MHT (web archive);
- Microsoft XPS;
- Excel OLE;
- Excel XML;
- Excel binary (xls);
- Excel OOXML (xlsx);
- Comma separated values (CSV);
- DBF (table);
- Open Document Speadsheet (OpenOffice);
- Open Document Text (OpenOffice);
- Email;
- PostScript;
- Json;
- LaTex;
- FTP;
- Text File / Matrix Printer;
- Clouds (DropBox);
- Clouds (Box);
- Clouds (FastReport Cloud);
- Clouds (GoogleDrive);
- Clouds (OneDrive).
Обратите внимание, последние элементы списка – Clouds – это по сути сохранение отчета в облачные сервисы.
Формат файла отчета – frx, такой же, как и в FastReport.Net. Да, собственно, отчеты совместимы между FR.Net и FR.Mono.
Разработчики, выбирая логотип для FastReport.Mono, проявили остроумие. Судите сами. Вот логотип платформы Mono:
А вот логотип FastReport.Mono:
В заключение хочу отметить, что перенос FastReport.Net на платформу Mono, было стратегически верным решением. Сейчас это актуально как никогда, в контексте «Импортозамещения» и «Гослинукса».
Источник: xn--90aia9aifhdb2cxbdg.xn--p1ai
Rotor и Mono
Аннотация: 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
Рис. 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.
Источник: intuit.ru