История изменений
Исправление den73, (текущая версия) :
Warning появляется в случае, если типы противоречат. А так противоречия нет, существуют такие number, которые являются fixnum.
Ладно, допустим это - осознанный выбор создателей SBCL. Но типизация-то всё равно статическая.
Если я задаю непересекающиеся диапазоны целых в foo и bar, например, (integer 3 17) и (integer 100 200), то я получаю ошибку компиляции, а если они пересекаются, то не получаю. А если путаю float и number (к-рый фактически оказывается целым), то при safety 0 получаю unhandled exception.
Т.е. выбор странный (хотя его можно понять), а типизация статическая. Чем не статическая? Просто такая вот идея про то, что пересекающиеся диапазоны считаем совместимыми при передаче.
На самом то деле, можно рассмотреть конкатенацию строк. Строго говоря, сложение строк длины не более 10 - это строка длины не более 20. Хотя на самом-то деле мы можем надеяться, что эта строка будет длины не более 15, по каким-то причинам, и есть языки, которые позволяют так складывать (язык хранимых процедур Firebird).
Исходная версия den73, :
Warning появляется в случае, если типы противоречат. А так противоречия нет, существуют такие number, которые являются fixnum.
Ладно, допустим это - осознанный выбор создателей SBCL. Но типизация-то всё равно статическая.
Если я задаю непересекающиеся диапазоны целых в foo и bar, например, (integer 3 17) и (integer 100 200), то я получаю ошибку компиляции, а если они пересекаются, то не получаю. А при safety 0 получаю unhandled exception.
Т.е. выбор странный (хотя его можно понять), а типизация статическая. Чем не статическая? Просто такая вот идея про то, что пересекающиеся диапазоны считаем совместимыми при передаче.
На самом то деле, можно рассмотреть конкатенацию строк. Строго говоря, сложение строк длины не более 10 - это строка длины не более 20. Хотя на самом-то деле мы можем надеяться, что эта строка будет длины не более 15, по каким-то причинам, и есть языки, которые позволяют так складывать (язык хранимых процедур Firebird).