[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Error Signalling



    Date: Sun, 29 Jun 86 18:18:21 PDT
    From: franz!fizzy!jkf@kim.Berkeley.EDU


    >> It's *probably* not a portability problem that (safety 1) means something
    >> different in different implementations.  PCLS uses the speed settings to
    >> switch various kinds of optimizations, but we didn't have much intuition
    >> about what the difference between (speed 2) and (speed 3) should be
    >> ...

    We also didn't know what should be done for the various settings of
    speed, size and safety so we put the decision back in the users'
    hands.
    Our compiler can perform a number of optimizations, some of the
    optimizations involve removing safety checks and for these we felt
    that the user should be aware of what they are and should have control
    over when they are done.
    Therefore each optimization is controlled by a function of safety,
    size and speed.  The user is free to redefine the functions if he
    doesn't like the default function.  Here is an example of the function
    which controls one of the optimizations discussed recently: that of 
    not checking the number of arguments passed to the function:

    (defvar verify-argument-count-switch
       #'(lambda (safety size speed)
	    (declare (ignore size))
	    (or (< speed 3)
		(> safety 0)))
      "bound to a function which given safety, size and speed returns t
       if the compiler should generate code to verify that the correct number
       of arguments were passed to a function.  
       Note: an argument count check is always done if there are optional
       or rest arguments.")

Nit: that isn't in the LISP: or USER: package, I hope, but SYS: or some
other private package.


    -john foderaro
     Franz Inc.