Россия, Челябинск, Южно-Уральский Государственный Университет (НИУ) |
Введение и обзор платформы .NET
Достоинства платформы .NET
Платформа .NET основана на единой объектно-ориентированной модели; все сервисы, предоставляемые программисту платформой, оформлены в виде единой иерархии классов. Это решает многие проблемы программирования на платформе Win32, когда большинство функций были сосредоточены в COM-объектах, а некоторые функции необходимо было вызывать через DLL.
Благодаря тому, что промежуточное представление .NET не привязано к какой-либо платформе, приложения, созданные в архитектуре .NET, являются многоплатформенными.
Платформа .NET предоставляет автоматическое управление ресурсами. Это решает многие распространенные проблемы, такие как утечки памяти, повторное освобождение ресурса и т.п. На самом деле, в .NET вообще нет никакого способа явно освободить ресурс!
Одной из наиболее распространенных трудностей при развертывании приложения является использование разделяемых библиотек. Из-за этого установка нового приложения может привести к прекращению работы ранее установленного приложения. В архитектуре .NET установка приложения может свестись к простому копированию всех файлов в определенный каталог. При установке используются криптографические стандарты, которые позволяют придавать разную степень доверия различным модулям приложения. Наконец, приложения .NET не используют реестр Windows - возможность отказаться от реестра достигается за счет использования механизма метаданных.
Достоинства платформы .NET
- Безопасные типы и общее повышение безопасности приложений
- Единая модель обработки ошибок
- Межъязыковое взаимодействие (language interoperability)
- Единая среда разработки, позволяющая проводить межъязыковую отладку
- Расширенные возможности повторного использования кода
Код, сгенерированный для .NET, может быть проверен на безопасность. Это гарантирует, что приложение не может навредить пользователю или нарушить функционирование операционной системы (так называемая "модель песочницы"). Таким образом, приложения для .NET могут быть сертифицированы на безопасность.
Обработка ошибок в .NET всегда производится через механизм исключительных ситуаций. Это решает неоднозначность ситуации, когда некоторые ошибки обозначаются с помощью кодов ошибки платформы Win32, некоторые возвращают HRESULTS и т.п.
Вероятно, самым большим обещанием .NET остается межъязыковое взаимодействие (language interoperability). Впервые в истории программирования появляется единая модель, позволяющая на равных пользоваться различными языками для создания приложений. Так как MSIL не зависит от исходного языка программирования или от целевой платформы, в рамках .NET становится возможным развивать новые программы на базе старых программ - причем и первый, и второй языки программирования не так уж важны!
Естественно, что для такого подхода к разработке программ необходимо обеспечить, например, межъязыковую отладку (многие сталкивались с трудностями отладки при вызове С++ библиотеки из Visual Basic). Visual Studio.NET поддерживает этот процесс прозрачно для пользователя и не делает различий между языками, на которых было написано исходное приложение.
Перечисленные выше особенности платформы .NET позволяют добиться простоты повторного использования кода. Раньше платформа Win32 позволяла повторное использование только на уровне COM-компонент; теперь можно повторно использовать классы и наследовать от них свои приложения.
Недостатки платформы .NET
Естественно, что все преимущества .NET, которые мы перечислили выше, не могут быть абсолютно бесплатными. Как и у любой другой архитектуры, у .NET есть свои недостатки.
Самым ощутимым недостатком является существенное замедление выполнения программ. Это неудивительно, так как между исходным языком и машинным кодом вводится дополнительный уровень, MSIL. Однако промежуточное представление .NET с самого начала проектировалось с прицелом на компиляцию времени исполнения (в отличие, например, от Java bytecode, который разрабатывался с прицелом на интерпретацию).
Это дает некоторые дополнительные возможности по борьбе с замедлением. Например, можно равномерно распределить замедление при запуске, так как обычно компилируется не вся библиотека, а только тот метод, который вызывается, и повторной компиляции одного и того же метода не производится.
Другая проблема .NET заключается в том, что при ее создании основной упор был сделан на С++/Java-подобные языки (например, конструкторы с именем, равным имени метода, запрет множественного наследования и т.п.). Это ограничивает возможности интеграции некоторых языков с более богатыми возможностями, особенно с принципиально отличающимися языками, такими как функциональные языки (ML, Haskell, Scheme) или устаревшие языки (Кобол, PL/I). Во многих случаях разработчикам компиляторов все-таки удается реализовать "проблемные" особенности исходных языков в рамках .NET, пусть даже и не слишком тривиальным образом - достаточно сказать, что уже существуют реализации типичных представителей этих классов языков для платформы .NET. Другое направление связано c развитием самой платформы .NET: например, недавно было заявлено о поддержке платформой .NET механизма параметрического полиморфизма (generics).
Наконец, наблюдается и движение с противоположной стороны: уже сегодня стандарты некоторых языков программирования претерпевают значительные изменения для того, чтобы эти языки могли быть поддержаны в .NET.