История развития вычислительной техники подарила нам огромное количество языков и технологий программирования. К сожалению, они часто оказались практически несовместимы друг с другом. Разумеется, если речь идет об автономных программах, можно ограничиться одним инструментарием и жить спокойно. Но стоит погрузиться в мир веб-разработки, как становится очевидно: для создания полноценных интернет-приложений необходимы самые разные языки и подходы.
Команда Microsoft взяла на себя амбициозную задачу - кардинально изменить эту ситуацию. В 2000 году мир увидел первый вариант новой революционной технологии, получившей гордое имя Microsoft .NET (произносится по-русски как «Дот-Нэт»).
Microsoft .NET представляет собой инновационную платформу, предназначенную для создания как классических автономных приложений, так и сложных решений для Интернета. На старте пути в рамках этой экосистемы были доступны лишь несколько языков программирования:
- Microsoft C#;
- Managed C++;
- Microsoft Visual Basic .NET;
- Microsoft Visual J# .NET;
- JScript .NET.
Сегодня арсенал таких языков насчитывает десятки вариантов. Однако безусловным лидером и основным инструментом остается C# (читается «Си-Шарп»), созданный специально под нужды платформы .NET. Именно этот язык предоставляет полный доступ ко всем возможностям новой технологии от Microsoft.
Духовным отцом языка C# и всей концепции .NET стал выдающийся специалист Андерс Хейлсберг, известный прежде всего как автор легендарного Турбо Паскаля и Delphi. Перешед из Borland в Microsoft, он с энтузиазмом перенес в проект .NET все самые лучшие решения Delphi (кстати, именно там появились компоненты - главное богатство технологии .NET).
В рамках Microsoft .NET была создана чрезвычайно удобная интегрированная среда разработки Microsoft Visual Studio .NET, а также ключевой элемент инфраструктуры - среда выполнения программ Microsoft .NET Framework.
Механизм работы программ в среде Microsoft .NET Framework
Как же рождается и исполняется программа, использующая технологию .NET? Давайте разберем этот увлекательный процесс.
Прежде всего, исходный код должен быть написан на языке, соответствующем спецификации Common Language Specification (CLS), предложенной Microsoft. Соблюдение этого стандарта дает разработчикам уверенность в том, что их программы будут отвечать минимальным требованиям платформы .NET Framework и смогут без проблем взаимодействовать с кодом, написанным на других языках этой же экосистемы.
Ключевая особенность всех языков, поддерживающих CLS, заключается в том, что компиляторы не генерируют машинный код напрямую. Вместо этого они переводят исходник в промежуточный язык - Microsoft Intermediate Language (MSIL). Такой подход обеспечивает высочайшую степень совместимости между языками и полную независимость от архитектуры компьютера или операционной системы. Хотя .NET изначально создавалась для Windows на процессорах x86, ее можно адаптировать под любые другие ОС и аппаратные платформы с несовместимым набором команд. Ярким примером служит проект DotGNU для Linux, а также активно развивающаяся платформа Mono, работающая одновременно и в среде Windows, и в Linux.
На следующем этапе текст программы на MSIL интерпретируется специальной виртуальной машиной в рамках системы исполнения Common Language Runtime (CLR). Код покомандно переводится в машинный и сразу же исполняется. Этот механизм гарантирует безопасность работы, поскольку для каждой запущенной программы создается изолированная виртуальная машина. Доступ к чужим процессам запрещен: если в одной программе произойдет сбой или недопустимая операция, это затронет только ее, оставив другие процессы неприкосновенными.
Для непосредственной трансформации кода MSIL в машинный код виртуальная машина CLR использует мощный инструмент - компилятор just-in-time (JIT).
Замечание. Стоит признать, что идеи, лежащие в основе Microsoft .NET, далеко не новы. Так, программы на языке Java (разработанном Sun Microsystems еще в 1995 году) также компилируются в байт-код и исполняются виртуальной машиной Java. Сама концепция виртуальных машин зародилась очень давно: она была реализована в ОС IBM VM для вычислительных комплексов серии IBM 360/370. В нашей стране выпускались аналоги этих систем (серия ЕС ЭВМ), и автору довелось поработать на компьютерах ЕС 1045 с ОС SVM (система виртуальных машин) еще в середине 80-х годов. По сути, это была точная копия IBM VM.
Однако Microsoft дала этим старым идеям второе дыхание и новое качество. Да, Java обеспечивает отличную переносимость, но она предлагает лишь один язык. Для программистов это серьезный минус, ведь существуют специфические задачи, где другие языки подходят значительно лучше. В .NET можно свободно использовать различные языки программирования, что является огромным плюсом для разработчиков ПО. При этом сохраняется высокая переносимость кода и отличная совместимость между модулями, написанными на разных языках. Все это работает почти автоматически, освобождая программиста от необходимости решать эти технические вопросы вручную.
Достоинства и недостатки технологии Microsoft .NET
Несмотря на то что технология Microsoft .NET относительно молода, она обладает множеством преимуществ перед предшественниками. Однако, как говорится, без недостатков не обходится. Давайте честно рассмотрим обе стороны медали.
Достоинства:
- Единый набор средств API для разработки программ на различных языках.
- Простота интеграции модулей, написанных на разных языках.
- Огромная библиотека из многих тысяч готовых классов, реализующих различные алгоритмы. Это значительно сокращает сроки создания новых программ и повышает их надежность.
- Установка .NET-приложений не требует сложных инсталляторов - достаточно просто скопировать файлы в нужную папку. В результате в реестре Windows не остается никаких записей, а значит, после удаления программы система остается чистой от «мусора».
Недостатки:
- Заметное снижение скорости выполнения программ. По личным наблюдениям, замедление составляет порядка 40-50% даже для чисто вычислительных алгоритмов. Это ощутимо! Хотя с учетом постоянного роста производительности современного «железа» это не критично, на старом оборудовании программы могут работать очень медленно.
- Увеличенное потребление оперативной памяти. Сама программа может быть небольшой (всего несколько килобайт), но при ее запуске активируются компоненты Microsoft .NET Framework, которые «весят» порядка 20 Мбайт в зависимости от версии.
- Обязательное наличие среды выполнения Microsoft .NET Framework на компьютере. В Windows Vista и Windows 7 она установлена по умолчанию, но в более ранних системах ее нужно устанавливать самостоятельно. Кроме того, может потребоваться обновление самой операционной системы: для Windows 2000 необходим четвертый сервис-пак, а для Windows XP - второй. Пользователям же линейки Windows 95/98 лучше забыть о .NET.