Прошу прояснить очевидные противоречия относительно слабо типизированных языков

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

Например, в этой статье под названием Typing: Strong vs. Weak, Static vs. Dynamicговорится, что Python строго типизирован, потому что вы получите исключение, если попытаетесь:

Python

1 + "1"
Traceback (most recent call last):
File "", line 1, in ? 
TypeError: unsupported operand type(s) for +: 'int' and 'str'

Однако такое возможно и в Java, и в C#, и мы не считаем их слаботипизированными только за это.

Java

  int a = 10;
  String b = "b";
  String result = a + b;
  System.out.println(result);

C#

int a = 10;
string b = "b";
string c = a + b;
Console.WriteLine(c);

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

Perl

$a=10;
$b="a";
$c=$a.$b;
print $c; #10a

Таким образом, тот же самый пример делает Perl слабо типизированным, но не Java и C#?.

Боже, это сбивает с толкуenter image description here

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

Таким образом, в какой-то момент я почувствовал побуждение поверить, что если язык предоставляет много автоматических преобразований или принуждения между типами (как perl), он может в конечном итоге считаться слабо типизированным, в то время как другие языки, которые обеспечивают только несколько преобразований, могут в конечном итоге считаются строго типизированными.

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

Итак, мои вопросы:

  • Что на самом деле означает, что язык действительно слабо типизирован?
  • Не могли бы вы упомянуть какие-нибудь хорошие примеры слабой типизации, не связанные с автоматическим преобразованием/автоматическим принуждением, выполняемым языком?
  • Может ли язык быть одновременно слабо и строго типизированным?

176
задан peter-b 22 November 2014 в 17:43
поделиться