Составители:
Рубрика:
шее поведение всех написанных на них программ, называются языками со
строгой проверкой (strongly checked).
Таким образом, для программы, написанной на языке со строгой
проверкой, справедливы следующие утверждения:
• неперехватываемые ошибки не могут возникнуть;
• запрещенные перехватываемые ошибки также невозможны;
• другие перехватываемые ошибки могут возникать, и борьба с
ними остается в компетенции программиста.
Существуют два пути для диагностики запрещенных ошибок: стати-
ческая проверка программы до ее выполнения (static checking) и динами-
ческая проверка во время выполнения (dynamic checking). Статическая
проверка характерна для языков, имеющих систему типов, а динамиче-
ская проверка – для так называемых бестиповых (typeless) языков, в кото-
рых либо вообще нет системы типов, либо существует только один уни-
версальный тип данных. Динамическая проверка требует дополнительных
ресурсов, поэтому статическая проверка является предпочтительной, так
как чем больше ошибок диагностируется статически, тем выше эффектив-
ность программы.
Система типов в языке программирования разрабатывается для того
чтобы можно было осуществлять статическую проверку программы. Она
представляет собой набор правил, определяющих условия, при которых
конструкции языка не вызывают запрещенных ошибок.
Так как платформа .NET спроектирована с учетом поддержки разных
языков программирования, то ее общая система типов (Common Type
System – CTS) является объединением систем типов основных распростра-
ненных в настоящее время языков. Из этого следует, что все языки плат-
формы .NET (объектно-ориентированные, процедурные, функциональ-
ные) совместно используют единую систему типов, и это обеспечивает вза-
имодействие программных компонентов, написанных на разных языках.
Наличие в .NET общей системы типов позволяет осуществлять ста-
тическую проверку программы не только на уровне компилятора, но и на
уровне системы выполнения. Другими словами, система может проводить
верификацию двоичных исполняемых файлов непосредственно перед их
запуском. Это гарантирует безопасность кода, выполняемого в среде .NET
и тем самым обеспечивает возможность автоматического управления па-
мятью (сборку мусора).
1.2.1. Ядро системы типов .NET
Общая система типов достаточно обширна, так как при ее проекти-
ровании учитывалась необходимость поддержки различных языков про-
граммирования и, кроме того, уделялось большое внимание эффективно-
сти выполнения программ в среде .NET. Поэтому, для ясности изложения
Введение в архитектуру Microsoft .NET Framework
11
Давайте кратко приведем классификацию ошибок и разберемся, с
какими ошибками помогает справиться система типов. При этом мы не
будем рассматривать ошибки в алгоритмах, а ограничимся ошибками,
возникающими в результате неправильного кодирования алгоритмов.
Все ошибки можно разделить на две категории: перехватываемые и
неперехватываемые (рис. 1.4). При возникновении перехватываемой
ошибки (trapped error) выполнение программы немедленно прекращается,
а неперехватываемая ошибка (untrapped error) остается незамеченной и мо-
жет проявиться через некоторое время в абсолютно неожиданном месте.
Рис. 1.4. Классификация ошибок в программах
В качестве примеров перехватываемых ошибок можно привести де-
ление на ноль и обращение к памяти по нулевому указателю. А неперехва-
тываемые ошибки возникают, например, при передаче управления на не-
правильный адрес или при выходе за границы массива (если отсутствует
динамическая проверка размера массива).
Фрагмент программы, в котором не могут возникнуть неперехваты-
ваемые ошибки, называется безопасным (safe). Языки программирования,
которые обеспечивают безопасность написанных на них программ, также
называются безопасными (safe languages). Безопасность – одно из важней-
ших свойств языка. Она уменьшает время отладки благодаря отсутствию в
программах неперехватываемых ошибок. Кроме того, она гарантирует це-
лостность данных, что позволяет использовать автоматическое управле-
ние памятью (в частности, сборку мусора).
Для любого языка программирования можно определить класс оши-
бок, называемых запрещенными (forbidden errors). В этот класс следует
включить все неперехватываемые ошибки, а также некоторое подмноже-
ство перехватываемых ошибок. Говорят, что фрагмент программы имеет
хорошее поведение (well behaved), если в нем не могут возникать запре-
щенные ошибки. Языки программирования, которые гарантируют хоро-
10
CIL и системное программирование в Microsoft .NET
Ошибки
Запрещенные
перехватываемые
ошибки
Разрешенные
перехватываемые
ошибки
Перехватываемые
ошибки
Неперехватываемые
ошибки
10 CIL и системное программирование в Microsoft .NET Введение в архитектуру Microsoft .NET Framework 11 Давайте кратко приведем классификацию ошибок и разберемся, с шее поведение всех написанных на них программ, называются языками со какими ошибками помогает справиться система типов. При этом мы не строгой проверкой (strongly checked). будем рассматривать ошибки в алгоритмах, а ограничимся ошибками, Таким образом, для программы, написанной на языке со строгой возникающими в результате неправильного кодирования алгоритмов. проверкой, справедливы следующие утверждения: Все ошибки можно разделить на две категории: перехватываемые и • неперехватываемые ошибки не могут возникнуть; неперехватываемые (рис. 1.4). При возникновении перехватываемой • запрещенные перехватываемые ошибки также невозможны; ошибки (trapped error) выполнение программы немедленно прекращается, • другие перехватываемые ошибки могут возникать, и борьба с а неперехватываемая ошибка (untrapped error) остается незамеченной и мо- ними остается в компетенции программиста. жет проявиться через некоторое время в абсолютно неожиданном месте. Существуют два пути для диагностики запрещенных ошибок: стати- ческая проверка программы до ее выполнения (static checking) и динами- ческая проверка во время выполнения (dynamic checking). Статическая Ошибки проверка характерна для языков, имеющих систему типов, а динамиче- ская проверка – для так называемых бестиповых (typeless) языков, в кото- Неперехватываемые Перехватываемые рых либо вообще нет системы типов, либо существует только один уни- ошибки ошибки версальный тип данных. Динамическая проверка требует дополнительных ресурсов, поэтому статическая проверка является предпочтительной, так как чем больше ошибок диагностируется статически, тем выше эффектив- Запрещенные Разрешенные ность программы. перехватываемые перехватываемые Система типов в языке программирования разрабатывается для того ошибки ошибки чтобы можно было осуществлять статическую проверку программы. Она представляет собой набор правил, определяющих условия, при которых Рис. 1.4. Классификация ошибок в программах конструкции языка не вызывают запрещенных ошибок. Так как платформа .NET спроектирована с учетом поддержки разных В качестве примеров перехватываемых ошибок можно привести де- языков программирования, то ее общая система типов (Common Type ление на ноль и обращение к памяти по нулевому указателю. А неперехва- System – CTS) является объединением систем типов основных распростра- тываемые ошибки возникают, например, при передаче управления на не- ненных в настоящее время языков. Из этого следует, что все языки плат- правильный адрес или при выходе за границы массива (если отсутствует формы .NET (объектно-ориентированные, процедурные, функциональ- динамическая проверка размера массива). ные) совместно используют единую систему типов, и это обеспечивает вза- Фрагмент программы, в котором не могут возникнуть неперехваты- имодействие программных компонентов, написанных на разных языках. ваемые ошибки, называется безопасным (safe). Языки программирования, Наличие в .NET общей системы типов позволяет осуществлять ста- которые обеспечивают безопасность написанных на них программ, также тическую проверку программы не только на уровне компилятора, но и на называются безопасными (safe languages). Безопасность – одно из важней- уровне системы выполнения. Другими словами, система может проводить ших свойств языка. Она уменьшает время отладки благодаря отсутствию в верификацию двоичных исполняемых файлов непосредственно перед их программах неперехватываемых ошибок. Кроме того, она гарантирует це- запуском. Это гарантирует безопасность кода, выполняемого в среде .NET лостность данных, что позволяет использовать автоматическое управле- и тем самым обеспечивает возможность автоматического управления па- ние памятью (в частности, сборку мусора). мятью (сборку мусора). Для любого языка программирования можно определить класс оши- бок, называемых запрещенными (forbidden errors). В этот класс следует 1.2.1. Ядро системы типов .NET включить все неперехватываемые ошибки, а также некоторое подмноже- Общая система типов достаточно обширна, так как при ее проекти- ство перехватываемых ошибок. Говорят, что фрагмент программы имеет ровании учитывалась необходимость поддержки различных языков про- хорошее поведение (well behaved), если в нем не могут возникать запре- граммирования и, кроме того, уделялось большое внимание эффективно- щенные ошибки. Языки программирования, которые гарантируют хоро- сти выполнения программ в среде .NET. Поэтому, для ясности изложения
Страницы
- « первая
- ‹ предыдущая
- …
- 10
- 11
- 12
- 13
- 14
- …
- следующая ›
- последняя »