Одна из проблем при ответе на такие вопросы заключается в том, что люди не согласны с смыслами почти всех этих терминов. Итак ... что следует моему мнению (хотя это довольно хорошо информированный, если я так говорю сам).
Все языки работают с определенным набором значений и имеют некоторое поведение во время работы. Попытка добавить число к функции не срабатывает почти на всех языках. Вы можете назвать это «системой типа», но это, вероятно, не правильный термин.
Итак, что такое система типа? В наши дни я утверждаю, что термин обычно относится к системе, которая исследует программу, и статически [*] выводит свойства программы. Как правило, если это называется системой типов, это означает присоединение «типа» к каждому выражению, которое сдерживает набор/класс значений, которые может оценивать выражение. Обратите внимание, что это определение в основном делает термин «динамически типизированный» бессмысленным.
Обратите внимание на гигантскую лазейку: существует «система тривиального типа», которая просто присваивает каждому выражению «тип», содержащий все значения программы. Итак, если вы хотите, вы можете рассматривать буквально любой язык, который будет статически типизирован. Или, если хотите, «единство» (обратите внимание на «i» там).
Хорошо, до латуни.
Ракетка не напечатана. Или, если хотите, «динамически типизировано» или «унифицировано» или даже «нетипизировано».
Типичная ракетка is Набрал. Он имеет систему статического типа, которая присваивает каждому выражению один тип.Его система типа «звук», что означает, что оценка программы будет соответствовать требованиям, предъявляемым системой типов: если Typed Racket (далее TR) проверяет вашу программу и назначает тип «Природный» на номер выражение, то он определенно будет оцениваться до натурального числа (при отсутствии ошибок в контролерах типа TR или в системе Racket).
Typed Racket имеет много необычных характеристик, которые позволяют коду, написанному в TR, взаимодействовать с кодом, написанным в Racket. Наиболее известным из них является «написание ввода», что позволяет программе TR обрабатывать такие типы, как (U Number String)
(то есть значение либо число или строка) без взрыва, как это делали ранее аналогичные системы типов.
Это не относится к делу: ваш вопрос касался Racket и TR, и простой ответ заключается в том, что базовый язык Racket не имеет системы статического типа, а TR делает.
[*] определение термина «статические» выходит за рамки этого сообщения :).