Mono, или .NET кросс-платформенный

Если платформу .NET сравнивают с Java, то обычно в качестве главного её минуса называют привязку к платформам семейства Windows. Упрёк, в общем-то, вполне справедливый, но есть вариант кросс-платформенного запуска .NET-приложений. И этот вариант называется Mono.


Что такое Mono для пользователя?

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

Что сегодня может предложить Mono? Всё зависит от того, с чьей точки зрения смотреть: программиста или пользователя. Для пользователя Mono предлагает, прежде всего, среду исполнения программ, скомпилированных в виде IL-кода .NET, причём предоставляет как компилятор реального времени (JIT Compiler, Just-In-Time Compiler), так и опережающий во времени компилятор (AOT Compiler, Ahead-Of-Time Compiler). Так что, по большому счету, самое главное у пользователя будет - если понадобится выполнить файл, содержащий в себе IL-код, Mono будет как нельзя кстати. Что касается процессорных архитектур, для которых поддерживается перекомпиляция IL-кода, то поддерживаются 32-битная архитектура MIPS; 32- и 64-битные архитектуры x86, SPARC, PowerPC, ARM, S390; а также IA64. Для ряда других платформ, для которых не поддерживается компиляция кода, он может исполняться в режиме интерпретации, что, естественно, существенно замедляет работу приложения. Но, как говорится, на безрыбье - и рак рыба, так что с потерей скорости нередко приходится мириться. С этим несколько мирит тот факт, что виртуальная машина Mono является свободной, то есть имеет открытый исходный код и является бесплатной. Помимо поддержки, собственно, .NET'а, Mono предлагает также поддержку Microsoft Silverlight в рамках стоящего несколько особняком проекта Moonlight, однако он, безусловно, заслуживает отдельного разговора.

Но гораздо интереснее говорить о Mono не с точки зрения пользователя, а с точки зрения программиста, ведь именно для программистов эта платформа предлагает ряд совершенно уникальных вещей. Впрочем, давайте обо всём по порядку.


Что такое Mono для программиста?

Mono - это всё-таки не совсем .NET, что становится понятно, когда начинаешь читать о программировании под Mono. Но основным языком программирования для этой платформы, как и в случае .NET, является C#. Причём, что приятно, поддерживается не просто какой-нибудь безнадёжно устаревший ранний стандарт этого языка, а C# 3.0. Вполне возможно, что к тому времени, как эта статья появится в печати, разработчики, работающие в рамках проекта Mono, уже представят поддержку четвёртой версии стандарта этого языка в рамках стабильной ветки проекта. Однако если она вам так сильно нужна, вы можете взять компилятор C# 4.0 от проекта Mono уже сейчас на свой страх и риск.

Что ещё, кроме компилятора C#, может предложить Mono программисту? Во-первых, если уж разговор зашёл о компиляторах, то стоит упомянуть и компилятор второго основного языка для платформы .NET - Visual Basic .NET. Что касается его версий, то ситуация полностью аналогична таковой с C#. Поддерживается также библиотека Windows Forms 2.0 и частично технология LINQ (правда, та её часть, которая касается взаимодействия с SQL, всё ещё остаётся нереализованной). К сожалению, поддержка WPF в Mono пока ещё не реализована до конца, хотя в этом направлении также ведётся работа в рамках экспериментального проекта Olive. Впрочем, до того момента, когда Mono будет поддерживать все возможности третьей версии Microsoft .NET Framework, ещё очень далеко.

Что касается web-программирования (а, учитывая специфику проектов, которые реализуются с помощью .NET у нас в стране, именно эти возможности наверняка будут интересовать разработчиков в первую очередь), то здесь всё тоже на достаточно неплохом уровне. Mono поддерживает полностью спецификацию ASP.NET 1.1, а также большую часть ASP.NET 2.0. (собственно, как утверждают сами участники проекта, не хватает только WebParts и нескольких мелких функций). Ещё, правда, не поддерживается Web Services Enhancements, но, думаю, это не такая уж большая плата за возможность запуска ASP.NET-приложений из-под Apache под Linux'ом.


Программирование на Mono под Linux и другие системы

