They are continuation-local state. <br><br>On Wednesday, August 10, 2011, Ismael Figueroa Palet <<a href="mailto:ifigueroap@gmail.com">ifigueroap@gmail.com</a>> wrote:<br>> Are continuation marks thread- and continuation- safe as parameters?<br>
><br>> 2011/8/10 Robby Findler <<a href="mailto:robby@eecs.northwestern.edu">robby@eecs.northwestern.edu</a>><br>><br>> A parameter is implementing using continuation marks (and other things).<br>><br>
> The short version of the story is that you want to say<br>><br>> (with-continuation-mark 'key 'value e)<br>><br>> instead of<br>><br>> (parameterize ([param 'value]) e)<br>><br>> and then when the exception is raised, you'll find that it has a field<br>
> that holds the continuation marks in effect at the point where the<br>> value was raised. You can then use that to extract the 'value you<br>> stored with the 'key.<br>><br>> There is more information in the manuals about these primitives that<br>
> you'll want to read but don't hesitate to ask if you get stuck.<br>> (Overall, it sounds like it should be much easier to use this approach<br>> than the one you were thinking of before.)<br>><br>> Robby<br>
><br>> On Wed, Aug 10, 2011 at 11:25 AM, Ismael Figueroa Palet<br>> <<a href="mailto:ifigueroap@gmail.com">ifigueroap@gmail.com</a>> wrote:<br>>> Hi again Robby,<br>>> I really don't know much about continuation marks. I want the value A to be<br>
>> embedded on the exception structure, because I check that value with a<br>>> modified with-handlers macro. I thought that using parameters A will behave<br>>> like a dynamically scoped identifier.<br>
>> What are the differences, if any, of using continuation marks versus using<br>>> parameters??<br>>> Thanks<br>>><br>>> 2011/8/9 Robby Findler <<a href="mailto:robby@eecs.northwestern.edu">robby@eecs.northwestern.edu</a>><br>
>>><br>>>> Could you put the value into a continuation mark and then, when you<br>>>> catch the exception, look in the continuation marks to get it out<br>>>> again?<br>>>><br>
>>> Robby<br>>>><br>>>> On Tue, Aug 9, 2011 at 3:56 PM, Ismael Figueroa Palet<br>>>> <<a href="mailto:ifigueroap@gmail.com">ifigueroap@gmail.com</a>> wrote:<br>>>> ><br>
>>> ><br>>>> > 2011/8/9 Robby Findler <<a href="mailto:robby@eecs.northwestern.edu">robby@eecs.northwestern.edu</a>><br>>>> >><br>>>> >> On Tue, Aug 9, 2011 at 3:01 PM, Ismael Figueroa Palet<br>
>>> >> <<a href="mailto:ifigueroap@gmail.com">ifigueroap@gmail.com</a>> wrote:<br>>>> >> > 2011/8/4 Robby Findler <<a href="mailto:robby@eecs.northwestern.edu">robby@eecs.northwestern.edu</a>><br>
>>> >> >><br>>>> >> >> The blame assignment stuff is wired pretty deep into the contract<br>>>> >> >> system. There isn't currently any way to change that aspect of the<br>
>>> >> >> system without doing what you've done below.<br>>>> >> >><br>>>> >> >> If you can say more about how/why you want to change it, tho, there<br>>>> >> >> maybe some extension to the current API that would work for you and<br>
>>> >> >> that we'd be willing to maintain going forward.<br>>>> >> ><br>>>> >> > I defined a new-exn struct to represent exceptions and defined a<br>>>> >> > raise<br>
>>> >> > macro<br>>>> >> > that wraps Racket's raise to throw a new-exn value. Also, I need to<br>>>> >> > raise<br>>>> >> > the exception thrown by raise-blame-error inside a parameterize<br>
>>> >> > expression.<br>>>> >> > I want to access and modify a parameter that will be used to<br>>>> >> > construct<br>>>> >> > the<br>>>> >> > new-exn value.<br>
>>> >><br>>>> >> It sounds like you're maybe adding a field to the exn record? Can you<br>>>> >> say more about what that field is and how you compute its value? (Or<br>>>> >> if I'm just wrong about that?)<br>
>>> ><br>>>> > Yes, the end result I want is to tag the exn record with a value. That<br>>>> > value<br>>>> > is stored in a parameter A. I want to make raise-blame-error to always<br>
>>> > raise<br>>>> > an exception tagged with A+1.<br>>>> ><br>>>> > --<br>>>> > Ismael<br>>>> ><br>>>> ><br>>><br>>><br>>><br>
>> --<br>>> Ismael<br>>><br>>><br>><br>> --<br>> Ismael<br>><br>>