LINUX.ORG.RU

История изменений

Исправление alienclaster, (текущая версия) :

А в динамике функция не знает, кто её вызывает.

В Racket пошли на компромисс: контракты проверяются только на границе модуля.

Ну, я о таком «компромиссе» и писал, когда говорил что проверяем на входе и на выходе. А все что внутри считаем трастовым.

То есть если add-item вызывается внутри модуля (обработки сортированных массивов), то контракт не проверяется.

Это логично, хотя и да, компромиссное решение.

Но если он экспортирован и вызывается так, как я описал, контракт применяется на каждый вызов.

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

У add-item нет возможности узнать, что данные пришли из другого вызова add-item.

Опять же, чисто мое предположение - что это всего лишь особенность реализации (рантайма).

Исходная версия alienclaster, :

А в динамике функция не знает, кто её вызывает.

В Racket пошли на компромисс: контракты проверяются только на границе модуля.

Ну, я о таком «компромиссе» и писал, когда говорил что проверяем на входе и на выходе. А все что внутри считаем трастовым.

То есть если add-item вызывается внутри модуля (обработки сортированных массивов), то контракт не проверяется.

Это логично, если

Но если он экспортирован и вызывается так, как я описал, контракт применяется на каждый вызов.

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

У add-item нет возможности узнать, что данные пришли из другого вызова add-item.

Опять же, чисто мое предположение - что это всего лишь особенность реализации (рантайма).