On Sep 28, 2010, at 10:09 AM, Eli Barzilay wrote:

> An hour ago, John Clements wrote:
>> On Sep 28, 2010, at 8:23 AM, Eli Barzilay wrote:
>>> Can we please not have this??  The whole point of having uniform names
>>> is that you can use require/provide things easily so there's no need
>>> for a library.
>> Sure, I don't feel strongly about it.  Done.
> Thanks(!)
> I should have clarified further -- what we have at the momemt is a
> consisten use of an "unsafe" part in the path for potentially
> segfaulting functionality.  So having some unsafe/safe thing doesn't
> make much sense (and begs the question about undebugging some things
> with unsafe/safe/unsafe).
> In any case, I think that something that would have made you happier
> is for the `unsafe/foo' libraries to provide the same name as the safe
> ones.  This way you'd only need to toggle the `unsafe/' prefix on or
> off.  (I'd like that change too, but we're probably deep enough in the
> current setup to change that...)

I thought about this, but I really like the current setup, where the 
unsafe-ness must be indicated at the use of the function.  I think this is 
especially true of common primitives like "vector-length".  If I were debugging 
a piece of code, it would never occur to me that an ordinary-looking call to 
'vector-length' might actually be unsafe.

>> To be clear, my use case is this: I'm trying to debug a seg fault in
>> a large library, with >500 uses of 'unsafe-' operators.  I want to
>> see whether using the corresponding safe variants eliminates the
>> crash.  The global search and replace is a bit of a pain; replacing
>> racket/unsafe/ops with racket/unsafe/safe-ops is much easier.
>> Naturally, though, you can always roll your own as needed.
> First, I think that what was suggested earlier should work -- changing
> this:
>  (require unsafe/foo)
>  ->
>  (require (prefix-in unsafe- foo))

This doesn't work for (require racket/unsafe/ops); that's why I wanted to add 

> But the more common use case (which I've done in a number of places)
> is to use `foo' first, make sure the code runs and write a ton of
> tests, then turn the require into one that *drops* the `unsafe-'
> prefix.

This frightens me, for the reasons I describe above.

> A slightly different approach is in `racket/private/sort' -- define
> names that are used throughout, and switch the definition from a safe
> one to an unsafe one.

That sounds like what you described before, though perhaps I'm not 
understanding you.


Attachment: smime.p7s
Description: S/MIME cryptographic signature

  For list-related administrative tasks:

Reply via email to