Что такое безопасность типов? - PullRequest
9 голосов
/ 30 мая 2009

Недавно я сдал экзамен на мозговую скамью, получил высокую оценку, но была пара вопросов, которые были для меня трудными. Может быть, это потому, что английский не мой родной язык ... Один из вопросов:

Что из следующего описывает безопасность типов?

  1. Программная конструкция, используемая для обеспечения безопасности ссылочных и значений типов в CLR
  2. Защита от утечки памяти в результате запрета неуправляемого доступа
  3. CLR-специфическая функция, обеспечивающая гарантии того, что типы могут не получить доступ к памяти вне своего собственного домена приложений
  4. Механизм, созданный для защиты сборок и их типов с использованием ключей со строгими именами
  5. Концепция, касающаяся гарантий того, что выделенные объекты всегда доступны совместимым образом

Я думаю, это 1 или 5, но они все равно звучат странно для меня: (

Что вы думаете?

Ответы [ 9 ]

10 голосов
/ 30 мая 2009

На самом деле я думаю, что это вариант 5, потому что безопасность типов не имеет ничего общего с безопасностью.

7 голосов
/ 30 мая 2009

Безопасность типов - это особенность языка, созданного для того, чтобы оправдать знаменитый слоган [Робина Милнера] [1] о программировании ML: хорошо напечатанные программы не могут ошибаться .

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

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

4 голосов
/ 07 марта 2013

Согласно приведенной ниже ссылке msdn, http://msdn.microsoft.com/en-us/library/hbzz1a9a.aspx

Типобезопасный код обращается только к тем ячейкам памяти, к которым он имеет доступ. (В этом обсуждении безопасность типов конкретно относится к безопасности типов памяти, и ее не следует путать с безопасностью типов в более широком смысле.) Например, код безопасности типов не может читать значения из частных полей другого объекта. Доступ к типам возможен только четко определенными допустимыми способами.

1 голос
/ 25 января 2014

Тип безопасности не о безопасности. Речь идет о том, чтобы совместимый экземпляр был назначен правильной переменной.

Чтобы узнать больше о безопасности типов, см. безопасность типов в .NET

1 голос
/ 02 мая 2011

Из справочника MSDN: Лучший ответ - № 3: см. http://msdn.microsoft.com/en-us/library/hbzz1a9a(v=vs.80).aspx

1 голос
/ 30 мая 2009

Как уже говорили другие, выбор 5 ...

В общем - для .NET, ознакомьтесь с Common Type System (CTS), которая обеспечивает многоязычность и безопасность типов.

Выезд: http://en.wikipedia.org/wiki/Type_safety ...

1 голос
/ 30 мая 2009

Безопасные для типов языки гарантируют (во время компиляции), что вы не вызываете несовместимые методы для типа, например length () для типа int. Не типобезопасные языки это выяснят во время выполнения. Итак, выбор 5.

1 голос
/ 30 мая 2009

Выбор 5 Концепция, касающаяся гарантий того, что к выделенным объектам всегда обращаются совместимым образом

Безопасность типов подразумевает, что при создании Foo вы не можете рассматривать его как Bar. Если вы не знаете, какой это тип (или не гарантирован), код, который вы пишете, может просто не работать должным образом.

0 голосов
/ 30 мая 2009

Это вариант № 5. Безопасность типов - это гарантия, а не конкретная вещь. Для кода .NET , а не возможно быть безопасным типом ... скажем, в случае, если сборка использует небезопасный код для выполнения неуправляемых вызовов (PInvoke). Во время JIT выполняется процесс, который проверяет, что типы, которые соединяются, действительно являются безопасными типами. Я не знаю каких-либо подробностей об этом процессе, но если проходит тип с сопряжением, то он считается проверяемым типом безопасным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...