Я думаю, что я понимаю сильную типизацию, но каждый раз, когда я ищу примеры для слабого набора текста, я нахожу примеры языков программирования, которые просто автоматически конвертировать типы.
Например, в этой статье с именем 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 и в С#, и мы не считаем их слабо типизированными для этого.
Java
int a = 10;
String b = "b";
String result = a + b;
System.out.println(result);
С#
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 и С#?.
Да, это путает
Авторы, по-видимому, подразумевают, что язык, который предотвращает применение определенных операций над значениями разных типов, строго типизирован, а наоборот означает слабо типизированный.
Поэтому в какой-то момент я почувствовал, что мне кажется, что если язык обеспечивает много автоматических преобразований или принуждения между типами (как perl), в конечном итоге может считаться слабо типизированным, тогда как другие языки, которые предоставляют только несколько преобразований, могут в конечном итоге считается строго типизированным.
Я склонен полагать, однако, что я должен ошибаться в этом вопросе, я просто не знаю, почему и как объяснить это.
Итак, мои вопросы:
- Что это значит для того, чтобы язык был действительно слабо типизированным?
- Не могли бы вы упомянуть о хороших примерах слабого набора текста, которые не связаны с автоматическим преобразованием/автоматическим принуждением, выполняемым языком?
- Может ли язык быть слабо типизированным и строго типизированным одновременно?