<p dir="ltr">Yes, I think this would allow all the optimizations that Eric talked about.</p>
<p dir="ltr">Sam</p>
<div class="gmail_quote">On Jun 13, 2014 4:26 AM, "Robby Findler" <<a href="mailto:robby@eecs.northwestern.edu">robby@eecs.northwestern.edu</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Would it be useful to get blame information back from a value, just<br>
like you can currently get the contract back?<br>
<br>
Robby<br>
<br>
On Tue, Jun 10, 2014 at 11:53 AM, Matthias Felleisen<br>
<<a href="mailto:matthias@ccs.neu.edu">matthias@ccs.neu.edu</a>> wrote:<br>
><br>
> I was thinking of associating the contract with the type from which it comes and no that's not hash-consing. And if it's slower, too bad. -- Matthias<br>
><br>
><br>
><br>
><br>
><br>
> On Jun 10, 2014, at 12:47 PM, Eric Dobson <<a href="mailto:eric.n.dobson@gmail.com">eric.n.dobson@gmail.com</a>> wrote:<br>
><br>
>> On Tue, Jun 10, 2014 at 6:15 AM, Matthias Felleisen<br>
>> <<a href="mailto:matthias@ccs.neu.edu">matthias@ccs.neu.edu</a>> wrote:<br>
>>><br>
>>> On Jun 9, 2014, at 6:02 PM, Eric Dobson <<a href="mailto:eric.n.dobson@gmail.com">eric.n.dobson@gmail.com</a>> wrote:<br>
>>><br>
>>>>><br>
>>>>> Eric, are you talking about changing the proxy values that wrap HO/mutable<br>
>>>>> contracted values?<br>
>>>> Yes. I want the proxy values to include information about who agreed<br>
>>>> to the contract in addition to the contract agreed to.<br>
>>>><br>
>>>> I actually realize that I might need more than just the contract<br>
>>>> agreed to because of how TR changes the generated contract to remove<br>
>>>> checks for what it guarantees, so that info is not in the contract.<br>
>>>> But I believe that can be added back as a structure property on the<br>
>>>> contract.<br>
>>><br>
>>><br>
>>> Would some form of hash-consing contracts work here? -- Matthias<br>
>>><br>
>><br>
>> I don't think so. But not sure exactly what you are proposing.<br>
>><br>
>> The issue is that there are 4 contracts here and 2 of them currently<br>
>> do not exist at runtime. The 4 are TRs checks/promises on an<br>
>> export/import. (Using import for a value flowing into an exported<br>
>> function). The promise contracts do not currently exist as removing<br>
>> them was my previous optimization (They never fail). What I want to do<br>
>> is change the check on import from (array/c symbol?) to (if/c<br>
>> (protected>? (array/c symbol?)) any/c (array/c symbol?)). Where<br>
>> (protected>? x/c) checks if TR already promised something stronger<br>
>> than x/c.<br>
>><br>
>> I believe that you are proposing that we can use the identity of the<br>
>> contract returned by value-contract to determine what the promised<br>
>> contract would have been. This does not work as (Array Symbol) and<br>
>> (Array Float) both get translated to (array/c any/c) for export, and<br>
>> we would want to lookup different promised contracts for them. We<br>
>> could use weak hash map as an extra field but that seems like it would<br>
>> be slow.<br>
><br>
><br>
> _________________________<br>
>   Racket Developers list:<br>
>   <a href="http://lists.racket-lang.org/dev" target="_blank">http://lists.racket-lang.org/dev</a><br>
_________________________<br>
  Racket Developers list:<br>
  <a href="http://lists.racket-lang.org/dev" target="_blank">http://lists.racket-lang.org/dev</a><br>
</blockquote></div>