Оглавление
Сильная и слабая типизация
-
Классификация языков программирования по типу системы
- Строгая типизация: строгие правила набора текста, высокая вероятность ошибок компиляции
- Динамическая типизация: типы имеют значения, проверка типов выполняется во время выполнения
- Слабая типизация: более свободные правила, непредсказуемые результаты, возможность неявных преобразований
-
История и определения
- Барбара Лисков и Стивен Зиллес ввели термин “строгая типизация” в 1974 году
- К. Джексон в 1977 году описал строгую типизацию как фиксацию типов данных и коммуникационных требований
-
Примеры “сильной” и “слабой” типизации
- “Сильная типизация” включает безопасность типов, статическую проверку типов, безопасность памяти
- “Слабая типизация” может включать неявные преобразования типов, арифметику с указателями, союзы без тегов
-
Различия в языках программирования
- Java, Pascal, Ada, C требуют явного объявления типов, поддерживают явные преобразования
- C поддерживает больше неявных преобразований, но не имеет статической проверки типов
- Java и C# управляют обходом статической системы типов через виртуальную машину и “небезопасный контекст”
- Delphi устраняет ограничения системы типов Pascal
- Smalltalk, Ruby, Python, Self не используют статическую проверку типов, но предотвращают ошибки ввода во время выполнения
- Lisp и его диалекты поддерживают различные формы объявлений типов, некоторые компиляторы используют их для оптимизации
- Стандартные ML, F#, OCaml, Haskell, Go, Rust статически проверяют типы, но компилятор определяет тип автоматически
- Ассемблер не имеет проверки типов, программист должен сам убедиться в соответствии данных функциям