Общедоступная бета-версия нового языка программирования Microsoft С#

Лучшим языком для коммерческой разработки всегда считался С++, но сейчас у перегруженных работой программистов не хватает времени и терпения на нудные циклы «написание кода — компиляция — отладка», многократно повторяемые из-за бесчисленных утечек памяти и прочих неявных ошибок, часто допускаемых при написании кода на С++. Несмотря на то что программировать на С++ под Windows стало намного проще, темпы работы, задаваемые Internet, не оставляют программистам времени на «борьбу» со средствами разработки.

Java по сравнению с С++ сокращает цикл разработки, лучше защищает код и обеспечивает возможность запуска приложений на многих платформах. Java не идеален, он разительно отличается от С++, и в большинстве случаев подходит для Windows не лучше, чем перчатка для ноги. И все же Java остается единственным разумным выбором для корпоративных проектов.

Массовое бегство разработчиков Windows-приложений в стан Java не оставалось без внимания Microsoft, которая поспешила выпустить открытую предварительную бета-версию комплекта средств разработки для платформы .NET. Загрузив эти 86 Мбайт, можно посмотреть, как будет выглядеть Windows, и ознакомиться с компилятором С# — нового языка программирования, название которого произносится как «си-диез».

Эта вышедшая из-под пера Microsoft вариация на тему С++ — настоящий бальзам на раны измученных разработчиков Windows-приложений. В отличие от С++ и Java, C# позволяет без затруднений осуществлять доступ к внутренним сервисам Windows — сетевым объектам, пользовательским интерфейсам и функциям связи с Internet. Как и Java, C# существенно повышает стабильность за счет автоматического управления ресурсами и предотвращения распространенных ошибок программирования.

Тем, кто уже знает С++, С# будет выучить гораздо проще, чем Java. C# — это стандартизованный язык, причем находящийся в ведении не Microsoft, а Европейской ассоциации производителей компьютеров (ECMA), — той же независимой организации, которая контролирует JavaScript. И хотя в предварительной версии С# на это нет и намека, Microsoft уже сообщила о намерении перенести .NET и С# на платформы, отличные от Windows.

Критики предупреждают, что С# и .NET пока находятся в стадии предварительной бета-версии, то есть всего на небольшой шажок ушли от состояния vaporware — продукта, который только-только начали разрабатывать, и который может никогда и не появиться на рынке, хотя его уже вовсю рекламируют. Так или иначе я пользовался им в течение почти месяца — предварительная бета-версия функционирует лучше, чем иные из коммерческих компиляторов. В сущности, компилятор работает настолько хорошо, что разработчики уже обмениваются кодом на С# в форумах Usenet и Web, например, на сайте csharpindex.com.

Чем плох С++?

Создатели Java критикуют С++ за его свободную архитектуру, позволяющую осуществлять неограниченный доступ к системным ресурсам и модифицировать сам язык. Но С++ — язык столь же коварный, сколь и могущественный. Ошибки программирования могут привести к утечкам ресурсов, порче данных в памяти и другим проблемам, с трудом поддающимся отладке.

Из Java ради обеспечения стабильности приложений исключены такие возможности С++, как ручное выделение памяти, указатели (прямой доступ к памяти), передача аргументов по ссылке и переопределяемые операторы. Взамен разработчики получают более простой способ декларации и использования объектов, автоматическое управление памятью, кроссплатформенную переносимость и огромную библиотеку готовых Java-объектов.

Блестяще спроектированная архитектура Java коренным образом изменила модель разработки корпоративного программного обеспечения. Но этого удалось добиться лишь благодаря существенному отклонению от синтаксиса С++, из-за чего привычные к нему корпоративные разработчики принимали Java довольно вяло.

С# же, в отличие от Java, является C++, дополненным Java-подобными чертами — автоматическим управлением памятью и жизненным циклом объектов, интерпретируемым исполнением, легкостью доступа к внешним объектам и упрощенной процедурой создания объектов. Полезные возможности С++, исключенные из Java, — переопределяемые операторы и косвенная передача аргументов — в С# сохранены. Указатели, которые из Java исключены как самая опасная из функций С++, из С# не удалены, но «посажены в клетку»: их можно использовать лишь в секциях кода, помеченных как «ненадежные».

