chicken-users
[Top][All Lists]
Advanced

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

Re: [Chicken-users] fixnum-specific math operators patch


From: Kon Lovett
Subject: Re: [Chicken-users] fixnum-specific math operators patch
Date: Fri, 1 Sep 2006 07:59:32 -0700

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Sep 1, 2006, at 7:15 AM, Will M Farr wrote:

Hello all,

On Sep 1, 2006, at 3:06 AM, Kon Lovett wrote:

<snip>
3. My opinion is that The Right Thing (TM) is to code the macro as follows:

(define-syntax do-range
  (syntax-rules ()
    ((_ (i aa bb) expr ...)
     (let ((a aa)
           (b bb))
       (cond-expand
        ((not unsafe)
         (if (or (not (fixnum? a))
                 (not (fixnum? b)))
             (error 'do-range "non-fixnum limits" a b))))
       (do ((i a (fx+ i 1)))
           ((fx= i b))
         expr ...)))))

This works, but it's pretty yucky. It is the simplest way, given the present behavior of the fxXXX operators, to achieve safety in safe mode (with useful, and immediate, error reporting) and speed in unsafe mode. I submitted the fixnum patch because it would implement the same behavior, but without requiring people using the fxXXX operators to think so much about these issues (and type (cond- expand ...) every time).

Perhaps this situation is familiar to other Chicken users, but I didn't realize that something like #3 was needed to be both safe and fast until yesterday. This is just food for thought---I understand if felix and others want to keep the present behavior of the fxXXX operators.

Good food. (Made me think to re-visit some older code that had some ASSumptions about the public interface arguments.)

But Felix's point about 'ensure' should help w/ syntax forms that have domain & range restrictions.

Best wishes,
Kon


Will

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.3 (Darwin)

iEYEARECAAYFAkT4StUACgkQJJNoeGe+5O4PPQCfXr70oMy9Ib+evIMf1H0Sj3UV
99AAnjye5hn+dHxo5RAIBtSuqX83EGtT
=jTMq
-----END PGP SIGNATURE-----




reply via email to

[Prev in Thread] Current Thread [Next in Thread]