Терминология систем типов
- title
- Терминология систем типов
- type
- summary
- summary
- Заметка Lewis Campbell об ортогональных осях систем типов и о том, почему "строгая типизация" - дилетантский термин
- sources
- type-systems-vocabulary
- parent
- type-system-axes
- tags
- programming-languages, type-systems
- created
- 2026-04-25
- updated
- 2026-04-25
- lang
- ru
- translation_of
- type-systems-vocabulary
- source_updated
- 2026-04-25
- translated
- 2026-09-01
- translator
- lllm/antigravity/gemini-3.7-flash-medium
Короткая заметка lewis-campbell, в которой он утверждает, что в сетевых дискуссиях о программировании часто путают терминологию систем типов - из-за чего такие обсуждения либо сложно понять, либо они откровенно вводят в заблуждение. Решение простое: чётко разделять две оси - статическая/динамическая и сильная/слабая.
Две оси
Статическая или динамическая - вопрос о том, когда проверяются типы. Статические системы типов анализируют исходный код как статический ресурс и отклоняют программы с ошибками типизации ещё до запуска. Динамические системы типов привязывают тип к каждому значению и проверяют его по требованию во время выполнения.
Сильная или слабая - вопрос о том, сколько неявных приведений типов выполняет язык. C - слабый: арифметика указателей без проблем переинтерпретирует байты. Python - сильный: вызов метода, ожидающего один тип, с аргументом другого типа приведёт к ошибке, а не к неявному преобразованию.
Обе оси ортогональны. Campbell намеренно берёт C и Python в качестве наглядных примеров: у C статическая слабая типизация, у Python - динамическая сильная. Ни одна из этих пар не идёт "в комплекте" как неделимый пакет. См. матрицу из четырёх квадрантов на странице type-system-axes.
В чём люди ошибаются
Динамическая ≠ бестиповая. В динамически типизированных языках типы есть - это прямо следует из названия. "Бестиповая" означает, что проверки не происходят вовсе, ни статически, ни динамически. Это принципиально разные категории.
Сильная ≠ статическая, слабая ≠ динамическая. В этом и заключается суть примера с C и Python. Смешение этих осей порождает фразы, которые звучат осмысленно, но не имеют конкретного содержания.
"Строгая типизация" и "нестрогая типизация" - дилетантские термины. Судя по всему, их придумали те, кто не усвоил модель двух осей. Читатель не может понять, означает ли "строгая" статическую, сильную или обе сразу - в итоге термин не проясняет суть, а запутывает.
Почему это важно
Заметка короткая, но затронутая проблема универсальна. Когда словарь сводит два независимых измерения к одному ползунку, участники дискуссии не могут прийти к согласию: они спорят о совершенно разных вещах, используя одно и то же слово. Только разделение осей делает осмысленный разговор возможным.