Статическая печать
Говорят, что язык программирования использует
статическая типизация при проверке типа
выполняется во время компиляции как
в отличие от времени выполнения. В статической типизации,
типы связаны с переменными
не ценности. Статически типизированные языки
включают в себя Ada, C, C ++, C #, JADE, Java,
Fortran, Haskell, ML, Pascal, Perl
(в отношении различения
скаляры, массивы, хэши и
подпрограммы) и Scala. Статическая печать
это ограниченная форма программы
проверка (см. тип безопасности):
соответственно, это позволяет многим типам
ошибки, которые должны быть обнаружены в начале
цикл разработки. Статический тип
шашки оценивают только тип
информация, которая может быть определена в
время компиляции, но в состоянии проверить
что проверенные условия выполняются для
все возможные казни
программа, которая устраняет необходимость
повторять проверки типов каждый раз
Программа выполнена. Выполнение программы
также может быть сделано более эффективным (т.е.
быстрее или занимает меньше памяти)
пропуская проверки типа во время выполнения и
включение других оптимизаций.
Потому что они оценивают информацию о типе
во время компиляции, и, следовательно, отсутствие
введите информацию, которая только
доступный во время выполнения, статический тип
шашки консервативны. Они будут
отклонить некоторые программы, которые могут быть
хорошо себя ведет во время выполнения, но это
не может быть определено статически
хорошо напечатал. Например, даже если
выражение всегда
оценивается как истина во время выполнения, а
программа, содержащая код
if <complex test> then 42 else <type error>
будет отклонено как неправильно напечатанное, потому что
статический анализ не может определить
что ветвь else не будет
приняты. [1] Консервативное поведение
статических шашек типа
выгодно когда
нередко оценивается как ложное: A
Статическая проверка типа может определить тип
ошибки в редко используемых путях кода.
Без статической проверки типов, даже
тесты покрытия кода со 100% кодом
покрытие может быть не в состоянии найти такой
ошибки типа. Тесты покрытия кода могут
не удается обнаружить такие ошибки типа
потому что сочетание всех мест
где создаются значения и все
места, где используется определенное значение
должны быть приняты во внимание.
Наиболее широко используемый статически типизированный
языки не являются формально безопасными.
У них есть «лазейки» в
спецификация языка программирования
позволяя программистам писать код
что обходит проверку
в исполнении статической проверки типов и
так что решайте более широкий круг проблем.
Например, Java и большинство C-стиля
Языки имеют тип Punning, и
У Haskell есть такие особенности как
unsafePerformIO: такие операции могут
быть небезопасным во время выполнения, в том смысле, что они могут
вызвать нежелательное поведение из-за
неправильный ввод значений при
Программа работает.
Динамический набор
Язык программирования называется
динамически типизированный или просто «динамический»,
когда большинство проверяет его тип
выполняется во время выполнения, в отличие от
во время компиляции. При динамическом наборе текста
типы связаны со значениями не
переменные. Динамически типизированные языки
включают Groovy, JavaScript, Lisp, Lua,
Objective-C, Perl (по отношению к
пользовательские типы, но не встроенные
типы), PHP, Пролог, Python, Ruby,
Smalltalk и Tcl. По сравнению со статическим
типизация, динамическая типизация может быть больше
гибкий (например, позволяя программам
генерировать типы и функциональность на основе
на данных во время выполнения), хотя на
за счет меньшего количества априорных гарантий.
Это потому, что динамически типизированный
язык принимает и пытается
выполнить некоторые программы, которые могут быть
считается недействительным статическим типом
шашка.
Динамическая типизация может привести к времени выполнения
ошибки типа, то есть во время выполнения
значение может иметь неожиданный тип, и
операция бессмысленная для этого типа
применены. Эта операция может произойти
долго после того места, где
была допущена ошибка программирования
гоместо, где неправильный тип данных
перешел на место не должно
иметь. Это делает ошибку трудной для
найти.
Динамически типизированные языковые системы,
по сравнению с их статически типизированными
двоюродные братья, сделать меньше "время компиляции"
проверяет исходный код (но будет
проверьте, например, что программа
синтаксически правильно). Во время выполнения
чеки потенциально могут быть больше
сложные, так как они могут использовать
динамическая информация, а также любая
информация, которая присутствовала во время
сборник. С другой стороны,
проверки во время выполнения только утверждают, что
условия держатся в определенном
выполнение программы, и эти
проверки повторяются для каждого
выполнение программы.
Разработка в динамически типизированном
языки часто поддерживаются
методы программирования, такие как блок
тестирование. Тестирование является ключевой практикой в
профессиональная разработка программного обеспечения, и
особенно важно в
динамически типизированные языки. В
практика, тестирование сделано для обеспечения
правильная работа программы может обнаружить
гораздо более широкий диапазон ошибок, чем статические
проверка типов, но, наоборот, не может
поиск как всеобъемлющий для
ошибки, которые как тестирование, так и статические
Тип проверки может обнаружить.
Тестирование может быть включено в
цикл сборки программного обеспечения, в этом случае это
можно рассматривать как «время компиляции»
проверьте, что пользователь программы будет
не нужно вручную запускать такие тесты.
Ссылки
- Пирс, Бенджамин (2002). Типы и языки программирования. MIT Press.
ISBN 0-262-16209-1.