Re: [racket-dev] Release for v5.0.2 has begun

2010-10-25 Thread Doug Williams
Here is one example.

 (make-discrete-histogram
  (case- (-r ((n1 integer?)
(n2 (and/c integer?
   (=/c n1)))
(dynamic? boolean?))
   discrete-histogram?)
  (-r ((n1 integer?)
(n2 (and/c integer?
   (=/c n1
   discrete-histogram?)
  (- discrete-histogram?)))

This code predates optional and keyword parameters. In cases like this, I
can rewrite them using optional parameters.

But, in the random distribution functions it is the first argument that is
optional and that won't work. So, for example the flat (i.e., uniform)
distribution includes a contract:

  (case- (-r ((r random-source?)
(a real?)
(b (/c a)))
   real?)
  (-r ((a real?)
(b (/c a)))
   real?)))

I'm not sure that one can be easily rewritten in the current contract
system. [I think I would have to move the b  a constraint into the code
itself in the current contract system. Or, change the argument order and
break backward compatibility.]

Doug


On Sun, Oct 24, 2010 at 6:23 PM, Robby Findler
ro...@eecs.northwestern.eduwrote:

 The new case- only supports simple contracts, that's right. If you
 have more complex ones that it would be helpful to support (and can
 share them), that would help us guide our efforts.

 Thanks,
 Robby

 On Sun, Oct 24, 2010 at 7:04 PM, Doug Williams
 m.douglas.willi...@gmail.com wrote:
  The main problem I'm having is that the code has been around awhile and
  hasn't been fully converted to Racket - in particular it uses the scheme
  language (instead of the racket language) and uses (require (lib
 contract)).
  All of that seems to mean that I can't just add #:flat? #t - I get a
 message
  that vector-of doesn't accept keyword arguments. And, the case-
 contracts
  use -r, which apparently isn't supported anymore. All that means that I
  can't just switch to the racket language and new contracts.  So, I have
 some
  conversion work to do.
 
  On the case- problem, it seems it no longer supports anything but -.
 Is
  there something I am missing there?
 
  Doug
 
  On Sun, Oct 24, 2010 at 8:53 AM, Matthew Flatt mfl...@cs.utah.edu
 wrote:
 
  At Fri, 22 Oct 2010 21:31:43 -0600, Doug Williams wrote:
   Matthew, would it make more sense to have unsafe-vector-ref (and
 related
   functions) be the more general function and unsafe-vector*-ref be the
   one
   that doesn't work  on chaperoned vectors? That is just swap the
   definitions.
   That way user code that is already using unsafe-vector-ref (etc) will
   continue to work.
  
   As it stands, existing code that has unsafe-vector-ref (etc) will
 often
   still work (in the sense of not getting any error or crashing), but
 just
   gives the wrong results. For example, if you run science-test.ss from
   the
   examples directory in the science collection, there are no errors.
 But,
   some
   of the answers are wrong - for example the very first one, the gamma
   function. [In other cases, like the FFT routines, there are either
   run-time
   errors or crashes.]
  
   Anyway, if it isn't too late, I think swapping the definitions would
   make
   more sense and be safer.
 
  I've gone back and forth. I agree that it would be safer, but
  `vector-ref' is safer still, and I think of the job of `unsafe-X' as
  providing the lowest possible overhead over `X'. It seems nicer to me
  to have `*' mean somewhere in between rather than even faster. Then
  again, it seems bad that `vector?' (plus index bounds) isn't enough to
  guard `unsafe-vector-ref'.
 
  Overall, at this point in the release cycle, I'm inclined to leave
  things where they are (i.e., it may be too late). But let's hear more
  opinions from those who use `unsafe-vector-ref' and
  unsafe-vector*-ref'.
 
 
 
  _
   For list-related administrative tasks:
   http://lists.racket-lang.org/listinfo/dev
 

_
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/dev

Re: [racket-dev] Release for v5.0.2 has begun

2010-10-25 Thread Sam Tobin-Hochstadt
On Mon, Oct 25, 2010 at 10:06 AM, Doug Williams
m.douglas.willi...@gmail.com wrote:

   (case- (-r ((r random-source?)
     (a real?)
     (b (/c a)))
    real?)
   (-r ((a real?)
     (b (/c a)))
    real?)))

 I'm not sure that one can be easily rewritten in the current contract
 system. [I think I would have to move the b  a constraint into the code
 itself in the current contract system. Or, change the argument order and
 break backward compatibility.]

This can be written as a dependent contract, but with worse error messages.

(-i ([r/a (or/c random-source? real?)] [a/b real?])
   ([b/opt (r/a a/b) (if (random-source? r/a) (/c a/b) none/c)])
   [result real?])

-- 
sam th
sa...@ccs.neu.edu
_
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/dev


Re: [racket-dev] Release for v5.0.2 has begun

2010-10-25 Thread Robby Findler
Thanks, that's a great example. The idea (at least from the contract's
point of view) is that there are two different functions with one name
that have two different arities, I think.

So maybe the right way to bring back case- is that contracts that
match functions should come with some way to find out what arities
they can match (this is kind of there implicitly now, but probably
needs to be explicit) and then say that either there is no overlap or
there is an ordering so that, given a function with some specific
arity (arities) it gets slotted into particular parts of the contracts
inside the case-. (thinking a little bit, I guess that we'd have to
say that there should not be any overlap or else we'd have to kind of
mix and match parts of contracts to parts of functions that seems
pretty complex (if that's too opaque I can give an example to explain
what I meant))

Robby

On Mon, Oct 25, 2010 at 9:06 AM, Doug Williams
m.douglas.willi...@gmail.com wrote:
 Here is one example.

  (make-discrete-histogram
   (case- (-r ((n1 integer?)
     (n2 (and/c integer?
    (=/c n1)))
     (dynamic? boolean?))
    discrete-histogram?)
   (-r ((n1 integer?)
     (n2 (and/c integer?
    (=/c n1
    discrete-histogram?)
   (- discrete-histogram?)))

 This code predates optional and keyword parameters. In cases like this, I
 can rewrite them using optional parameters.

 But, in the random distribution functions it is the first argument that is
 optional and that won't work. So, for example the flat (i.e., uniform)
 distribution includes a contract:

   (case- (-r ((r random-source?)
     (a real?)
     (b (/c a)))
    real?)
   (-r ((a real?)
     (b (/c a)))
    real?)))

 I'm not sure that one can be easily rewritten in the current contract
 system. [I think I would have to move the b  a constraint into the code
 itself in the current contract system. Or, change the argument order and
 break backward compatibility.]

 Doug


 On Sun, Oct 24, 2010 at 6:23 PM, Robby Findler ro...@eecs.northwestern.edu
 wrote:

 The new case- only supports simple contracts, that's right. If you
 have more complex ones that it would be helpful to support (and can
 share them), that would help us guide our efforts.

 Thanks,
 Robby

 On Sun, Oct 24, 2010 at 7:04 PM, Doug Williams
 m.douglas.willi...@gmail.com wrote:
  The main problem I'm having is that the code has been around awhile and
  hasn't been fully converted to Racket - in particular it uses the scheme
  language (instead of the racket language) and uses (require (lib
  contract)).
  All of that seems to mean that I can't just add #:flat? #t - I get a
  message
  that vector-of doesn't accept keyword arguments. And, the case-
  contracts
  use -r, which apparently isn't supported anymore. All that means that I
  can't just switch to the racket language and new contracts.  So, I have
  some
  conversion work to do.
 
  On the case- problem, it seems it no longer supports anything but -.
  Is
  there something I am missing there?
 
  Doug
 
  On Sun, Oct 24, 2010 at 8:53 AM, Matthew Flatt mfl...@cs.utah.edu
  wrote:
 
  At Fri, 22 Oct 2010 21:31:43 -0600, Doug Williams wrote:
   Matthew, would it make more sense to have unsafe-vector-ref (and
   related
   functions) be the more general function and unsafe-vector*-ref be the
   one
   that doesn't work  on chaperoned vectors? That is just swap the
   definitions.
   That way user code that is already using unsafe-vector-ref (etc) will
   continue to work.
  
   As it stands, existing code that has unsafe-vector-ref (etc) will
   often
   still work (in the sense of not getting any error or crashing), but
   just
   gives the wrong results. For example, if you run science-test.ss from
   the
   examples directory in the science collection, there are no errors.
   But,
   some
   of the answers are wrong - for example the very first one, the gamma
   function. [In other cases, like the FFT routines, there are either
   run-time
   errors or crashes.]
  
   Anyway, if it isn't too late, I think swapping the definitions would
   make
   more sense and be safer.
 
  I've gone back and forth. I agree that it would be safer, but
  `vector-ref' is safer still, and I think of the job of `unsafe-X' as
  providing the lowest possible overhead over `X'. It seems nicer to me
  to have `*' mean somewhere in between rather than even faster. Then
  again, it seems bad that `vector?' (plus index bounds) isn't enough to
  guard `unsafe-vector-ref'.
 
  Overall, at this point in the release cycle, I'm inclined to leave
  things where they are (i.e., it may be too late). But let's hear more
  opinions from those who use `unsafe-vector-ref' and
  unsafe-vector*-ref'.
 
 
 
  _
   For list-related administrative 

Re: [racket-dev] Release for v5.0.2 has begun

2010-10-25 Thread Matthew Flatt
At Fri, 22 Oct 2010 21:31:43 -0600, Doug Williams wrote:
 Matthew, would it make more sense to have unsafe-vector-ref (and related
 functions) be the more general function and unsafe-vector*-ref be the one
 that doesn't work  on chaperoned vectors? That is just swap the definitions.
 That way user code that is already using unsafe-vector-ref (etc) will
 continue to work.

Ok, let's swap them --- even for 5.0.2.

_
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/dev


Re: [racket-dev] Release for v5.0.2 has begun

2010-10-25 Thread Robby Findler
On Mon, Oct 25, 2010 at 11:28 AM, Doug Williams
m.douglas.willi...@gmail.com wrote:
 I had always assumed that case-lambda just checked alternatives in order
 until one matched - like a cond. But, that was just an assumption on my part
 and subject to being absolutely wrong. [But, if it is correct I would expect
 case- to allow overlapping contracts.]

That is correct. Unfortunately, it gets more complex with contracts,
since each contract matches a set of arities, not just a single arity
(in the function call case, you always have a specific number of
arguments at the call site). So you'd have to either postpone the
decision about how to compose the contracts until the callsite comes
or figure out how to kind of pull the contracts apart and put them
back together in sometimes a complex way.

For example, say you have these contracts put together:

(case- (- integer? any)
(- integer? integer? integer? any)
(-* () #:rest (listof boolean?) any))

then zero, two, and four-or-more all go to the last case, but figuring
out that you could have written this:

(case- (- any)
(- integer? any)
(- boolean? boolean? any)
(- integer? integer? integer? any)
(-* (boolean? boolean? boolean? boolean?) #:rest (listof
boolean?) any))

is not so easy for us (especially since the #:rest argument is kind of hidden).

 Another thing I just noticed is that the documentation says that case-lambda
 is provided by scheme/base and scheme - and doesn't mention racket/base or
 racket. To me that implies that isn't available in the racket language, but
 I'm sure it is. Is that a documentation error? But lambda says the same
 thing, so I guess it is a misinterpretation on my part of what scheme versus
 racket means in the docs.

I'm seeing racket/base and racket, not scheme/base and scheme. Either
way, that seems problematic.

Robby
_
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/dev


Re: [racket-dev] Release for v5.0.2 has begun

2010-10-24 Thread Matthew Flatt
At Fri, 22 Oct 2010 21:31:43 -0600, Doug Williams wrote:
 Matthew, would it make more sense to have unsafe-vector-ref (and related
 functions) be the more general function and unsafe-vector*-ref be the one
 that doesn't work  on chaperoned vectors? That is just swap the definitions.
 That way user code that is already using unsafe-vector-ref (etc) will
 continue to work.
 
 As it stands, existing code that has unsafe-vector-ref (etc) will often
 still work (in the sense of not getting any error or crashing), but just
 gives the wrong results. For example, if you run science-test.ss from the
 examples directory in the science collection, there are no errors. But, some
 of the answers are wrong - for example the very first one, the gamma
 function. [In other cases, like the FFT routines, there are either run-time
 errors or crashes.]
 
 Anyway, if it isn't too late, I think swapping the definitions would make
 more sense and be safer.

I've gone back and forth. I agree that it would be safer, but
`vector-ref' is safer still, and I think of the job of `unsafe-X' as
providing the lowest possible overhead over `X'. It seems nicer to me
to have `*' mean somewhere in between rather than even faster. Then
again, it seems bad that `vector?' (plus index bounds) isn't enough to
guard `unsafe-vector-ref'.

Overall, at this point in the release cycle, I'm inclined to leave
things where they are (i.e., it may be too late). But let's hear more
opinions from those who use `unsafe-vector-ref' and
unsafe-vector*-ref'.

_
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/dev


Re: [racket-dev] Release for v5.0.2 has begun

2010-10-24 Thread Robby Findler
The new case- only supports simple contracts, that's right. If you
have more complex ones that it would be helpful to support (and can
share them), that would help us guide our efforts.

Thanks,
Robby

On Sun, Oct 24, 2010 at 7:04 PM, Doug Williams
m.douglas.willi...@gmail.com wrote:
 The main problem I'm having is that the code has been around awhile and
 hasn't been fully converted to Racket - in particular it uses the scheme
 language (instead of the racket language) and uses (require (lib contract)).
 All of that seems to mean that I can't just add #:flat? #t - I get a message
 that vector-of doesn't accept keyword arguments. And, the case- contracts
 use -r, which apparently isn't supported anymore. All that means that I
 can't just switch to the racket language and new contracts.  So, I have some
 conversion work to do.

 On the case- problem, it seems it no longer supports anything but -.  Is
 there something I am missing there?

 Doug

 On Sun, Oct 24, 2010 at 8:53 AM, Matthew Flatt mfl...@cs.utah.edu wrote:

 At Fri, 22 Oct 2010 21:31:43 -0600, Doug Williams wrote:
  Matthew, would it make more sense to have unsafe-vector-ref (and related
  functions) be the more general function and unsafe-vector*-ref be the
  one
  that doesn't work  on chaperoned vectors? That is just swap the
  definitions.
  That way user code that is already using unsafe-vector-ref (etc) will
  continue to work.
 
  As it stands, existing code that has unsafe-vector-ref (etc) will often
  still work (in the sense of not getting any error or crashing), but just
  gives the wrong results. For example, if you run science-test.ss from
  the
  examples directory in the science collection, there are no errors. But,
  some
  of the answers are wrong - for example the very first one, the gamma
  function. [In other cases, like the FFT routines, there are either
  run-time
  errors or crashes.]
 
  Anyway, if it isn't too late, I think swapping the definitions would
  make
  more sense and be safer.

 I've gone back and forth. I agree that it would be safer, but
 `vector-ref' is safer still, and I think of the job of `unsafe-X' as
 providing the lowest possible overhead over `X'. It seems nicer to me
 to have `*' mean somewhere in between rather than even faster. Then
 again, it seems bad that `vector?' (plus index bounds) isn't enough to
 guard `unsafe-vector-ref'.

 Overall, at this point in the release cycle, I'm inclined to leave
 things where they are (i.e., it may be too late). But let's hear more
 opinions from those who use `unsafe-vector-ref' and
 unsafe-vector*-ref'.



 _
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/dev

_
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/dev

Re: [racket-dev] Release for v5.0.2 has begun

2010-10-24 Thread Stevie Strickland
On Oct 24, 2010, at 8:04 PM, Doug Williams wrote:
 On the case- problem, it seems it no longer supports anything but -.  Is 
 there something I am missing there?

This is a current limitation for case- as provided by racket/contract.  When I 
tackle the conversion of case- to proxies/chaperones, I plan on also removing 
this limitation if possible.  If it works out, case- should work with contract 
values given for the clauses (and also any type of arrow contract value) 
instead of being limited to direct uses of the simple - combinator.

Stevie
_
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/dev


Re: [racket-dev] Release for v5.0.2 has begun

2010-10-24 Thread Robby Findler
On Sun, Oct 24, 2010 at 7:42 PM, Stevie Strickland sstri...@ccs.neu.edu wrote:
 On Oct 24, 2010, at 8:04 PM, Doug Williams wrote:
 On the case- problem, it seems it no longer supports anything but -.  Is 
 there something I am missing there?

 This is a current limitation for case- as provided by racket/contract.  When 
 I tackle the conversion of case- to proxies/chaperones, I plan on also 
 removing this limitation if possible.  If it works out, case- should work 
 with contract values given for the clauses (and also any type of arrow 
 contract value) instead of being limited to direct uses of the simple - 
 combinator.

What would happen if I had a contract like this:

  (case- (- integer? integer?) (- boolean? boolean?))

Robby
_
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/dev

Re: [racket-dev] Release for v5.0.2 has begun

2010-10-21 Thread Noel Welsh
On Thu, Oct 21, 2010 at 1:44 PM, Doug Williams
m.douglas.willi...@gmail.com wrote:
 Noel and Neil, were the unsafe-flround and unsafe-fllog problems you saw
 just with the newer nightly builds or with the released version of Racket?
 [I haven't had any problems with the released versions.]

Nightly builds. It was flround, not unsafe-flround, that caused crashes for me.

N.
_
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/dev


Re: [racket-dev] Release for v5.0.2 has begun

2010-10-20 Thread Doug Williams
I downloaded the pre-release version this morning - 10/20 (I believe it was
a build from 10/16). The plot package and plot extensions in the science
collection all work as expected. But, I am getting different numeric answers
for some of my science collection routines (for example, the gamma function)
and some of my newer code (for example, FFT) either fails with an error
message or DrRacket just dies. All of this code uses unsafe operations and
the problem may lie there somewhere. I'll try digging more deeply this
evening.

Doug

On Sat, Oct 16, 2010 at 6:53 PM, Ryan Culpepper ry...@ccs.neu.edu wrote:

 The release process for v5.0.2 has begun: the `release' branch was
 created for any work that is left and is now bumped to v5.0.1.900.  You
 can go on using the `master' branch as usual, it is now bumped to
 v5.0.2.1 (to avoid having two different trees with the same version).

 If you have any bug-fixes and changes that need to go in the release
 then make sure to specify that in the commit message or mail me the
 commit SHA1s.  You can `git checkout release' to try it out directly if
 needed -- but do not try to push commits on it (the server will forbid
 it).

 Note that nightly builds will go on as usual (as v5.0.2.1), and
 pre-release builds will be available shortly at

  http://pre.racket-lang.org/release/

 Please tell me if you think that this should be announced on the
 users list for wider testing.
 --
 Ryan Culpepper
 _
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/dev

_
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/dev

Re: [racket-dev] Release for v5.0.2 has begun

2010-10-20 Thread Matthias Felleisen

Are they typed? 


On Oct 20, 2010, at 10:39 AM, Doug Williams wrote:

 I downloaded the pre-release version this morning - 10/20 (I believe it was a 
 build from 10/16). The plot package and plot extensions in the science 
 collection all work as expected. But, I am getting different numeric answers 
 for some of my science collection routines (for example, the gamma function) 
 and some of my newer code (for example, FFT) either fails with an error 
 message or DrRacket just dies. All of this code uses unsafe operations and 
 the problem may lie there somewhere. I'll try digging more deeply this 
 evening.
 
 Doug
 
 On Sat, Oct 16, 2010 at 6:53 PM, Ryan Culpepper ry...@ccs.neu.edu wrote:
 The release process for v5.0.2 has begun: the `release' branch was
 created for any work that is left and is now bumped to v5.0.1.900.  You
 can go on using the `master' branch as usual, it is now bumped to
 v5.0.2.1 (to avoid having two different trees with the same version).
 
 If you have any bug-fixes and changes that need to go in the release
 then make sure to specify that in the commit message or mail me the
 commit SHA1s.  You can `git checkout release' to try it out directly if
 needed -- but do not try to push commits on it (the server will forbid
 it).
 
 Note that nightly builds will go on as usual (as v5.0.2.1), and
 pre-release builds will be available shortly at
 
  http://pre.racket-lang.org/release/
 
 Please tell me if you think that this should be announced on the
 users list for wider testing.
 --
 Ryan Culpepper
 _
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/dev
 
 _
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/dev

_
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/dev


Re: [racket-dev] Release for v5.0.2 has begun

2010-10-20 Thread John Clements

On Oct 20, 2010, at 7:39 AM, Doug Williams wrote:

 I downloaded the pre-release version this morning - 10/20 (I believe it was a 
 build from 10/16). The plot package and plot extensions in the science 
 collection all work as expected. But, I am getting different numeric answers 
 for some of my science collection routines (for example, the gamma function) 
 and some of my newer code (for example, FFT) either fails with an error 
 message or DrRacket just dies. All of this code uses unsafe operations and 
 the problem may lie there somewhere. I'll try digging more deeply this 
 evening.

Focus first on uses of unsafe-vector-ref and unsafe-vector-set!. (Not the fx 
and fl variants, just the plain ones).  I wound up removing these from the FFT 
code in order to get it to work.  

Check out bug PR 11264. 

Also, very late flash of insight: my response (getting rid of unsafe-vector-ref 
and unsafe-vector-set!) might explain my performance issues with the FFT 
library.

John



 Doug
 
 On Sat, Oct 16, 2010 at 6:53 PM, Ryan Culpepper ry...@ccs.neu.edu wrote:
 The release process for v5.0.2 has begun: the `release' branch was
 created for any work that is left and is now bumped to v5.0.1.900.  You
 can go on using the `master' branch as usual, it is now bumped to
 v5.0.2.1 (to avoid having two different trees with the same version).
 
 If you have any bug-fixes and changes that need to go in the release
 then make sure to specify that in the commit message or mail me the
 commit SHA1s.  You can `git checkout release' to try it out directly if
 needed -- but do not try to push commits on it (the server will forbid
 it).
 
 Note that nightly builds will go on as usual (as v5.0.2.1), and
 pre-release builds will be available shortly at
 
  http://pre.racket-lang.org/release/
 
 Please tell me if you think that this should be announced on the
 users list for wider testing.
 --
 Ryan Culpepper
 _
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/dev
 
 _
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/dev



smime.p7s
Description: S/MIME cryptographic signature
_
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/dev

[racket-dev] Release for v5.0.2 has begun

2010-10-16 Thread Ryan Culpepper
The release process for v5.0.2 has begun: the `release' branch was
created for any work that is left and is now bumped to v5.0.1.900.  You
can go on using the `master' branch as usual, it is now bumped to
v5.0.2.1 (to avoid having two different trees with the same version).

If you have any bug-fixes and changes that need to go in the release
then make sure to specify that in the commit message or mail me the
commit SHA1s.  You can `git checkout release' to try it out directly if
needed -- but do not try to push commits on it (the server will forbid
it).

Note that nightly builds will go on as usual (as v5.0.2.1), and
pre-release builds will be available shortly at

  http://pre.racket-lang.org/release/

Please tell me if you think that this should be announced on the
users list for wider testing.
-- 
Ryan Culpepper
_
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/dev