[bitc-dev] BitC Records Figure fixed
Swaroop Sridhar
swaroop at cs.jhu.edu
Thu Dec 23 11:13:55 EST 2004
On Thu, 23 Dec 2004, Jonathan S. Shapiro wrote:
> Swaroop:
>
> Can you explain the orphaned lines descending from _={a:_}?
>
The lines are leading towards other descandants of _={a:_}, such as
s={a:_}, _={a:_, _:int}, etc
> FYI, the figure came through okay in both versions.
>
Do you use evolution? It was particularly bad in mozilla-mail. Next time,
(if necessary) I will send an eps created from xfig or something like
that.
>
> shap
>
> On Wed, 2004-12-22 at 20:09 -0500, Swaroop Sridhar wrote:
> > I am sorry that the ASCII figure in my mail was scrambled in my previous
> > note. It looked alright when I composed it. I am resending the whole
> > letter with the figure redrawn, I hope it will not be scrambled again.
> >
> > -----------------------------------------------------
> >
> > I think the right way to think about records is as a graph of sub-types,
> > rather than a set of types. (I know that this means multiple
> > inheritance, please read till the end)
> >
> > The definition of the type of a record in our language should be based
> > on Field Types AND Field ordering AND Field names AND record-name.
> >
> > Now, we can construct:
> > (The notation is struct_type_name={field_name:field_type,
> > field_name:field_type, ... })
> >
> >
> > _={_:_}
> > |
> > |-------|
> > | V
> > | _={a:_}
> > | |
> > | |---------------
> > | |---------- |
> > | |--------- |
> > | |
> > | |
> > | |
> > |--------| |
> > | V |
> > | _={_:'b} |
> > | | v
> > | |------> _={a:int} |
> > |
> > |
> > |
> > |--------|
> > | V
> > | s={_:_}
> > | Descendants of this branch should be explicitly declared
> > | (as in single-inheritance)
> > |
> > |
> > |
> > |-------|
> > V
> > _={_:_, _:_}
> >
> > This looks like multiple inheritance. But, this is a LIMITED kind of
> > multiple inheritance, and my first thought is that it is OK because,
> >
> > i) Named Records:
> > Two records with cannot have the same name with different
> > structures in the same scope.
> >
> > ii) Unnamed Records:
> > Two records whose structures are the same, are of the same type.
> >
> > In other words, in the above graph, each attribute of a particular type
> > can be traced back to precisely ONE parent, and hence we will avoid
> > the problems introduced by c++ style multiple inheritance.
> >
> > Now, the advantage we get from this mechanism is that
> > the type of the function
> >
> > fun x -> x.a
> >
> > is _={a:'b} -> 'b, (NOT a set of all plausible record types)
> >
> > and x could be {a:int}, {a:<whatever>}, {a:int, b:byte, c:unboxed record
> > p}, s={a:int} , etc, but does not take in {_:int, b:_}.
> >
> > And, type s = {a:int}; fun x:s -> x.a does not take any arbitrary {a:int}.
> >
> > Also, different structures with same field names are OK (unlike ML), and
> > the unification decision is based on the other parameters in determining
> > the type. We cannot drop the field names from the type anyway, whether
> > we like it or not.
> >
> > I think this solves all of the problems we raised, but I am sure it will
> > cause other problems. There should be some reason why this is not done
> > in ML. I will speak to someone in the PL lab tomorrow, or read more
> > about it to find out.
> >
> >
> > Thanks,
> > Swaroop.
> > _______________________________________________
> > bitc-dev mailing list
> > bitc-dev at coyotos.org
> > http://www.coyotos.org/mailman/listinfo/bitc-dev
> --
> Jonathan S. Shapiro <shap at eros-os.org>
>
> _______________________________________________
> bitc-dev mailing list
> bitc-dev at coyotos.org
> http://www.coyotos.org/mailman/listinfo/bitc-dev
>
More information about the bitc-dev
mailing list