ScholarGate
Ассистент

Статическая и динамическая типизация

Статическая типизация проверяет типы до запуска программы, тогда как динамическая типизация проверяет их во время выполнения; постепенная типизация стремится объединить эти два подхода в рамках одного языка.

Найти тему в PaperMindСкороFind papers & topics
Tools & resources
Скачать слайды
Learn & explore
ВидеоСкоро

Definition

Статическая типизация проверяет ограничения типов на этапе компиляции, так что программы с корректными типами принимаются до выполнения; динамическая типизация откладывает проверки типов до времени выполнения, вызывая ошибки, когда операции применяются к значениям неподходящего типа.

Scope

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

Core questions

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

Key theories

Постепенная типизация
Зик и Таха определили систему типов, которая позволяет частям программы быть статически типизированными, а другим — динамически типизированными, с отношением согласованности, регулирующим безопасное взаимодействие на границе.
Корректность статической типизации
Метод прогресса и сохранения Райта и Феллезена показывает, что корректная статическая система типов гарантирует, что программы с корректными типами никогда не достигают застрявших состояний, формализуя безопасность статической проверки.

Clinical relevance

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

History

Ранние языки разделились на статически типизированные (Algol, Pascal, ML) и динамически типизированные (Lisp, Smalltalk). По мере роста популярности динамических языков для повышения производительности исследователи стремились примирить эти подходы; постепенная типизация Зика и Тахи 2006 года и одновременные работы по опциональным типам привели к широко используемым системам постепенной типизации, построенным поверх динамических языков.

Debates

Стоимость и корректность постепенной типизации
Исследователи обсуждают, может ли корректная постепенная типизация избежать непомерных затрат на проверку во время выполнения на типизированных/нетипизированных границах и является ли некорректная «опциональная» типизация лучшим практическим компромиссом.

Key figures

  • Benjamin Pierce
  • Jeremy Siek
  • Walid Taha
  • Matthias Felleisen

Related topics

Seminal works

  • pierce2002
  • siek2006
  • wright1994

Frequently asked questions

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

Methods for this concept

Related concepts