[E-Lang] Collection syntax ideas
Karp, Alan
alan_karp@hp.com
Mon, 26 Mar 2001 11:13:35 -0800
Dean Tribble wrote:
>
> - Without some mutable object, Accumulation is difficult or
> expensive. StringBuffers provide accumulation support for
> immutable strings.
>
The Sisal team found they could get excellent performance using specialized
compiler optimizations. I've tried to get more detail, but all the links,
including e-email, from the main page appear to be dead. I'm still trying
to find these folks.
_________________________
Alan Karp
Principal Scientist
Decision Technology Department
Hewlett-Packard Laboratories MS 1U-2
1501 Page Mill Road
Palo Alto, CA 94304
(650) 857-3967, fax (650) 857-6278
https://ecardfile.com/id/Alan_Karp
http://www.hpl.hp.com/personal/Alan_Karp/
> -----Original Message-----
> From: Dean Tribble [mailto:tribble@e-dean.com]
> Sent: Monday, March 26, 2001 12:11 AM
> To: e-lang@eros-os.org
> Subject: [E-Lang] Collection syntax ideas
>
>
> I'm going to list various (possibly contradictory) collection-related
> thoughts that have not yet gelled into a proposal, in the hopes of
> provoking other people. These are part of an attempt to
> simultaneously
> solve several problems:
>
> - Integrating external collection libraries smoothly.
> Usually, syntactic
> support for creation typically makes some types easy to
> create, and others
> difficult.
> - The creation syntax does not mesh with the variant creation syntax.
>
> - Syntactic support for collections should be integrated with
> quasi-literal
> support.
>
> 33) With a sufficiently rich creation syntax, variant
> creation could be
> just a simple quasi literal: [map, key => value, othermap]
> could create a
> map from two other maps and a key-value pair. Note that the
> syntax is
> substantially more expressive than just message sending
> because it easily
> expresses adding multiple values.
>
> 34) Collection literal expressions should support proving an optional
> collection maker, in the same way that quasiliteral strings do (e.g.,
> `hello, $name` or e`$world hello`). For example, SplayMap[k1
> => v1, k2 =>
> v2, othermap] is like that above literal creation, but with
> my own maker
> provided.
>
> 34a) The default maker should be named in the style of
> uriGetters, allowing
> an implementation or package to by default use another
> implementation. For
> example, 'def Map__maker := <import:hydro.MapMaker> or some such.
>
> 35) Immutable collections could implement the protocol for a
> collection
> factory, thus unifying literal creation and variant creation.
> map[k=>v] is
> just asking 'map' to construct a new instance with the
> following literal
> map data. (Yes, this in some ways contradicts 33, and
> reveals something
> important: the syntax in 33 does not have a way to determine the
> implementation for the resulting collection, whereas this does).
>
> 36) For each interesting type of collection, there would be a
> collection
> maker type that could accumulate elements into the
> collection, and return
> snapshots of the built collection. This would be the
> StringBuffer to the
> immutable collection's String. This taps into the main place
> right now
> that people actually get trained in and understand the
> distinction and value.
>
> 37) The operations on a collection maker would include add(k,v),
> addAll(map), etc. Literals would expand to create the
> appropriate maker
> instance, invoke the above methods to construct the instance,
> and extract
> it. However, that same maker could instead be used
> explicitly (just as
> StringBuffer can) for accumulation; for example, if the elements are
> generated within a loop. It's this last advantage that makes
> me prefer
> generating code to having a quasi parser parse a string
> (though that to is
> perfectly possible).
>
> 38) Disallow storage of 'null' as either keys or values of
> Maps. This then
> allows map[k => ] to straightforwardly represent map without the key.
>
> 39) All of the above expressions have assumed no support for
> Update. Thus, Update would be:
> map := map[key=>value, otherMap]
>
> 40) To make a consistent syntax between maps and lists for
> when an element
> should be expanded in place, use '...' after the collection to be
> expanded. Thus, the above example would be:
> map := map[key=>value, otherMap...]
> This is unfortunately inconsistent with strings, but so nice
> to read....
>
> 41) Very abstract idea: Immutable collections correspond to
> Editions in
> Xanadu. The mutable variables referring to a collection
> would be a Work,
> which can be changed to point at a new Edition. This
> suggests looking at
> the Slot as a Work, and thinking about what would like to do
> with it. An
> example might be considering the "+=" ilk or operation to be
> an operation
> on the Slot (as MarkM sent in his message).
>
> More later.
> dean
>
> _______________________________________________
> e-lang mailing list
> e-lang@mail.eros-os.org
> http://www.eros-os.org/mailman/listinfo/e-lang
>