Переход с С++ на С# подобен переключению с ручной коробки передач на автоматическую. В С++ программист должен самостоятельно заботиться о выделении и освобождении памяти для каждого объекта, тогда как С# делает это автоматически. Память, занимаемая объектом в С#, высвобождается с прекращением использования объекта — срабатывает функция сборки мусора, основное преимущество Java.

В С++ для получения доступа к системным сервисам необходимо предварять код длинным списком подключаемых файлов, большинство из которых недоступно программе в виде объектов. В С# системные сервисы прозрачно упаковываются в С#-совместимые объекты. Объекты С++ сложно конвертировать в формат компонентной объектной модели Windows Component Object Model (COM), в С# же объекты автоматически преобразуются в формат модели .NET и становятся доступными из любого языка семейства .NET. При этом .NET-объекты описываются с помощью синтаксиса, принятого в применяемом языке. Слой .NET обеспечивает работоспособность объектов в любом из языков, поэтому для их использования не требуется какое-либо преобразование данных или подключение в виде внешних объектов.

Если прибегнуть к аналогии с автоматической коробкой передач, то самое сложное в освоении С# — это научиться не жать на сцепление и не хвататься за рычаг переключения скоростей. Привыкнув, вы поймете, что «управлять» С# гораздо легче и безопаснее, чем С++. В то время как Java требует от разработчиков на С++ учиться по-новому выполнять привычные задания, переход от С++ к С# заключается главным образом в избавлении от назойливого кода управления памятью и объектами, который приходится вносить в каждое из приложений на С++. Благодаря возможности использования указателей и передачи аргументов по ссылке программисты на С# имеют прямой доступ к ресурсам вне структуры .NET, таким как 32-разрядные динамические библиотеки Windows.

Мы бы ни за что не стали переносить какое-либо серьезное Windows-приложение с С++ на Java, но перенос с С++ на С#, пусть и поэтапно, вполне осуществим. Полученное приложение приобретет обещанную С# стабильность и переносимость в пределах платформы .NET. Microsoft, похоже, немало позаботилась об обеспечении прямого доступа к технологиям Windows, даже к исключенным из .NET, к которым относится COM.

Если не брать в расчет модули, требующие максимальной производительности (они по-прежнему остаются уделом С++), то переход на С# — лучший путь приспособления существующих приложений к .NET. Как мне кажется, .NET-расширения Visual C++ делают интеграцию с кодом на С# довольно простой задачей.

Вперед!

Разработчиков порадует уже одно то, что С# до чрезвычайности похож на С++. С# появился на свет потому, что Microsoft нужен был Java-подобный язык для .NET, но о самом Java не могло быть и речи.

Программисты оценят то, что в С# сохранено большинство «хитроумных» и мощных функций С++. Независимо от мотивов Microsoft понравится специалистам и то, что C# попал в руки ECMA.

Поскольку эта организация заведует языком, значит, выпускать средства разработки на С# и расширять его будет не только Microsoft.

Компаниям, создающим средства разработки на С#, не придется приобретать лицензию на него у Microsoft, а следовательно, и стоимость самих средств будет не слишком высока. Напротив, Sun отказалась от стандартизации Java и совершенствует его единолично.

Впрочем, Microsoft начинает охоту за корпоративными пользователями нового языка с отставанием от Sun, поскольку .NET, к которой С# привязан, работает пока лишь в Windows. Некоторое преимущество Microsoft дает многоязыковость .NET. Даже бета-версия позволяет писать приложения на С++, С#, Visual Basic, JavaScript и Visual FoxPro. Все они при компиляции генерируют промежуточный байт-код на языке под названием IL (intermediate language — промежуточный язык) и могут пользоваться общим набором архитектурно-независимых типов данных.

Отметим, что разработку Windows-приложений, требующих максимальной производительности, по-прежнему придется вести на С++, так как он останется единственным языком, компилирующим непосредственно в команды микропроцессора, а не в IL.

.NET позволяет свободно смешивать несколько языков, так как понятий «объекты VB», «объекты C#» или «объекты JavaScript» в .NET не существует — есть лишь объекты .NET, одинаково подключаемые ко всем языкам.

Как правило, разработчики выбирают для каждого проекта какой-то один язык, чтобы обеспечить возможность последующего совмещения кода, написанного разными программистами. Над .NET-проектом могут одновременно работать программисты, использующие C#, VB, C++ и JavaScript — слой .NET позволит без затруднений соединить все модули.

Отрадно и то, что готовятся и другие языки. Независимые производители уже пообещали выпустить компиляторы Cobol и Eiffel для .NET: разработчики приложений для этой платформы смогут писать на языке, который они знают лучше всего. Это позволит сократить сроки подготовки проекта и снизить денежные затраты на обучение; код станет чище, а программистам для достижения высокой продуктивности не придется работать в постоянном напряжении.

Основная задача С# — предоставить программистам на С++ доступ к структуре .NET. И это немаловажно, поскольку .NET предстоит стать сердцем корпоративных Windows-приложений. На прошедшей в Орландо конференции профессиональных разработчиков, где была представлена .NET, Microsoft четко дала понять, что .NET не только не привязана к какой-либо аппаратной платформе, но и легко переносится в различные операционные системы.

Microsoft хранит молчание относительно планов по переносу .NET: понятно, что первоочередная задача компании — выпуск .NET для Windows. Но я готов поспорить, что вскоре после этого появится .NET для Solaris и Linux. Как только .NET расширит свои владения за пределы Windows, C# станет реальным конкурентом Java. До тех пор С# останется значительно улучшенным С++ для создания корпоративных Windows-приложений. Не так уж плохо для начала.


Стройплощадка распределенного предприятия

На распределенном предприятии, основанном на .NET, не будет существовать проблемы интеграции приложений. .NET задумывалась как структура, в которой все основано на взаимодействии, а Internet выполняет роль средства объединения взаимодополняющих прикладных служб различных производителей в решения, приспособленные для конкретных нужд клиентов или служащих. Благодаря Internet и XML прикладные службы могут быть интегрированы и доставлены клиенту независимо от их местонахождения, языка программирования, на котором они написаны, и операционной системы, на которой они работают.

Однако для осуществления этого замысла необходимы новые средства разработки. Роль инструментария для построения .NET-совместимых приложений на платформе Windows выполняет Visual Studio .NET, начало поставок которой намечено на первую половину 2001 года. В комплект войдут средства создания, развертывания и сопровождения не только традиционных Windows-приложений, работающих на автономных машинах, но также распределенных Web-приложений масштаба предприятия и сервисов среднего уровня под названием Web Services, функционирующих в Internet на серверах, управляемых Windows.

Visual Studio .NET позволит создавать Web Services, интегрируемые с другими Web Services при помощи стандартов Internet. Предприятия, полагающиеся на Windows, смогут быстро строить Web-приложения, используя сочетание разработанных независимыми разработчиками служб и собственного программного кода. Таким образом, у предприятий есть возможность выбирать лучшие из служб независимо от платформы их разработки и строить на их основе произвольные решения для конечных пользователей при меньших, чем сейчас, временных и денежных затратах.

Связующим звеном, позволяющим .NET интегрировать приложения, написанные на различных языках и платформах, является XML. В Visual Studio .NET войдут основанные на XML средства программирования, которые обеспечат упомянутую интеграцию, не требуя от программистов изучения собственно XML. Более того, доступ к любой функции, написанной на языках Visual Studio — Visual Basic, Visual C++, C# или Visual FoxPro, — можно будет получить так же, как к Web Service.

При компиляции кода будет автоматически генерироваться описывающий функцию XML-файл, публикуемый на Web-сервере. Другие Web-приложения смогут обращаться к функции посредством обычного адреса URL. Функция будет автоматически отправлять и принимать XML-сообщения, например, передавать информацию о заказе из электронной витрины на внешнюю службу обработки кредитных карт.

