C# и .NET без Microsoft Visual Studio
Без альтернативы?
Microsoft .NET Framework продолжает принимать в свои ряды сторонников. И тех, кто переходит под знамена этой платформы с Win32, можно понять. Нет таких "любимых" программистами вещей, как "Ад DLL" (DLL Hell), утечки памяти, написание отдельного кода для каждой версии Windows... За всем - памятью, версиями, ресурсами - следит Framework, и больше не нужно сидеть ночами, выискивая ошибки в диспетчере памяти, написанном позавчера Васей из комнаты напротив.
Поскольку Microsoft является производителем такой замечательной новой платформы, на ее плечи легла обязанность создания средств разработки для нее. И она с этой обязанностью справилась, хотя, я бы не сказал, что очень уж хорошо. Однако факт остается фактом: Visual Studio .NET и C# приобретают все больше сторонников, поклонников и просто пользователей. И в этом нет ничего странного, поскольку после MFC библиотека Windows Forms кажется просто божественной. Но зато и стоит Visual Studio .NET прилично, и штрафы за ее противозаконное использование корпорация-производитель накладывать не забывает. Зато компилятор языка C# совершенно бесплатен. Только, согласитесь, неудобно после Visual Studio переходить на Notepad (пусть даже какой-нибудь Visual Notepad) и вручную описывать создание окошек с помощью Windows Forms, а потом еще и компилировать это все дело из командной строки.
То есть, Visual Studio без альтернативы? Нет, конечно, есть средства разработки от сторонних производителей. Одной из первых на появление C# отреагировала переживающая сейчас не лучшие времена компания Borland и выпустила Borland C# Builder. Но этот продукт тоже коммерческий, хотя стоит он дешевле, чем Microsoft Visual Studio .NET. Но лучше обратим свой взор на бесплатные продукты. Например, на #Develop (так же пишется, а заодно и читается, Sharp Develop), распространяемую на условиях GNU General Public License, т.е. совершенно бесплатно и с открытым исходным кодом в придачу. Найти в интернете эту замечательную среду разработки можно по адресу icsharpcode.net.
#Develop
Прежде всего хочется отметить, что занимает дистрибутив #Develop намного меньше, чем его "старший брат" Visual Studio - всего около 9 мегабайт. Правда, для установки вам все равно придется искать и устанавливать Microsoft .NET Framework SDK и сам .NET Framework. Причем для разных версий .NET Framework (1.1 и 2.0, соответственно) придется скачивать и устанавливать разные версии #Develop и .NET Framework SDK.
Кстати, когда будете себе скачивать #Develop, не пугайтесь, увидев фразу "Release Candidate" - как и большинство бесплатных продуктов, #Develop по определению стабильнее детищ Microsoft и Borland. Поэтому то, что разработчики назвали "кандидатом на релиз", уже является вполне стабильной и полноценной версией продукта.
Внешне #Develop сильно напоминает Visual Studio .NET. Только вот загружается намного быстрее, да и иконка совсем не похожа на знаменитую петлю Мебиуса. Нажав на кнопку "Новый проект" на стартовой странице, обнаруживаю, что с помощью #Develop можно создавать приложения не только на C#, но и на Managed C++, ILAsm и VB.NET. Приятно удивило присутствие среди шаблонов для C# и VB.NET типизированной коллекции и типизированной хэш-таблицы. Как и Visual Studio, #Develop позволяет создавать не только код, но и инсталляционные пакеты в формате Windows Installer (статью про Windows Installer см. в №12 "КВ" за 2006 год). В разделе "Разное" в списке шаблонов можно найти HTML и XML-файлы, для редактирования которых среда полностью поддерживает подсветку синтаксиса.
Впрочем, для тех языков, которые являются основными для #Develop, среда может предложить гораздо больше. Фолдинг (сворачивание) кусочков кода, подсказки и автозавершение кода, преобразование исходного кода из C# в VB.NET и наоборот. Последняя возможность является очень актуальной, т.к. в повседневной практике разработки ПО под .NET часто возникает необходимость в такого рода преобразованиях. Для более быстрой записи кода объявлений, перегрузки методов, установки доступа к свойствам, в среду встроена возможность автоматизировать все эти операции путем выбора из списка действий и шаблонов, который авторы назвали "Code AutoInsert".
Конечно, эти вещи очень помогают в работе и являются ощутимым плюсом в пользу выбора именно #Develop. Однако эту среду было бы невозможно сравнивать с Microsoft Visual Studio и Borland C# Builder, если бы у #Develop отсутствовал дизайнер форм, особенно полюбившийся тем несчастным, кто долгие годы писал пользовательский интерфейс при помощи MFC. Дизайнер форм у #Develop ничуть не хуже аналогичного из Visual Studio. С его помощью можно визуально конструировать формы как для C#, так и для VB.NET, однако в существующей стабильной версии #Develop отсутствует поддержка web-форм ASP.NET. Впрочем, это, мне кажется, не такой уж и большой минус.
Прямо в среду встроена возможность проводить тестирование приложений с помощью NUnit Testing Framework, являющегося, пожалуй, лучшим на сегодняшний день бесплатным решением в своей области. С помощью #Develop можно производить квалифицированное тестирование .NET-приложений, не выходя из среды разработки, что само по себе очень даже неплохо. Еще одним важным плюсом среды является поддержка импорта и экспорта проектов Visual Studio .NET. И импорт, и экспорт проходят вполне корректно.
Еще в среду встроен анализатор сборок (Assembly Analyzer). Он проверяет все сборки, входящие в состав проекта, на предмет совместимости с текущей версией .NET Framework, а также на наличие некоторых ошибок или недочетов. По результатам проверки выводится список ошибок, предупреждений и подсказок, некоторые из них помогают избежать значительных проблем, которые возникли бы при самостоятельном их поиске.
Среди других возможностей #Develop, которых довольно много, хотелось бы остановиться еще на нескольких. Среда умеет показывать предварительный вид автоматически генерируемой справки, которая генерируется по XML-тегам внутри комментариев. Встроенный в среду проводник по классам сделает более удобной навигацию по масштабному проекту, а поддержка закладок и регулярных выражений в поиске и замене могут еще больше упростить работу программиста. В отличие от многих других Open Source-продуктов, #Develop имеет качественную справочную систему, которую также можно просмотреть прямо в среде разработки. А еще с #Develop поставляются две полезные библиотеки - #Report для генерации отчетов и #ZipLib для сжатия данных. Как и сама среда разработки, эти библиотеки совершенно бесплатны и имеют открытый исходный код.
Ну что, впечатлили вас возможности #Develop? Лично я очень рекомендую на него посмотреть. Редко встречаются бесплатные интегрированные среды разработки такого качества. Однако прежде чем приступать к работе, нужно ответить на такой вопрос: так ли уж хорош .NET Framework, чтобы им пользоваться?
.НЕТ или .ДА?
Концепции, вложенные "Майкрософтом" в платформу .NET, далеко не новы, и любой программист сможет назвать разработки, где идеи .NET уже имели вполне качественную реализацию задолго до появления оного. Таким образом, я ничего нового не скажу, если констатирую следующее: платформа .NET - очень удачный коммерческий ход корпорации, тщательно спланированный. Именно этим объясняется то, что платформа получилась многозвенной: CLR - ответ Sun Microsystems на их победу в судебном разбирательстве, связанном с Java; Web Services и ASP.NET - необходимые компоненты воцарения MS в интернете; C# и WinForms - артиллерийский выстрел по Borland (впрочем, на этом я еще остановлюсь подробнее). Заявления о кросс-платформенности и поддержка инициативы Mono - попытка привлечь сторонников POSIX-платформ (всех возможных BSD, Linux, а также QNX, BeOS, Solaris и пр.). Попытка заранее провальная, как мне кажется: слишком уж юниксоиды консервативны. Впрочем, тут нет ничего плохого, - бизнес есть бизнес, а, как говорил Билл Гейтс, "бизнес - увлекательнейшая игра, в которой максимум азарта сочетается с минимумом правил".
Однако очевидные плюсы у .NET, безусловно, имеются, и о некоторых я уже говорил в самом начале статьи. Ко всему прочему, огромным плюсом стало существенное упрощение отладки приложений за счет того, что практически весь код стал интерпретируемым, ведь CLR фактически является интерпретатором, как бы красиво не звучала фраза "Just-In-Time Compiler". В общем-то, больше плюсов от интерпретируемости как бы и нет, лишь уменьшился объем программ, созданных под .NET. Зато теперь для установки программы, созданной под определенную версию .NET, приходится скачивать и устанавливать именно эту версию .NET Framework, а "весят" его дистрибутивы немало. Да и в скорости интерпретируемые приложения, скажем прямо, не превосходят те, что оттранслированы в процессорные операционные коды - с точностью до наоборот, даже заметно. Сколько бы примеров использования DirectDraw из-под .NET ни включила Microsoft в .NET Framework SDK, любой серьезный проект с быстрой графикой, переписанный на Managed C++, начинает выдавать такие тормоза, что даже при наличии вполне мощного компьютера возникают мысли об апгрейде.
Впрочем, для "офисных" приложений, где скорость не так критична, возникают свои сложности. В библиотеке Windows Forms, с помощью которой предлагается создавать интерфейс в .NET, отсутствуют многие необходимые элементы управления. "Не проблема, - скажет программист, - можно сделать свой или найти готовый". Вот тут и начинаются приключения... Отладка отдельного элемента управления WinForms - вещь намного менее приятная, чем отладка целого готового приложения, собранного из этих элементов. А те решения, которые предлагают сторонние производители (например, ComponentOne), по цене нередко превышают общую стоимость разработки проекта на просторах бывшего СССР. Кроме того, у компонентов .NET есть та же проблема, что и у ActiveX: каждый компонент физически представляет собой программный модуль, в котором могут быть свои баги, свои проблемы несовместимости с другими компонентами и т.п. И, раз исходного кода нет, то поправить это зачастую невозможно.
Также хочется отметить, что по сложности развертывания приложения .NET превосходят стандартные приложения Win32. Все сборки (а также файлы справки!) нужно регистрировать в системе, что создает дополнительные сложности и неудобства.
Хотя все же не хочется прослыть клеветником, поэтому я признаю, что .NET - настоящий прорыв в "Майкрософтовких" способах программирования. Но ведь нельзя же пользоваться только теми средствами, которые предлагает лидер! Если идти за лидером, никогда сам лидером не станешь. Хотя, это, конечно, скорее, из области философии.
Теперь я хочу вернуться и рассказать, как и обещал, о роли Borland в создании .NET. Основной язык программирования для этой платформы, C#, разрабатывался под руководством Андерса Хейлсберга, человека, стоявшего когда-то вместе с Филиппом Канном у самых истоков "Борланда". Не потому ли у C# и Delphi так много общего? Компонентная структура, схожая концепция ООП, раздельная компиляция... В обеих разработках четко виден почерк Хейлсберга, которому Microsoft смогла предложить большую зарплату, чем Borland. В общем-то, и C#, и Delphi - продукты "скрещивания" Паскаля и C++, только с разным уклоном. И вот что симптоматично - стоило в новом языке поставить фигурные скобки вместо "begin/end", а в названии - заветное "C", как никто уже не кричит, что этот язык "ламерский". Хотя, с другой стороны, непонятно, у кого поднялась рука назвать продолжением C язык, где и указателей-то нет. И, в общем-то, на сегодняшний день Delphi представляется мне более перспективным, т.к. позволяет разрабатывать приложения и для Win32, и для .NET, в отличие от C#, ориентированного только на .NET. Да и готовых компонентов для Delphi больше.
А что касается .NET, в целом... Лучше всего на вопрос "А надо ли это нам?" ответила сама корпорация Microsoft, выпустившая новую версию своего "Офиса" для Win32, а не для .NET. Хотя деньги в .NET продолжают исправно вкладываться, и, таким образом, будущее у этой платформы, похоже, есть.
Вадим СТАНКЕВИЧ