Впрочем, самые интересные возможности Mono касаются не столько поддержки технологий, придуманных в недрах корпорации Microsoft и ориентированных на работу под Windows, сколько возможностей создания .NET-приложений под Linux и другие операционные системы.

Самое существенное отличие Mono от .NET заключается в наличии поддержки различных GUI-тулкитов. Это, в общем-то, пришло именно с POSIX-платформ, где, в отличие от Windows, наблюдаются разброд и шатание в плане используемых графических оболочек. Mono, продолжая эту славную демократическую традицию, предлагает пользователю выбирать между несколькими GUI-библиотеками, в частности, между "родной" WinForms и множеством других, ориентированных не на Windows, а на другие операционные системы.

Самая известная из этих GUI-библиотек называется GTK# и базируется на ещё более известной библиотеке GTK+, которую использует огромное число Linux-разработчиков. Фактически, GTK# представляет собой объектно-ориентированную обёртку для .NET над написанной на C библиотекой GTK+. Разработчики GTK# сделали всё, чтобы те, кто активно работает с GTK+, чувствовали себя комфортно при программировании приложений с использованием Mono. Ну а благодаря переносимости основной библиотеки и приложения, написанные на GTK#, могут запускаться не только под Linux'ом, но и под Windows и MacOS X. Выглядеть они там, конечно, будут не так хорошо, как родные для платформы приложения, но, в принципе, в ряде случаев это вполне разумная плата за быстро реализуемую кросс-платформенность.

Другая библиотека, Qyoto, осуществляет привязку к Qt, на которой пишется огромное количество интерфейсов самых разнообразных приложений. В принципе, может быть, более удачной мыслью будет использовать библиотеку Qt4Dotnet, которая делает примерно то же самое. Но, в общем-то, здесь уже всё зависит от того, что именно вам нужно. Что касается переносимости между различными операционными системами, то здесь всё, пожалуй, даже ещё лучше, чем в случае с GTK#.

Следующий GUI-тулкит, который наверняка будет интересен тем, кто хочет портировать своё приложение на "Мак", называется Cocoa#. Этот тулкит базируется на родном API системы MacOS X, Cocoa, и позволяет .NET-приложениям выглядеть и вести себя точно так же, как и "родным" для этой платформы приложениям. Поскольку, пожалуй, именно эта программная платформа больше всех остальных нуждается в том, чтобы приложения под неё выглядели соответствующе, то наличие такого решения можно только приветствовать и даже простить ему полное отсутствие кросс-платформенности.

Ещё один весьма интересный графический тулкит для Mono называется wxNet. Как несложно догадаться, он базируется на популярной библиотеке wxWindows. Работает этот тулкит, как и сама библиотека, на множестве различных программных платформ, и при этом приложения выглядят совершенно так же, как и "родные" приложения для данных платформ. Но, правда, разработчик несколько ограничен в своих возможностях по созданию собственных элементов управления, поскольку их создание является весьма трудоёмкой задачей.


Дополнительные инструменты

Предлагается ряд дополнительных инструментов для разработки приложений, потому что, сами понимаете, один только компилятор C# никого сегодня не устроит.

Собственно, среда разработки одна - MonoDevelop. О ней можно рассказывать долго и со вкусом, но сейчас я этого делать не стану, потому что она заслуживает отдельного обзора. Если вы больше любите Visual Studio, то можете разрабатывать Mono-приложения для разных платформ и с её помощью. Правда, инструменты, интегрирующие функциональность такой разработки в среду от Microsoft, не совсем бесплатны, но за всё хорошее в этой жизни нужно платить. Ещё один чрезвычайно интересный инструмент - это MonoTouch, позволяющий писать приложения под iPhone с использованием возможностей .NET. Он тоже платный (и, надо сказать, не самый дешёвый), однако всё-таки, думается, писать для iPhone на C# для большинства программистов будет проще и удобнее, чем на Objective C.


Резюме

Думаю, мы ещё вернемся на страницах "Компьютерных вестей" к этому замечательному проекту, который в самом буквальном смысле прямо на наших глазах делает невозможное возможным, однако на сегодня достаточно. Надеюсь, что Mono, по крайней мере, заинтересовал вас.

Вадим СТАНКЕВИЧ,
[email protected]

Версия для печатиВерсия для печати

Номер: 

50 за 2009 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!