Каковы ключевые аспекты строго типизированного языка? - PullRequest
17 голосов
/ 23 сентября 2008

Что делает язык строго типизированным? Я ищу наиболее важные аспекты строго типизированного языка.

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

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

Ответы [ 8 ]

26 голосов
/ 23 сентября 2008

Термин "строго типизированный" не имеет согласованного определения.

Это приводит к "великому" аргументу в огненной войне, потому что, когда кто-то оказывается неправ, он может просто переопределить его, чтобы обозначить то, что он хочет. Кроме этого, этот термин не имеет смысла.

Лучше просто не использовать термин или, если вы его используете, сначала строго определить его. Если вы видите, что кто-то другой использует его, попросите его определить термин.

У каждого свое определение. Вот что я видел:

  • строго типизированный = статически типизированный
  • строго типизированный = явно типизированный
  • строго типизированный = номинально
  • строго типизированный = типизированный
  • строго типизированный = не имеет неявных типов, только явные
  • строго типизированный = не имеет типов вообще
  • строго напечатано = что я понимаю / слабо напечатано = что я не понимаю
  • строго типизированный = C ++ / слабо типизированный = все остальное
  • строго типизированный = Java / слабо типизированный = все остальное
  • строго типизированный = .NET / слабо типизированный = все остальное
  • строго типизированный = мой язык программирования / слабо типизированный = ваш язык программирования

В теории типов существует понятие, что одна система типов сильнее , чем другая. В частности, если существует выражение e1 такое, что оно принимается системой типов T1, но отклоняется системой типов T2, то говорят, что T2 на сильнее , чем T1. Здесь следует отметить две важные вещи:

  1. это сравнительный, а не абсолютный: нет сильных или слабых , только сильнее и слабее
  2. нет значения, подразумеваемого этим термином; сильнее не значит лучше
11 голосов
/ 23 сентября 2008

По мнению Б.С. Пирс, парень, который написал «Типы и языки программирования и расширенные типы и языки программирования»:

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

Поэтому неудивительно, почему ваши коллеги не согласны.

Я бы пошел с самым простым ответом: если вы можете объединить строку и целое число без приведения, то это не сильно напечатано.

РЕДАКТИРОВАТЬ: как указано в комментариях, Java просто делает это: - (

7 голосов
/ 23 сентября 2008

Ключ должен помнить, что существует различие между статически типизированным и строго типизированным. Строго типизированный язык просто означает, что однажды назначенная переменная всегда будет вести себя как определенный тип, пока не будет переназначена. По определению статически типизированные языки, такие как Java и C #, строго типизированы, но так же популярны многие динамические языки, такие как Ruby и Python.

Так что на строго типизированном языке

x = "5"

x всегда будет строкой и никогда не будет целым числом.

В некоторых слабо типизированных языках вы можете сделать что-то вроде

x = "5"
y = x + 3
// y is now 8
6 голосов
/ 23 сентября 2008

Люди путают статически набранные со строго типизированными. Статически типизированный означает «Строка является строкой является строкой». Строго типизированный означает: «Как только вы сделаете эту строку, она будет обрабатываться как строка, пока она не будет переназначена как нечто иное»

редактировать: я вижу, что кто-то еще указал на это в конце концов:)

4 голосов
/ 23 сентября 2008

Я слышал, как кто-то сказал в интервью (я думаю, что это был Андерс Хейлсберг из C # и Turbo Pascal Fame), что строгая типизация - это не то, что включено или выключено, некоторые языки имеют более сильную систему типов, чем другие.

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

Попробуйте википедию для получения дополнительной информации, но не ожидайте окончательного ответа: http://en.wikipedia.org/wiki/Strongly_typed_language

1 голос
/ 01 января 2018

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

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

Пример: Java является статически типизированным , а также строго типизированным языком . Он статически типизирован, потому что нужно объявить переменные, прежде чем их можно будет использовать. Он строго типизирован, потому что переменная определенного типа int всегда будет содержать целочисленные значения. Вы не можете присвоить им boolean.

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

1 голос
/ 30 марта 2010

Термин «строго типизированный» совершенно и совершенно бессмысленный. Это не имеет смысла и никогда не имело. Даже если некоторые из заявленных определений были точными, я не вижу цели относительно причины различия; Почему важно знать, обсуждать или спорить, является ли язык строго типизированным (что бы это ни значило) или нет?

Это очень похоже на термины «Web 2.0» или «OEM», которые также не имеют реального значения.

Интересно рассмотреть, как эти фразы начинаются и внедряются в повседневное общение.

1 голос
/ 23 сентября 2008

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

Пример (на уме Java):

int i = 4;
char s = i; // Type mismatch: cannot convert from int to char
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...