Платформа надежного и безопасного многоязыкового программирования .NET основана на:
В .NET исходный код на любом языке компилируется в сборку, содержащую:
Исполнение программы в CLR реализовано как:
В отличие от Java, для того, чтобы разработать собственную реализацию стандартов .NET, не требуется покупка лиценции у какой-либо фирмы-владельца этих стандартов.
Имеются и другие реализации стандартов .NET:
Основные идеи и принципы .NET это:
Преимуществом подхода .NET является независимость бинарного кода (CIL) от конкретной аппаратной платформы. Также .NET выполняет код в особом режиме - управляемого выполнения (managed execution), при котором гарантируется полный контроль типов и безопасности, что обеспечивает надежность и безопасности программ, в отличие от использования более старых языков и платформ, например, Си. При этом, например, невозможно преобразование типа какого-либо объекта к другому типу или присваивание переменной объектного типа ссылки на объект какого-либо другого типа, за исключением вариантов, разрешенных методологией ООП.
Многоязыковое программирование - еще один важнейший принцип .NET: программист может разрабатывать модули своей программы на любых удобных ему языках, а .NET обеспечивает совместимость (interoperability) этих модулей в рамках одной программы.
Повышенные требования к безопасности - еще одна характерная черта .NET. Используются следующие виды безопасности:
- единой для всех языков инфраструктуре (CLI);
- общей системе типов (CTS);
- общей системе поддержки выполнения (CLR).
В .NET исходный код на любом языке компилируется в сборку, содержащую:
- бинарный код на едином промежуточном языке (CIL) - постфиксную запись программы;
- и метаданные - информацию о типах, определенных и использованных в сборке.
Исполнение программы в 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.
Преимуществом подхода .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 |