Это два разных подхода к тому, как [языки программирования](Язык%20программирования) работают с [типами данных](Типы%20данных.md) (числа, строки, списки и т.п.). ## Статическая типизация Тип переменной известен на этапе компиляции, до запуска программы. Примеры языков: C, C++, Java, Rust, Go, C#. #### Особенности - Типы переменных объявляются заранее. - Ошибки несоответствия типов обнаруживаются **до запуска**. - Код работает быстрее. - Программист должен строго следить за типами. ### Плюсы - Раннее обнаружение ошибок. - Быстрая работа. - Легче оптимизировать. ### Минусы - Много “служебного” кода. - Менее гибко. ## Динамическая типизация **Тип переменной определяется во время выполнения программы**. Примеры: **Python, JavaScript, Ruby, PHP, Lua**. #### Особенности - Можно присвоить переменной значение любого типа. - Ошибки типов проявляются только во время выполнения. - Код гибче и короче. ### Плюсы - Гибкость. - Быстрая разработка. - Меньше кода. ### Минусы - Ошибки типов могут проявиться поздно. - Немного медленнее, потому что типы проверяются на ходу.