2010-10-13 3 views
1

Это простой способ.Common Lisp: удаление недостижимого кода

(let ((x)) 
(if (typep x 'null) "a" "b")) 

генерировать предупреждение о недопустимом удалении кода. Предположительно, компилятор достаточно умен, чтобы понять, что он выполняется только один раз, и тип всегда будет нулевым. Обычно я бы не писал этот код, но в этом случае я просто не хочу получать уведомление об удалении кода в своем выпуске. Как я могу закрыть SBCL об этом конкретном предупреждении? В качестве примечания, я также не смог найти правильный синтаксис, чтобы сказать sbcl, чтобы установить безопасность на 0, чтобы я мог переполнять целое (образовательное) ... Возможно, связанное?

Спасибо, Конрад

+0

Вы уже пробовали '(объявить (оптимизировать (безопасность 0)))' для части разрешения-переполнения вашего вопроса? –

ответ

2

Wrap независимо компилирует код в обработчик-затруднительное с обработчиком sb-ext:compiler-note, который обрабатывается с muffle-warning. Смотрите также http://www.sbcl.org/manual/#Controlling-Verbosity

SBCL имеет модульную арифметику, так что вы можете получить очень быструю арифметику, объявляя типы переменных и оборачивать операции в (logand mask (+ x y)), где маска #xFFFF или #xFFFFFFFF или любой другой. См. Также http://www.sbcl.org/manual/#Modular-arithmetic