Проверка типов во время компиляции в Common Lisp: небольшой эксперимент

В static1.lisp:

(defpackage static1 
 (:use #:cl)) 
(in-package :static1) 

(declaim (ftype (function (string string) string) concat-strings)) 
(defun concat-strings (a b)
  (format nil "~A --- ~A" a b)) 

(declaim (ftype (function (fixnum fixnum) string) concat-nums)) 
(defun concat-nums (a b)
  (concat-strings a b))
Вход в полноэкранный режим Выйти из полноэкранного режима

Затем я выполнил следующую команду:

sbcl --noinform --eval '(compile-file "static1.lisp")' --quit
Войти в полноэкранный режим Выйти из полноэкранного режима

SBCL показал это предупреждение:

; caught WARNING: 
;  Derived type of STATIC1::A is 
;    (VALUES FIXNUM &OPTIONAL), 
;  conflicting with its asserted type 
;    STRING. 
;  See also: 
;    The SBCL Manual, Node "Handling of Types"
Войти в полноэкранный режим Выйти из полноэкранного режима

Таким образом, SBCL — реализация Common Lisp, может проверять тип во время компиляции. В любом случае, программист должен читать предупреждения.

Оцените статью
Procodings.ru
Добавить комментарий