Что такое безопасность типов?

Просто для дополнения данных ответов, если вам нужно преобразовать время, указанное в дате, в другие единицы времени, вы можете использовать TimeUnit API

Пример:

TimeUnit.MILLISECONDS.toMinutes(millis)

9
задан Sinan Ünür 26 January 2010 в 15:52
поделиться

6 ответов

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

10
ответ дан 4 December 2019 в 08:52
поделиться

ВМ не имеет ничего общего с языком. Любой язык может работать поверх виртуальной машины (виртуальная машина Java уже имеет сотни языков).

Виртуальная машина позволяет запускать другой вид «языка ассемблера», который больше подходит для адаптации компилятора. Все, что делается на виртуальной машине, можно делать в процессоре, поэтому думайте о виртуальной машине как о процессоре. (Некоторые из них фактически реализованы аппаратно.)

Это чрезвычайно низкий уровень, и во многих случаях он сильно основан на стеке - вместо регистров математические вычисления на машинном уровне относятся к местоположениям относительно текущего указателя стека.

С нормальные компилируемые языки, для одного шага требуется множество инструкций. a + может выглядеть как "Захватите элемент из точки относительно указателя стека в регистр a, возьмите другой в регистр b. Добавьте регистры a и b. поместите reg a в место относительно указателя стека.

ВМ делает все это с помощью одной короткой инструкции, возможно, одного или двух байтов вместо 4 или 8 байтов НА ИНСТРУКЦИЮ на машинном языке (в зависимости от 32 или 64 бит архитектура), что (предположение) должно означать около 16 или 32 байта x86 на 1-2 байта машинного кода. (Я мог ошибаться, мой последний код x86 был в эпоху 80286.)

Microsoft использовала (вероятно, до сих пор использует) виртуальные машины в своих офисных продуктах, чтобы уменьшить количество кода.

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

Виртуальные машины также могут реализовать свои собственные механизмы безопасности, восстановления после ошибок и памяти, которые очень тесно связаны с языком.

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

7
ответ дан 4 December 2019 в 08:52
поделиться

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

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

1
ответ дан 4 December 2019 в 08:52
поделиться

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

0
ответ дан 4 December 2019 в 08:52
поделиться

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

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

Отъезд: http://en.wikipedia.org/wiki/Type_safety ...

1
ответ дан 4 December 2019 в 08:52
поделиться

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

1
ответ дан 4 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: