4 Обзор возможностей Visual Studio 2013. Архитектура, идеи, принципы, и преимущества .NET

Платформа надежного и безопасного многоязыкового программирования .NET основана на:
  • единой для всех языков инфраструктуре (CLI);
  • общей системе типов (CTS);
  • общей системе поддержки выполнения (CLR).

В .NET исходный код на любом языке компилируется в сборку, содержащую:
  • бинарный код на едином промежуточном языке (CIL) - постфиксную запись программы;
  • и метаданные - информацию о типах, определенных и использованных в сборке.
Метаданные могут быть аннотированы атрибутами, как встроенными, так и пользовательскими. На использовании метаданных основан динамический контроль типов и безопасности, выполняемый CLR.

Исполнение программы в CLR реализовано как:
  • последовательность вызовов методов; 
  • и just-in-time (динамическая) компиляция каждого метода в native-код при первом вызове, с последующими вызовами native-кода откомпилированного метода.

В отличие от Java, для того, чтобы разработать собственную реализацию стандартов .NET, не требуется покупка лиценции у какой-либо фирмы-владельца этих стандартов.

Имеются и другие реализации стандартов .NET:
  • Shared Source Common Language Infrastructure (SSCLI, или Rotor) - академическая версия .NET с открытым исходным кодов, реализованная для операционных систем Windows, UNIX FreeBSD и MacOS;
  • Mono - открытая реализация .NET международным распределенным сообществом программистов, ориентированная, прежде всего, на ОС Linux, но также работающая и для Windows;
  • DotGNU.

Основные идеи и принципы .NET это:
  • компиляция с любого языка в промежуточный двоичный код MSIL (CIL) - постфиксную форму представления программ; 
  • генерация компилятором так называемых метаданных - информации о типах, определяемых и используемых в программном модуле для .NET. 
Промежуточный код, метаданные, плюс так называемый манифест (список содержимого бинарного кода) составляют сборку (assembly) - логическую единицу представления бинарного кода в .NET.

Преимуществом подхода .NET является независимость бинарного кода (CIL) от конкретной аппаратной платформы. Также .NET выполняет код в особом режиме - управляемого выполнения (managed execution), при котором гарантируется полный контроль типов и безопасности, что обеспечивает надежность и безопасности программ, в отличие от использования более старых языков и платформ, например, Си. При этом, например, невозможно преобразование типа какого-либо объекта к другому типу или присваивание переменной объектного типа ссылки на объект какого-либо другого типа, за исключением вариантов, разрешенных методологией ООП.

Многоязыковое программирование - еще один важнейший принцип .NET: программист может разрабатывать модули своей программы на любых удобных ему языках, а .NET обеспечивает совместимость (interoperability) этих модулей в рамках одной программы.

Повышенные требования к безопасности - еще одна характерная черта .NET. Используются следующие виды безопасности:
  • безопасность доступа к коду (code access security): при проверке наличия полномочий безопасности для выполнения определенных действий (например, для открытия файла) у какого-либо метода какой-либо сборки наличие этих полномочий проверяется не только у самого этого метода, но и у всей цепочки вызовов методов, вызванных в данный момент на стеке текущего потока; подобная стратегия носит название security stack walk (прогулка по стеку) и обеспечивает отсутствие атак, связанных с превышением привилегий (elevation of privilege), когда злонамеренный код пытается воспользоваться для превышения полномочий вызовом "чужого" метода;
  • безопасность, основанная на свидетельствах (evidence-based security) - проверки безопасности ("благонадежности") сборки: наличия у нее соответствующей цифровой подписи, надежного авторства сборки (например, принадлежность сборки компании Microsoft, и т.д.;
  • безопасность, основанная на ролях (role-based security) - возможность определения для какого-либо пользователя некоторой роли, обозначаемой строкой (например, "second-line manager") и связывания с этой ролью определенного набора полномочий.

Архитектура базовой библиотеки классов (BCL) .NET