[racket] #<undefined> and backward compatibility
On Apr 18, 2014, at 4:30 PM, Neil Toronto wrote:
> On 04/18/2014 09:00 AM, Matthias Felleisen wrote:
>>
>> On Apr 18, 2014, at 10:48 AM, Neil Toronto <neil.toronto at gmail.com> wrote:
>>
>>> Another benefit is that Typed Racket will no longer have to consider non-function letrec bindings as having the type (U Undefined A) where A is the "real" type. (Technically, (U Undefined A) *was* the real type.)
>>
>>
>> That was my primary motivation for launching this project, motivated by nearly two decades of coping with such unions or a lack of safety. I knew you'd appreciate it -- Matthias
>
> Aww!
>
> I checked the Northeastern publications page and didn't find anything on this. Is there somewhere I can read about the sorcery that accomplishes it?
Cormac's MrSpidey suffered most from this problem. We had a special front-end for letrec that expanded it one way for static analysis (when certain conditions held) and the normal way for runtime.
Wright's Soft Scheme had the problem to a lesser extent but when inference failed it also polluted the rest of the program.
Fagan's prototype was based on the same system.
(That's what I mean when I say public criticism of papers is better than private ones, because there is a chance that others learn from the mistakes we made in the past. This just came up in Grenoble, at ETAPS.)
-- Matthias