Статический тип - это свойство части программы (обычно это выражение), которое средство проверки типов попытается доказать или опровергнуть, не выполняя программу, возможно, одновременно выводя свойство.(На самом деле, это немного не так, зависимые типы и поэтапная компиляция делают правду более размытой, чем эта).В широком смысле динамически типизированный язык имеет один статический тип - тип синтаксически допустимых выражений.
Динамический тип - это свойство «объекта» (не обязательно объекта ОО), которое среда выполнения проверит автоматическиво время выполнения программы.Каждый основной статически типизированный язык имеет несколько динамических типов ... например, функция деления статически определена так, чтобы она принимала два числа и возвращала число, но определялась динамически, так что второе число не может быть нулем.Существуют статически типизированные языки, для которых «ненулевое число» может быть статически проверенным типом.Во многих статически типизированных языках (например, Java) ненулевой это динамический тип, тогда как в Haskell это статический тип.И т. Д.
Эти два понятия в некоторой степени связаны (они оба являются способами предотвращения неопределенного поведения), но также настолько различны, что источником путаницы является то, что слово «тип» означает оба.
Как статические, так и динамические системы типов предшествуют OO, и оба имеют отличные неOO языки для их представления (например, Scheme и SML).На самом деле, они предшествуют компьютерному программированию, как мы его знаем.См. Лямбда-калькуляцию без типизации и простой типизацию, которая относится к 1930-м и 40-м годам.
Более подробное обсуждение различий см. В http://web.archive.org/web/20080822101209/http://www.pphsg.org/cdsmith/types.html
Один подход к рассмотрению некоторых свойствстатических и динамических типов: http://james -iry.blogspot.com / 2010/05 / types-la-chart.html
Под динамически типизированным и нетипизированным подразумевается одно и то же?Ну ... нетипизированный исходит из нетипизированного лямбда-исчисления.Он называется нетипизированным в отличие от других лямбда-исчислений, таких как простейшее лямбда-исчисление, которые имеют статические типы.Так что, безусловно, динамически типизированные языки в этом смысле нетипизированы.Но ...
Нетипизированное лямбда-исчисление, в отличие от "реального" языка программирования, обладает тем свойством, что любое синтаксически допустимое выражение может "прогрессировать" без необходимости проверять любые свойства, которые могут привести к неопределенному поведению,Нет эквивалента деления на ноль, разыменования нуля или отправки сообщения объекту, который не может его обработать.Таким образом, можно утверждать, что нетипизированный LC не имеет динамической системы типов, даже если она не типизирована.