Светлое будущее

Необычные названия “.NET” (читается как “dot net”) и “Java” встречались многим, но мало кто знает, что за ним стоит. А ведь .NET усилено раскручи­вается MS как платформа нового поколения, призванная заметно облегчить жизнь программистам, ну а Java уже используется сотнями тысяч разработчиков. Так представляют ли эти технологии интерес для обычных программистов?

Уже прошлое
Как известно, ОС Windows берет свое начало в середине 80-х, в эпоху Си и Паскаля. Сама Windows была написана на Си, но при разработке ее API Microsoft ориентировалась на новые языки. К середине 90-х на смену процедурным Си и Паскалю пришли объектно-ориентированные C++ и Object Pascal. Идея ООП быстро завоевала популярность среди программистов, поскольку она заметно упрощала проектирование и разработку средних и больших проектов. Однако архитектура новой Windows 95 оставался лишь развитием архитектуры Windows 3.0.
Объектно-ориентированной стала архитектура серверной Windows NT, но на API это никак не отразилось — он оставался неудобным и не позволял программистам использовать при работе с операционной системой все преимущества ООП. Как компромисс, MS включила в новую ОС технологию COM (Component Object Model), позволяющую использовать некое подобие ООП во всех языках, включая ассемблер. Через COM, например, организован API DirectX. Однако использовать эту интересную технологию довольно сложно, и она не стала широко популярна.

В это время Borland выпустила Delphi 1.0 с очень удачной IDE и библиотекой классов VCL (Visual Component Library), представляющей программистам гораздо более удобные средства программирования под Windows. За удобство приходилось платить размером готовых программ (библиотека VCL не входит в поставку ОС, поэтому ее необходимо “упихивать” в программу) и скоростью их работы. Несмотря на это, Delphi стала бешено популярной, особенно среди начинающих программистов. Ответным шагом MS стало создание библиотеки MFC (Microsoft Fundamental Classes). Работать с нею было сложнее, зато программы получались более компактными и быстрыми. Но все это были лишь объектно-ориентированные надстройки над старым WinAPI. Все последующие версии WinAPI также были лишь развитием все того же API Win95. Так, например, для создания окна в Win2k3 необходимы все те же 40 строк на C++, что и в Win95, хотя архитектуры этих ОС сильно отличаются. И дело здесь не в лени MS, просто основной стратегией разработки любой распространенной ОС прежде всего является обеспечение совместимости — слишком велико количество уже существующих программ.

Java
С 1991 года подразделение Green корпорации Sun разрабатывало технологию, позволяющую связывать различные бытовые приборы — от холодильника до компьютера. Очевидной проблемой являлось многообразие аппаратных и программных платформ, и, как следствие, невозможность написания универсального ПО. Так появилась концепция виртуальной машины (ВМ) — программы, выполняющей (интерпретирующей) специальный байт-код, не зависящий от конкретной платформы. Достаточно написать версию ВМ для конкретной платформы, и все ПО, написанное для этой ВМ, будет прекрасно работать на данной платформе (известный принцип “write once — run everywhere”).
В 1995 году концепция получила воплощение в платформе Java, вобравшей в себя самые прогрессивные технологии того времени. Платформа изначально была объектно-ориентированной, имела богатые возможности для работы с Web, сетями и базами данных. Назвать же свою разработку в честь сорта кофе авторов подвигла любовь к этому напитку. (Интересно, какое название получилось бы у русских программистов?)

Специально для новой платформы был создан одноименный язык — Java. Он представляет собой урезанную версию C++ (из него исключена возможность структурного программирования). В Java абсолютно не допускается объявление функций и переменных вне класса. То есть даже чтобы написать классическое “Hello, World”, необходимо определить главный класс приложения HelloWorld с методом main, в котором надо вызвать метод println объекта System.out:
public class HelloWorld
{
public static void main (String args[])
{
System.out.println («Hello, World!»);
}
}
В java-файле может содержаться только один класс, причем его имя должно соответствовать имени файла. Эти кажущиеся излишними ограничения на практике заметно облегчают проектирование и разработку программ, так как теперь программа является набором классов с жестко установленными связями между ними, а не смесью из классов, функций и глобальных переменных. При компиляции каждый java-файл компилируется в одноименный class-файл, а те, в свою очередь, затем сжимаются в jar-файлы — zip-архивы с классами данного приложения и метаданными (информация об авторе, версии, комментарии и так далее). Библиотеки представлены в виде пакетов — набора классов, выполняющих схожие функции. Например, абстрактные классы OutputStream и InputStream входят в пакет java.io.
Схожесть Java с языком C++, поддержка перспективных технологий, возможность запускать однажды написанную программу на любой платформе — все это обеспечило новой платформе популярность среди программистов, особенно занимающихся Web-программированием. Многоплатформенность, малый размер программ, высокий уровень безопасности и поддержка Netscape сделали Java самым популярным способом добавления динамичности HTML-страницам во второй половине 90-х.
Также популярности этого языка способствовало свободное распространение компанией Sun спецификаций Java-машины, то есть подробных описаний ее архитектуры. Это стимулировало появление сторонних компиляторов с различных языков в байт-код Java. К концу 90-х были созданы компиляторы Lisp, SmallTalk, C, C++, Pascal и других популярных языков. Но поскольку платформа изначально не была рассчитана на поддержку такого разнообразия, а разработкой в основном занимались энтузиасты, ничего, что было бы удобнее самого Java, не получилось. Сейчас язык Java является стандартом при программировании под платформу Java.
Существуют три варианта платформы, отличающихся лишь набором библиотек: Java 2 Mobile Edition (J2ME) — ограниченная версия для использования в бытовой технике (именно она используется в сотовых телефонах), Java 2 Standard Edition (J2SE) для стандартных “настольных” программ и апплетов, а также Java 2 Enterprise Edition (J2EE) — для создания серверного обеспечения уровня предприятия.

