Что такое Type-safe? - PullRequest
       102

Что такое Type-safe?

Ответы [ 12 ]

1 голос
/ 04 ноября 2008

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

Для многих переменных набор значений, которые могут быть назначены переменной, определяется во время написания программы. Например, переменной с именем «color» может быть разрешено принимать значения «red», «green» или «blue» и никогда не иметь никаких других значений. Для других переменных эти критерии могут изменяться во время выполнения. Например, переменная с именем «color» может принимать значения только в столбце «name» таблицы «Colors» в реляционной базе данных, где «red», «green» и «blue» - это три значения для «name» в таблице «Colors», но некоторая другая часть компьютерной программы может быть в состоянии добавить в этот список во время работы программы, и переменная может принять новые значения после того, как они добавлены в таблицу Colors .

Многие типобезопасные языки создают иллюзию «безопасности типов», настаивая на строгом определении типов для переменных и только разрешая переменной присваивать значения одного и того же «типа». Есть несколько проблем с этим подходом. Например, программа может иметь переменную yearOfBirth, которая представляет собой год рождения человека, и заманчиво привести его к типу короткого целого числа. Тем не менее, это не короткое целое число. В этом году это число меньше 2009 года и больше -10000. Тем не менее, этот набор увеличивается на 1 каждый год по мере выполнения программы. Делать это "коротким целым" недостаточно. Чтобы сделать эту переменную безопасной для типов, необходима функция проверки во время выполнения, которая гарантирует, что число всегда будет больше -10000 и меньше, чем в следующем календарном году. Не существует компилятора, который мог бы применять такие критерии, потому что эти критерии всегда являются уникальными характеристиками проблемной области.

Языки, которые используют динамическую типизацию (или типизацию утилит, или манифестную типизацию), такие как Perl, Python, Ruby, SQLite и Lua, не имеют понятия типизированных переменных. Это вынуждает программиста написать подпрограмму проверки времени выполнения для каждой переменной, чтобы гарантировать ее правильность или выдержать последствия необъяснимых исключений времени выполнения. По моему опыту, программисты на языках со статической типизацией, таких как C, C ++, Java и C #, часто склоняются к мысли, что статически определенные типы - это все, что им нужно сделать, чтобы получить преимущества безопасности типов. Это просто неверно для многих полезных компьютерных программ, и трудно предсказать, верно ли это для какой-либо конкретной компьютерной программы.

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

0 голосов
/ 28 ноября 2018

Концепция:

Чтобы быть очень простым Type Safe, как и значения, он гарантирует, что тип переменной должен быть безопасным, как

  1. нет неправильного типа данных, например невозможно сохранить или инициализировать переменную строкового типа с целым числом
  2. Нет доступных индексов
  3. Разрешить только определенную область памяти

так что все дело в безопасности типов вашего хранилища в терминах переменных.

...