Visual Studio .NET обещает упростить разработку распределенных корпоративных приложений и в других отношениях. Объектно-ориентированный, поддерживающий буксировку интерфейс Visual Studio можно будет применять для создания Web-приложений: разработчики будут просто буксировать Web Services в свои программы. В комплект войдут также настраиваемые архитектурные шаблоны стандартных корпоративных проектов; пользуясь этими шаблонами, руководители проектов смогут самостоятельно конфигурировать меню, диалоги и компоненты, принимая лучшие решения и ограждая менее опытных разработчиков от разорительных ошибок. Visual Studio .NET предоставит единую интегрированную среду разработки, позволяющую при помощи одного и того же интерфейса отлаживать код на различных языках, в том числе на HTML и языке сценариев.

Кроме того, Visual Studio .NET добавит к Visual Basic ряд объектно-ориентированных возможностей, улучшающих производительность и масштабируемость написанных на нем приложений.

В числе новых особенностей — поддержка переопределения, полиморфизма, наследования реализации; более совершенный механизм обработки исключений; возможность создания независимых потоков для задач, способных затормозить работу приложения. Благодаря этим усовершенствованиям предприятия смогут нанимать на некоторые Web-проекты программистов на Visual Basic, которых достаточно много и которым можно платить меньше, чем специалистам по другим языкам.

Ну и наконец, Visual Studio .NET добавляет к существующим новый объектно-ориентированный язык: С# способен намного снизить стоимость и сократить сроки осуществления проектов Web-разработки на платформе Windows. Но независимо от применяемого языка программирования Visual Studio .NET позволит предприятиям создавать мощные, настраиваемые Web-приложения более быстро и по меньшей стоимости.


Кто победит: C# или Java

Microsoft создает C#, противопоставляя его Java, который определяет ориентированную на язык оболочку для корпоративных приложений. Многие из достоинств C# связаны в первую очередь с не зависящей от языка оболочкой .NET

ХарактеристикаКак работает JavaКак работает C#Преимущества C#
Автомати-ческое управление памятью и объектами (сборка мусора)Встроено в язык Java и JVMВыполняется при работе .NETИспользует память и объекты вместе со всеми приложениями .NET вне зависимости от языка
Совместное использование объектовЛокальное совместное использование через Java-Beans, удаленное — через EJBПрозрачно управляется при работе .NETМожет обращаться к локальным и удаленным объектам, написанным на любом языке .NET
Гибкая упаковка кодаКлассы и пакеты JavaКомплекты .NETНет
Независимость от аппаратного обеспеченияБайт-код Java интерпре-тируется JVM или компилируется во время загрузкиРазделы байт-кода IL компилируются непосредственно перед их исполнениемНамного меньшее время загрузки, более эффективное использование памяти
Доступ к системным службамСтандартные классы JavaСтандартные комплекты .NETОбщий интерфейс служб, совместно используемый всеми языками .NET
Вызов функций в исходном кодеJNI; исходный код должен быть изменен.NET обеспечивает доступ к неизменяемым объектам .NET COM и Windows DLLПростое взаимодействие с существующими Windows-приложениями, удобный поэтапный переход на .NET
Наследование объектовВстроено в язык JavaПишется на C#, реализуется при работе .NETМожет наследовать и расширять объекты, определенные на любом языке .NET

Microsoft C#, бета-версия

C# упрощает доступ к системным службам, в то же время делая приложения менее подверженными ошибкам. Со временем C# станет многоплатформенной, основанной на стандартах альтернативой Java, но уже сейчас С# — это более «умный» и безопасный С++ для Windows. Слой .NET объединяет модули на VB, JavaScript, C++ и C# настолько хорошо, что руководители .NET-проектов могут совершенно смешивать код, написанный на различных языках

Достоинства: спецификация языка контролируется ECMA; доступ к широкому спектру объектно-ориентированных системных служб; возможность выбора между интерпретацией, компиляцией в период исполнения и предварительной компиляцией

Недостатки: значительное ухудшение производительности и перерасход ресурсов по сравнению с C++; неопределенность планов разработчика по переносу на платформы, отличные от Windows

Цена: не объявлена

Платформы: рассматриваемая бета-версия функционирует только в Windows 2000

Поставки: срок появления коммерческой версии не определен