Поиск разъяснений по очевидным противоречиям относительно слабо типизированных языков
Я понимаю строгой типизации, но каждый раз, когда я ищу примеры того, что является слабым типом, я в конечном итоге нахожу примеры языков программирования, которые просто принудительно/автоматически преобразуют типы.
например, в этой статье под названием ввод: сильный против слабого, статический против динамического говорит, что 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#?.
блин, это сбивает с толку 
поэтому в какой-то момент я почувствовал побуждение полагать, что если язык обеспечивает много автоматических преобразований или принуждения между типами (как perl) может в конечном итоге рассматриваться слабо типизированные, в то время как другие языки, которые обеспечивают только несколько преобразований, могут в конечном итоге считаться строго типизированными.
Итак, мои вопросы:
- что на самом деле означает для языка быть действительно слабо типизированным?
- не могли бы вы упомянуть какие-либо хорошие примеры слабого ввода, которые не связаны с автоматическое преобразование / автоматическое принуждение, выполненное языком?
- может ли язык быть слабо типизирован и сильно типизирован одновременно?
Comments