Что такое тип вывода? - PullRequest
       31

Что такое тип вывода?

2 голосов
/ 28 марта 2009

Существует ли он только в статически типизированных языках? И это только там, где язык не является строго типизированным (то есть, есть ли у Java)? Кроме того, к чему это относится - на этапе компиляции, предполагая, что это скомпилированный язык?

В целом, правила, когда тип неоднозначно продиктован спецификацией языка или оставлены на усмотрение реализации?

Ответы [ 4 ]

4 голосов
/ 28 марта 2009

Вывод типа является функцией некоторых статически типизированных языков. Это делается компилятором для назначения типов сущностям, которые в противном случае не имеют каких-либо аннотаций типов. Компилятор фактически просто «заполняет» информацию статического типа от имени программиста.

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

Вывод типа является частью спецификации языка, например, спецификация F # подробно описывает алгоритм и правила вывода типа, поскольку это эффективно определяет «что такое легальная программа».

Хотя некоторые (большинство?) Языки поддерживают некоторые ограниченные формы вывода типов (например, «var» в C #), по большей части люди используют «вывод типов» для обозначения языков, в которых выводится подавляющее большинство типов, а не явный (например, в F # сигнатуры функций и методов, в дополнение к локальным переменным, обычно выводятся; в отличие от C #, где 'var' допускает вывод локальных переменных, но объявления методов требуют полной информации о типе).

2 голосов
/ 28 марта 2009

Тип вывода определяет тип переменной из контекста. Это зависит от строгой типизации. Например, функциональные языки очень строго, статически типизированы, но полностью полагаются на вывод типа.

C # и VB.Net являются другими примерами статически типизированных языков с выводом типов (они предоставляют его для использования универсальных обобщений, и это требуется для запросов в LINQ, особенно для поддержки проекций).

Динамические языки не определяют тип, он обнаруживается во время выполнения.

0 голосов
/ 09 августа 2009

Вывод типа - это все, что выводит типы статически, используя алгоритм вывода типа. Таким образом, это не просто особенность статических языков.

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

В качестве такого вывода используется тип:

  • чтобы избежать аннотаций типов в статических языках,
  • при оптимизации компиляторов для динамических языков (например, для Scheme, Self и Python),
  • В инструментах проверки ошибок, компиляторах и анализе безопасности для динамических языков.
0 голосов
/ 28 марта 2009

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

См. статью в Википедии .

...