2008-09-23 4 views
16

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

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

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

+0

Возможно, разница будет отвечать на ваш вопрос http://stackoverflow.com/questions/2690544/what-is-the-difference-between-a-strongly-typed-language-and-a-statically-typed – akashchandrakar 2014-11-30 13:05:20

ответ

1

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

Пример (в Java виду вас):

int i = 4; 
char s = i; // Type mismatch: cannot convert from int to char 
+0

Это мы быть «компилятором» только в случае статического ввода. В случае сильной динамической типизации это будет среда выполнения, которая будет генерировать исключение/ошибку/что угодно. См. Также http://www.artima.com/weblogs/viewpost.jsp?thread=7590 – Suma 2008-09-23 14:57:28

+3

Это неправильно. Независимо от того, объявляете ли вы тип или нет, это не имеет никакого отношения к сильному набору текста, это вопрос о явной или неявной типизации. Кроме того, вопрос о том, является ли компилятор или время выполнения ошибками типа «статические» или «динамические», снова не имеет ничего общего с сильной типизацией. – 2008-09-23 18:20:27

+0

Это статическая типизация. – leppie 2008-09-23 18:21:26

7

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

Таким образом, в строго типизированных языках

x = "5" 

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

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

x = "5" 
y = x + 3 
// y is now 8 
+4

C можно сказать, что он статически, слабо типизирован. Это странно, но возможно. – troelskn 2008-09-23 14:49:46

+0

В C все это число. – leppie 2008-09-23 18:22:28

4

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

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

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

6

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

редактировать: Я вижу, кто-то другой сделал указываю на это все-таки :)

10

Согласно Р. Х. Пирс, парень, который написал «Типы и Языки программирования и дополнительные типы и Языки программирования»:

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

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

Я бы попросил простейший ответ: если вы можете конкатенировать строку и int без кастинга, то это не сильно типизировано.

EDIT:., Как указано в комментариях, Java просто делает это :-(

24

Термин «сильно типизированных» уже не согласованное определение

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

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

У каждого свое определение. Некоторые, которые я видел, являются:

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

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

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

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

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

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

1

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

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

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

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

Смежные вопросы