.NET
Свободное распространение спецификаций java-машины стимулировало появление реализаций Java-ВМ от сторонних разработчиков. Особенно преуспела в этом деле IBM — ее реализация считается самой быстрой. В 1998 году выпустила свою версию и Microsoft. Как обычно, не без скандала. Версия от MS заметно отступала от стандарта и поддерживала Windows-ориентированные возможности, недоступные в других ОС. Была создана версия языка Java — J++, также не соответствующая стандартам и ориентированная на Windows. Все это послужило поводом для иска со стороны Sun Microsystems к Microsoft. В результате MS была вынуждена отказаться от реализации своих “прогрессивных” идей в рамках чужой технологии. Но уходить с этого перспективного рынка ей не хотелось… В 2002 году появился первый релиз наследницы и конкурентки Java — платформы .NET.
В основу новой технологии положена та же концепция виртуальной машины, в терминологии .NET называемая CLR (Common Language Runtime). Основным новшеством .NET является технология JIT (Just In Time Compilation), впервые реализованная MS еще в своей версии Java. Суть этой технологии в том, что байт-код не выбирается побайтно для выполнения в процессе работы программы, а компилируется при первом запуске в машинный код, который затем и выполняется. Небольшая задержка при загрузке компенсируется высокой скоростью работы, часто не уступающей скомпилированным программам на C++. Более совершенную JIT-технологию — Java HotSpot — вскоре разработала и Sun, однако только в .NET динамическая компиляция распространяется на библиотеки, компилирование которых заметно увеличивает скорость выполнения приложений.
В отличие от Sun, MS открывает спецификации своей технологии лишь частично — в объеме, достаточном для создания компиляторов. К созданию ВМ от сторонних разработчиков она относится крайне отрицательно, а сама выпускает версии .NET только для Windows NT/2k/XP/2k3 (.NET Framework) и для FreeBSD (Reactor). Однако с момента выхода платформы ведется работа по созданию ее свободной версии для Linux. Наиболее успешные проекты — dotGNU и Mono, однако 100% совместимости они не обеспечивают. Очевидно, что в этом отношении .NET проигрывает Java.
Еще одной частью .NET является CLI (Common Language Infrastructure) — набор стандартных библиотек и типов, которые доступны как из C#, основного языка платформы, так и из любого другого языка для .NET. Платформа изначально создавалась с расчетом на поддержку большого количества языков. Одна только MS создала компиляторы C#, VB.NET, C++, J# и Fortran. Общее же количество поддерживаемых языков уже более 40, что является несомненным достоинством, и из каждого языка полностью доступны все библиотеки и стандартные типы. Сам по себе C# является лишь ко­пией Java с небольшими добавлениями. Самым спорным из них является возможность вызова из .NET-программы функций Windows API: с одной стороны, программист получает широкие возможности при прямой работе с ОС, с другой — теряется всякая кроссплатформенность.
Скомпилированные проекты распространяются в форме сборок — некого подобия jar-файлов с расширенной информацией о правах доступа, контрольных суммах (для обеспечения целостности) и версии сборки. Сборки приложений распространяются в виде exe-файлов, а библиотек — в виде dll-файлов (опять ориентация на Windows).

Разработка
Для каждой новой версии платформ выпускаются бесплатные SDK (последние — JSDK 1.5 и .NET Framework SDK 2.0), состоящие только из консольных компиляторов и набора библиотек. Конечно, писать код можно и в Блокноте, но для нормального программирования лучше найти (точнее, выбрать) специальный редактор или IDE, которых существует огромное множество. Для небольших проектов проще выбрать какой-нибудь универсальный бесплатный редактор с подсветкой синтаксиса — Syn (syn.sourceforge.net) или мой любимый PSPad (www.pspad.com). Подсветка Java в них есть изначально, а подсветку C# нетрудно настроить самостоятельно.
Для серьезных проектов и обучения лучше выбрать какую-либо IDE. Заточенные под конкретный язык, они всегда поставляются с документацией, примерами и вспомогательными утилитами. При программировании на Java можно выбирать из Eclipse, IDEA и JBuilder. Кстати, все три написаны на Java, поэтому будут работать практический на любой платформе.
Выбор IDE для программирования под .NET гораздо проще — если вы пишете на Pascal’е, то ставьте Delphi for .NET 2005 или Delphi 8, если же на C# или VB.NET — MS Visual Studio 2001—2003-2005. Интересно, что сама Delphi 2005, как и все последние IDE от Borland, написана на Java. Также для программирования под .NET (как и под WinAPI, DirextX и так далее) желательно раздобыть MSDN — сборник всех статей и описаний ко всем технологиям от MS (англоязычный). Конечно, можно пользоваться online-версией на msdn.microsift.com, но лучше разыскать ее на дисках — в Кирове реально найти довольно свежую версию (за апрель 2003) на трех дисках.

Выводы
Уже сейчас эти технологии довольно популяры и распространены, а будущее, несомненно, за ними — ведь эти технологии продвигают такие гиганты, как Microsoft, Sun и IBM. Так что, если вы не хотите, чтобы ваше профессиональное развитие остановилось с развитием WinAPI, обратите внимание на одну из этих платформ, благо Рунет полон книг и статей на эту тему. А начать можно с www.rsdn.ru, www.dotsite.spb.ru и www.juga.ru.

При написании статьи использовались материалы с сайта www.wikipedia.org.


Рекомендуем почитать: