Skip to main content

Posts

Showing posts from June, 2012

Proposal for First-class Types in Dart

Posted by Gilad Bracha First-class Types in Dart Currently Dart does not provide any access to types as objects at the base level.  We propose to provide a getter on class Object : @native Type get type; which returns a reified representation of the class of an object.  Note that the method type can be overridden in subclasses (for example, to implement a remote proxy that hides its implementation). The declaration of class Type is class Type {  @ native String toString();  String descriptor(){...} // return the simple name of the type } In other words, Type does not add any API to Object, other than the ability to get its name.  One can use toString() to obtain a description of the type (such as its name), one can test types for equality or identity, one can hash them (assuming we move forward on making all objects hashable) and that is all. The main use of these reified types is to serve as keys to the mirror system. Instances of Type are canonicalized. An identifier t

Proposal to eliminate interface declarations from Dart

Posted by Gilad Bracha Eliminating Interface Declarations from Dart This document motivates the planned phase-out of interface declarations from the Dart language, and details the required specification changes. Motivation In Dart, every class engenders an implicit interface.  Now that this feature is implemented, it is possible to actually eliminate interface declarations from the language. Interface declarations are replaced by purely abstract classes. Almost every existing interface declaration can already be mapped into an abstract class declaration with no impact whatsoever on other code, by following this formula: interface I<T> extends J, K   default F<T>{   set p=(R x);  R get p;  U f1;   final V f2;  T0 m(T1 a1, ..., Tn An);  I(S1 p1, ..., Sk pk); } maps to abstract class I’<T> implements J, K { abstract set p=(R x); abstract R get p; abstract set f1=(U _); abstract U get f1; abstract V get f2; abstract T0 m(T1 a1, .