need some clarification on compile-time type vs. run-time type

Brendan Eich brendan at
Sun Nov 11 22:35:46 PST 2007

On Nov 11, 2007, at 4:26 PM, Brendan Eich wrote:

> Part of the thinking in
> resolving #103 in favor of type expression on right of 'is' was to
> future-proof against a world where type and value expressions are
> combined somehow. I don't believe that world will come to pass,
> though. If it should, sooner is better. Restricting 'is' as #103-as-
> resolved did isn't making anyone too happy right now :-/.

Of course, Lars cut the Gordian knot in email just a bit later today:

   type T
   var v

   x is T               // if T is type then the compiler knows that,
                        // otherwise next case applies
   x is v               // reflect::typeOf(x).isSubtypeOf(v)
                        // fails if v not a Type object
   x is { ... }         // interpret as record type
   x is [ ... ]         // interpret as array type
   x is ( ... )         // interpret as union type
   x is function ...    // interpret as function type
   x is null            // interpret as null type
   x is undefined       // interpret as undefined type
   x is like T          // T must be a type expression anyhow

This allows arbitrary value expressions on the right of 'is', just so  
long as they don't look like type expressions in their leftmost  
token. Everyone wins. Yay?


More information about the Es4-discuss mailing list