[imp-hackers] Declarations in compilers (feedback welcome)

Nikodemus Siivola nikodemus at random-state.net
Thu Dec 29 15:08:20 UTC 2011


On 29 December 2011 16:04, Juan Jose Garcia-Ripoll
<juanjose.garciaripoll at googlemail.com> wrote:

> Conceptually, in the model above, I do not see the THE as a loophole, but
> rather as two different things: variable declarations = type checked
> assignments, value declarations = compiler hints.

Fair enough. SBCL disagrees, but it and CMUCL stand apart from most
implementations when it comes to handling of types.

> For instance, if I invoke
> a function with a THE argument, SBCL will not generate a check: (FOO (THE
> FIXNUM X)) is just (FOO X), am I wrong? (I just checked in Ubuntu's SBCL)

Actually, SBCL /should/ generate the check, unless you are using the
interpreter. If it didn't then I'm guessing the Ubuntu version is an
old one:

CL-USER> (defun foo (x) x)
CL-USER> (foo (the fixnum t))
; in: FOO (THE FIXNUM T)
;     (THE FIXNUM T)
;
; caught WARNING:
;   Constant T conflicts with its asserted type FIXNUM.
;   See also:
;     The SBCL Manual, Node "Handling of Types"
;
; compilation unit finished
;   caught 1 WARNING condition
; Evaluation aborted on #<SIMPLE-TYPE-ERROR expected-type: FIXNUM datum: T>.

...plus entry to debugger is the expected behaviour.

Both THE generates and and assignment to a variable whose type has
been declared generates a identical cast node in SBCL's IR.

Cheers,

 -- Nikodemus




More information about the implementation-hackers mailing list