[racket] #<undefined> and backward compatibility

From: Matthias Felleisen (matthias at ccs.neu.edu)
Date: Fri Apr 18 16:58:22 EDT 2014

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

Posted on the users mailing list.