Re: [plt-dev] `unsafe-fl' and unboxing

2009-10-04 Thread Eli Barzilay
On Oct 4, Dave Herman wrote: > > No! 'identifier?' does not check whether a syntax object represents > > a variable reference, given 1) identifier macros and 2) #%top > > transformers for unbound variables. If you really, really want to > > check if something is a variable reference, 'local-

Re: [plt-dev] `unsafe-fl' and unboxing

2009-10-04 Thread Doug Williams
> > No! 'identifier?' does not check whether a syntax object represents a > variable reference, given 1) identifier macros and 2) #%top transformers for > unbound variables. If you really, really want to check if something is a > variable reference, 'local-expand' it and look at the result. > Will

Re: [plt-dev] `unsafe-fl' and unboxing

2009-10-04 Thread Dave Herman
No! 'identifier?' does not check whether a syntax object represents a variable reference, given 1) identifier macros and 2) #%top transformers for unbound variables. If you really, really want to check if something is a variable reference, 'local-expand' it and look at the result. Oh, yes

Re: [plt-dev] `unsafe-fl' and unboxing

2009-10-04 Thread Ryan Culpepper
Dave Herman wrote: ;;; (real->float x) -> inexact-real? ;;; x : real? ;;; Returns an inexact real (i.e., a float) given real x. Raises an error if x ;;; is not a real. This can be used to ensure a real value is a float, even in ;;; unsafe code. (define (real->float x) (if (real? x) (

Re: [plt-dev] `unsafe-fl' and unboxing

2009-10-04 Thread Doug Williams
When I was originally thinking about it, I was thinking a macro, too. I like the real->float as an exported function for simplicity - I think most users of the science collection would be more comfortable with it in their own code. But I like the syntax of the following macro. (define-syntax (with

Re: [plt-dev] `unsafe-fl' and unboxing

2009-10-04 Thread Eli Barzilay
On Oct 4, Dave Herman wrote: > I'm not sure whether the mzscheme compiler obeys the Macro Writer's > Bill of Rights in optimizing the case where exp is just a variable > reference. -> (compile '(define (fib1 n) (if (<= n 1) n (+ (fib1 (- n 1)) (fib1 (- n 2)) #~ -> (compile '(define (fib

Re: [plt-dev] `unsafe-fl' and unboxing

2009-10-04 Thread Dave Herman
;;; (real->float x) -> inexact-real? ;;; x : real? ;;; Returns an inexact real (i.e., a float) given real x. Raises an error if x ;;; is not a real. This can be used to ensure a real value is a float, even in ;;; unsafe code. (define (real->float x) (if (real? x) (exact->inexact x)

Re: [plt-dev] `unsafe-fl' and unboxing

2009-10-04 Thread Doug Williams
I added real->float in the math functions in the science collection that I'll call. ;;; (real->float x) -> inexact-real? ;;; x : real? ;;; Returns an inexact real (i.e., a float) given real x. Raises an error if x ;;; is not a real. This can be used to ensure a real value is a float, even in ;;;

Re: [plt-dev] `unsafe-fl' and unboxing

2009-10-04 Thread Matthew Flatt
At Sun, 4 Oct 2009 14:46:48 -0400, Doug Williams wrote: > When you use mutable data structures, you live with the choice. For the > statistics routines, I use exact->inexact inside the loop at the point where > I use the value, so I'm not worried about it. Off the top of my head, the > only problem

Re: [plt-dev] `unsafe-fl' and unboxing

2009-10-04 Thread Doug Williams
I have implemented the changes in the statistics, Chebyshev evaluation, and ordinary differential equation solver routines in the science collection. They work under the pre-release 4.2.2 (4.2.1.900) and the latest nightly build (4.2.2.4). I will put the new version on the Schematics site, but not

Re: [plt-dev] `unsafe-fl' and unboxing

2009-10-04 Thread Doug Williams
When you use mutable data structures, you live with the choice. For the statistics routines, I use exact->inexact inside the loop at the point where I use the value, so I'm not worried about it. Off the top of my head, the only problem I see is that exact->inexact also works on complex numbers, so

Re: [plt-dev] `unsafe-fl' and unboxing

2009-10-04 Thread Matthew Flatt
At Sat, 3 Oct 2009 08:34:03 -0600, Matthew Flatt wrote: > (while the contract on the "checked" version ensures that the unsafe > operations will not cause a crash). Not true. Sam points out that a vector (or other sequence) can be mutable, so checking elements at the beginning does not make `varia

Re: [plt-dev] `unsafe-fl' and unboxing

2009-10-04 Thread Matthew Flatt
At Sat, 3 Oct 2009 16:54:26 -0400, Doug Williams wrote: > One more thing. Is there a one argument unsafe-fx- and unsafe-fl- to negate > a fixnum or float? [I suppose the same question would apply to > division/inversion, although I don't use it as much.] Obviously, I can use > (unsafe-fl- 0.0 x) fo

Re: [plt-dev] `unsafe-fl' and unboxing

2009-10-04 Thread Matthew Flatt
At Sat, 3 Oct 2009 15:27:57 -0400, Doug Williams wrote: > Do you think you can sneak in unsafe-fx-abs and unsafe-fl-abs? Added in 4.2.2.4 (which is the most recent nightly build). _ For list-related administrative tasks: http://list.cs.brown.edu

Re: [plt-dev] `unsafe-fl' and unboxing

2009-10-03 Thread Doug Williams
One more thing. Is there a one argument unsafe-fx- and unsafe-fl- to negate a fixnum or float? [I suppose the same question would apply to division/inversion, although I don't use it as much.] Obviously, I can use (unsafe-fl- 0.0 x) for (unsafe-fl- x). On Sat, Oct 3, 2009 at 4:07 PM, Matthew Flatt

Re: [plt-dev] `unsafe-fl' and unboxing

2009-10-03 Thread Matthew Flatt
Yes, I can add those. At Sat, 3 Oct 2009 15:27:57 -0400, Doug Williams wrote: > Matthew, > > Do you think you can sneak in unsafe-fx-abs and unsafe-fl-abs? It's a pretty > common function - at least in the science collection - that I assume would > compile nicely. [I promise not to ask for too ma

Re: [plt-dev] `unsafe-fl' and unboxing

2009-10-03 Thread Doug Williams
Matthew, Do you think you can sneak in unsafe-fx-abs and unsafe-fl-abs? It's a pretty common function - at least in the science collection - that I assume would compile nicely. [I promise not to ask for too many of these.] Doug On Sat, Oct 3, 2009 at 12:56 PM, Matthew Flatt wrote: > `inexact-r

Re: [plt-dev] `unsafe-fl' and unboxing

2009-10-03 Thread Matthew Flatt
`inexact-real?' At Sat, 3 Oct 2009 12:47:35 -0400, Doug Williams wrote: > Is there an existing contract to check for a float? For example, mean would > now be guaranteed to return a float instead of a real. It would be nice to > specify this is the contract. > > On Sat, Oct 3, 2009 at 12:36 PM, M

Re: [plt-dev] `unsafe-fl' and unboxing

2009-10-03 Thread Doug Williams
Is there an existing contract to check for a float? For example, mean would now be guaranteed to return a float instead of a real. It would be nice to specify this is the contract. On Sat, Oct 3, 2009 at 12:36 PM, Matthew Flatt wrote: > At Sat, 3 Oct 2009 12:29:01 -0400, Doug Williams wrote: > >

Re: [plt-dev] `unsafe-fl' and unboxing

2009-10-03 Thread Matthew Flatt
At Sat, 3 Oct 2009 12:29:01 -0400, Doug Williams wrote: > Are the basic unsafe-fl, unsafe-fx, and unsafe-vector-ref operations > included in 4.2.2? Yes --- except for `unsafe-fx->fl', which is new in 4.2.2.3. _ For list-related administrative task

Re: [plt-dev] `unsafe-fl' and unboxing

2009-10-03 Thread Doug Williams
About a 2x speed improvement is worth the rewrite. And, in the case of the statistics functions, for example, most always return a float result (even with non-float inputs) and would benefit from the rewrite. [Most that don't always return a float, like minimum and maximum, aren't don't much comput

[plt-dev] `unsafe-fl' and unboxing

2009-10-03 Thread Matthew Flatt
As of v4.2.2.3 (in SVN), the JIT can unbox some intermediate flonum values in `unsafe-fl' combinations. For example, in (unsafe-fl+ 1.0 (unsafe-fl- x y)) the JIT can see that `unsafe-fl-' will produce a flonum while `unsafe-fl+' consumes a flonum, so there is no reason to box the flonum and then