Constantine Plotnikov | 7 Jun 2011 22:31
Picon

Question about E's history.

Hi!


One of very nice features of E is that operation of listening for promise with when returns a promise, so asynchronous operations could be composed and it enables functional asynchronous programming. I'm interested whether it is E's original invention or E has borrowed the idea from somewhere?

I'm also interested if there is some document that describes origins of core ideas on which E's concurrency model is based.

Thanks,
Constantine
_______________________________________________
e-lang mailing list
e-lang@...
http://www.eros-os.org/mailman/listinfo/e-lang
Mark S. Miller | 7 Jun 2011 23:35
Picon
Favicon

Re: Question about E's history.

On Tue, Jun 7, 2011 at 1:31 PM, Constantine Plotnikov <constantine.plotnikov <at> gmail.com> wrote:

Hi!

One of very nice features of E is that operation of listening for promise with when returns a promise, so asynchronous operations could be composed and it enables functional asynchronous programming. I'm interested whether it is E's original invention or E has borrowed the idea from somewhere?

I have never seen it before E. And it was not in E for many of E's first years. I distinctly remember Mark Seaborn, cc'ed, suggesting it. I think he suggested it on e-lang but I'm not sure. I know it happened between 1998 and 2003, but also do not know more precisely when. Async programming in E was *much* improved as a result.



I'm also interested if there is some document that describes origins of core ideas on which E's concurrency model is based.

Concurrency Among Strangers at <erights.org/talks/promises/> and its expansion in parts 3 (core ideas) and chapter 23 (origins) of my thesis.


 

Thanks,
Constantine

_______________________________________________
e-lang mailing list
e-lang-r2jiIPW7MOYEUp5O9OQuKg@public.gmane.org
http://www.eros-os.org/mailman/listinfo/e-lang




--
    Cheers,
    --MarkM
_______________________________________________
e-lang mailing list
e-lang@...
http://www.eros-os.org/mailman/listinfo/e-lang
Tom Van Cutsem | 11 Jun 2011 21:01
Picon

Re: Question about E's history.

Hi Constantine,


Having looked at various actor languages, I have not previously encountered the type of asynchronous composability that when-expressions provide. So E may be the first language to have introduced this feature.

About E's origins: in the paper "Concurrency among strangers", there is a section titled "From objects to actors and back again" (section 11) which I feel is a good reference to work that inspired E: <http://www.erights.org/talks/promises/index.html>

In general, I believe the actor model served as the greatest source of inspiration for E: <http://en.wikipedia.org/wiki/Actor_model>

I know from Mark that promises in Liskov's Argus language were also a source of inspiration for promises in E. However, Argus's promises, unlike E's promises, support synchronous "claiming" or "touching" of the promise.

Kind regards,
Tom

2011/6/7 Constantine Plotnikov <constantine.plotnikov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Hi!

One of very nice features of E is that operation of listening for promise with when returns a promise, so asynchronous operations could be composed and it enables functional asynchronous programming. I'm interested whether it is E's original invention or E has borrowed the idea from somewhere?

I'm also interested if there is some document that describes origins of core ideas on which E's concurrency model is based.

Thanks,
Constantine

_______________________________________________
e-lang mailing list
e-lang-r2jiIPW7MOYEUp5O9OQuKg@public.gmane.org
http://www.eros-os.org/mailman/listinfo/e-lang


_______________________________________________
e-lang mailing list
e-lang@...
http://www.eros-os.org/mailman/listinfo/e-lang
Mark S. Miller | 11 Jun 2011 22:23
Picon
Favicon

Re: Question about E's history.



On Sat, Jun 11, 2011 at 12:01 PM, Tom Van Cutsem <tomvc.be <at> gmail.com> wrote:
Hi Constantine,

Having looked at various actor languages, I have not previously encountered the type of asynchronous composability that when-expressions provide. So E may be the first language to have introduced this feature.

About E's origins: in the paper "Concurrency among strangers", there is a section titled "From objects to actors and back again" (section 11) which I feel is a good reference to work that inspired E: <http://www.erights.org/talks/promises/index.html>

In general, I believe the actor model served as the greatest source of inspiration for E: <http://en.wikipedia.org/wiki/Actor_model>

I know from Mark that promises in Liskov's Argus language were also a source of inspiration for promises in E.

Not inspiration, but precedence and therefore credit. In 1989, Dean, I, and others independently came up with a promise pipelining model similar to Liskov and Shrira's promises as part of the Xanadu (aka Udanax Gold) work <http://web.archive.org/web/20071023111712/http://www.sunless-sea.net/Transcripts/promise.html>. Afterwards, we found out about their 1988 paper <http://portal.acm.org/citation.cfm?id=54016>, and so have consistently given them credit for inventing the idea first, as they did.


However, Argus's promises, unlike E's promises, support synchronous "claiming" or "touching" of the promise.

IIRC, the Udanax promises were both pipelined and potentially blocking in the same sense as Liskov & Shrira's.

Dean's Joule language, IIRC, begun shortly afterwards, had pipelining inspired by our Udanax experience, but generalized to by symmetric and fully non-blocking based on Joule's main inspirations: Actors and Concurrent Logic Programming. (See that "From Actors to Objects and Back Again" history Tom referred to.) Joule's promises are "non-blocking" in the same sense that Hewitt and Baker's old futures were "non-blocking" -- they're in a language with pervasive fine-grained concurrency, where there's essentially no built-in notion of sequentiality to enable anything to be conventionally "blocking". Whether these count as "non-blocking promises" depends on your definitions. AFAIK, Joule is the first language to combine Actor-like pervasively concurrent futures/promises with Liskov-like promise pipelining. (Confusingly, the old Actors literature does use the term "pipelining", but for a distinct concept.)

Original-E's unique achievement, which Tom draws attention to here, is that it was the first to invent non-blocking promises, via "when", in the context of concurrency added to a locally sequential-imperative language. All previous attempts we know of sequential-imperative + promises provided for blocking or "forcing". 

This elegant invention happened when Doug Barnes first created Original-E, by shoehorning Joule-inspired concurrency onto a Java base in an intense two week efforts driven by a business panic, after a contractual dispute between Agorics (creator, provider, and supporter of Joule, where I was) and Electric Communities (using Joule to create a decentralized secure virtual reality, where Doug Barnes was). I only joined E.C. a year or so later, in 1995, whereupon I took over leadership of the Original-E effort.

In 1998, with help from Chip Morningstar and Danfuzz Bornstien, I designed (the language now known as) E based on experiences with (the language now known as) Original E, convinced E.C.'s board to open source E, and left E.C. to form erights.org. Sometime afterwards, Mark Seaborn suggested having E's "when" return a promise for its eventual result, resulting in the modern "when" construct.


Kind regards,
Tom

Hi!

One of very nice features of E is that operation of listening for promise with when returns a promise, so asynchronous operations could be composed and it enables functional asynchronous programming. I'm interested whether it is E's original invention or E has borrowed the idea from somewhere?

I'm also interested if there is some document that describes origins of core ideas on which E's concurrency model is based.

Thanks,
Constantine

_______________________________________________
e-lang mailing list
e-lang-Ch164+GDJMs@public.gmane.orgos-os.org
http://www.eros-os.org/mailman/listinfo/e-lang



_______________________________________________
e-lang mailing list
e-lang-r2jiIPW7MOYEUp5O9OQuKg@public.gmane.org
http://www.eros-os.org/mailman/listinfo/e-lang




--
    Cheers,
    --MarkM
_______________________________________________
e-lang mailing list
e-lang@...
http://www.eros-os.org/mailman/listinfo/e-lang
Constantine Plotnikov | 12 Jun 2011 01:54
Picon

AsyncScala: E-like concurrency in Scala

Hello All!

For those, who liked E concurrency model, but also like strongly typed languages, there is now an option available: AsyncScala

The project is combination of ideas from E and Occam, and I have already discussed the ideas for the project on this mailing list. I have managed to implement it on library level, and I believe that implementing it in other languages that have a reasonable closures should be easy as well. Some ideas could be even back-ported to E.  

Primary area for which it is targeted is IO-bound applications. There is already NIO-library that is almost as easy to program to as with normal synchronous sockets. Also tried to port some ideas from Rx presentation as streams library.


Thanks,

Constantine

_______________________________________________
e-lang mailing list
e-lang@...
http://www.eros-os.org/mailman/listinfo/e-lang
Jonathan Rees | 12 Jun 2011 04:47
Favicon

Re: Question about E's history.

Is this relevant as precedent? It was pretty well developed by 1984
http://en.wikipedia.org/wiki/MultiLisp
but I don't know how well developed it was regarding pipelining. I suspect they got the 'promise' idea from Hewitt.

Jonathan

On Jun 11, 2011, at 4:23 PM, Mark S. Miller wrote:

On Sat, Jun 11, 2011 at 12:01 PM, Tom Van Cutsem <tomvc.be <at> gmail.com> wrote:
Hi Constantine,

Having looked at various actor languages, I have not previously encountered the type of asynchronous composability that when-expressions provide. So E may be the first language to have introduced this feature.

About E's origins: in the paper "Concurrency among strangers", there is a section titled "From objects to actors and back again" (section 11) which I feel is a good reference to work that inspired E: <http://www.erights.org/talks/promises/index.html>

In general, I believe the actor model served as the greatest source of inspiration for E: <http://en.wikipedia.org/wiki/Actor_model>

I know from Mark that promises in Liskov's Argus language were also a source of inspiration for promises in E.

Not inspiration, but precedence and therefore credit. In 1989, Dean, I, and others independently came up with a promise pipelining model similar to Liskov and Shrira's promises as part of the Xanadu (aka Udanax Gold) work <http://web.archive.org/web/20071023111712/http://www.sunless-sea.net/Transcripts/promise.html>. Afterwards, we found out about their 1988 paper <http://portal.acm.org/citation.cfm?idT016>, and so have consistently given them credit for inventing the idea first, as they did.
...
_______________________________________________
e-lang mailing list
e-lang@...
http://www.eros-os.org/mailman/listinfo/e-lang
Mark S. Miller | 12 Jun 2011 11:11
Picon
Favicon

Re: Question about E's history.

On Sat, Jun 11, 2011 at 7:47 PM, Jonathan Rees <jar-yMXdqOOGdVisTnJN9+BGXg@public.gmane.org> wrote:

Is this relevant as precedent? It was pretty well developed by 1984
http://en.wikipedia.org/wiki/MultiLisp

Their promises were blocking, as were many other promises adapted to sequential languages. Among such blocking promises for sequential languages, their's many have be innovative -- I don't know. But in regards to the issues raised in this thread, no I don't think it was first on anything relevant.

The overall language's concurrency is essentially shared memory multithreading added to Scheme. Even though promises could have help them avoid the shared memory mistake, they didn't.

 
but I don't know how well developed it was regarding pipelining.

It had no pipelining.
 
I suspect they got the 'promise' idea from Hewitt.

Yes. Hewitt and Baker.
 

Jonathan

On Jun 11, 2011, at 4:23 PM, Mark S. Miller wrote:

On Sat, Jun 11, 2011 at 12:01 PM, Tom Van Cutsem <tomvc.be <at> gmail.com> wrote:
Hi Constantine,

Having looked at various actor languages, I have not previously encountered the type of asynchronous composability that when-expressions provide. So E may be the first language to have introduced this feature.

About E's origins: in the paper "Concurrency among strangers", there is a section titled "From objects to actors and back again" (section 11) which I feel is a good reference to work that inspired E: <http://www.erights.org/talks/promises/index.html>

In general, I believe the actor model served as the greatest source of inspiration for E: <http://en.wikipedia.org/wiki/Actor_model>

I know from Mark that promises in Liskov's Argus language were also a source of inspiration for promises in E.

Not inspiration, but precedence and therefore credit. In 1989, Dean, I, and others independently came up with a promise pipelining model similar to Liskov and Shrira's promises as part of the Xanadu (aka Udanax Gold) work <http://web.archive.org/web/20071023111712/http://www.sunless-sea.net/Transcripts/promise.html>. Afterwards, we found out about their 1988 paper <http://portal.acm.org/citation.cfm?idT016>, and so have consistently given them credit for inventing the idea first, as they did.
...

_______________________________________________
e-lang mailing list
e-lang-r2jiIPW7MOYEUp5O9OQuKg@public.gmane.org
http://www.eros-os.org/mailman/listinfo/e-lang




--
    Cheers,
    --MarkM
_______________________________________________
e-lang mailing list
e-lang@...
http://www.eros-os.org/mailman/listinfo/e-lang
Dean Tribble | 12 Jun 2011 11:38

Re: Question about E's history.

Some E promise history:


E promises derive primarily from Joule channels, by way of the Xanadu promise system. Joule was a massively concurrent programming language that was a deliberate cross between actors and concurrent logic programming languages.  The Xanadu promise system was created by applying Joule channels to a sequential language for pipe-lined, client-server communication. It was contemporary with and independent of the Argus promises system. The E language generalized that to "islands of sequential programming communicating with promises".

On Sat, Jun 11, 2011 at 7:47 PM, Jonathan Rees <jar-yMXdqOOGdVisTnJN9+BGXg@public.gmane.org> wrote:
Is this relevant as precedent? It was pretty well developed by 1984
http://en.wikipedia.org/wiki/MultiLisp
but I don't know how well developed it was regarding pipelining. I suspect they got the 'promise' idea from Hewitt.

Jonathan

On Jun 11, 2011, at 4:23 PM, Mark S. Miller wrote:

On Sat, Jun 11, 2011 at 12:01 PM, Tom Van Cutsem <tomvc.be <at> gmail.com> wrote:
Hi Constantine,

Having looked at various actor languages, I have not previously encountered the type of asynchronous composability that when-expressions provide. So E may be the first language to have introduced this feature.

About E's origins: in the paper "Concurrency among strangers", there is a section titled "From objects to actors and back again" (section 11) which I feel is a good reference to work that inspired E: <http://www.erights.org/talks/promises/index.html>

In general, I believe the actor model served as the greatest source of inspiration for E: <http://en.wikipedia.org/wiki/Actor_model>

I know from Mark that promises in Liskov's Argus language were also a source of inspiration for promises in E.

Not inspiration, but precedence and therefore credit. In 1989, Dean, I, and others independently came up with a promise pipelining model similar to Liskov and Shrira's promises as part of the Xanadu (aka Udanax Gold) work <http://web.archive.org/web/20071023111712/http://www.sunless-sea.net/Transcripts/promise.html>. Afterwards, we found out about their 1988 paper <http://portal.acm.org/citation.cfm?idT016>, and so have consistently given them credit for inventing the idea first, as they did.
...

_______________________________________________
e-lang mailing list
e-lang-r2jiIPW7MOYEUp5O9OQuKg@public.gmane.org
http://www.eros-os.org/mailman/listinfo/e-lang


_______________________________________________
e-lang mailing list
e-lang@...
http://www.eros-os.org/mailman/listinfo/e-lang
Tom Van Cutsem | 12 Jun 2011 11:39
Picon

Re: Question about E's history.


I suspect they got the 'promise' idea from Hewitt.

Yes. Hewitt and Baker.

The earliest reference I can find on the notion of "futures" was in Hewitt and Baker's 1977 paper named "The incremental garbage collection of processes" <http://dspace.mit.edu/handle/1721.1/41969>.

In that paper, they seem to credit Friedman and Wise, and Hibbard, for a similar idea.

Halstead, in his 1985 paper on Multilisp, cites the Baker & Hewitt 1977 paper, but also explicitly relates his futures to Hibbard's "eventuals" in Algol 68. There is this footnote in Halstead's paper:

"These “futures” greatly resemble the “eventual values” of Hibbard’s Algol 68 [39]. The principal difference is that eventual values are declared as a separate data type, distinct from the type of the value they take on, whereas futures cannot be distinguished from the type of the value they take on. This difference reflects the contrast between Algol’s philosophy of type checking at compile time and the Lisp philosophy of run-time tagging of data."

So it seems the principal novelty of Multilisp's futures was that they were designed as transparent stand-ins for their values.

It's interesting to note the many design dimensions of promises/futures that have been explored over the years, including:
- whether "touching" or "claiming" a future/promise is blocking or non-blocking
- whether "touching" or "claiming" a future/promise is implicit (by performing an operation that needs its value) or explicit (e.g. future.get() in Java, promise claiming in Argus)
- whether the type Future<T> is distinct from the type T, in statically typed languages
- whether futures/promises are created implicitly as the return value of a message send or explicitly as in the Multilisp form "(future expr)"
- whether or not "pipelining" is supported
- whether or not futures/promises support proper exception propagation
- ...

Which only goes to say that "promise" and "future" are very overloaded terms :-)

Cheers,
Tom
 
 

Jonathan

On Jun 11, 2011, at 4:23 PM, Mark S. Miller wrote:

On Sat, Jun 11, 2011 at 12:01 PM, Tom Van Cutsem <tomvc.be <at> gmail.com> wrote:
Hi Constantine,

Having looked at various actor languages, I have not previously encountered the type of asynchronous composability that when-expressions provide. So E may be the first language to have introduced this feature.

About E's origins: in the paper "Concurrency among strangers", there is a section titled "From objects to actors and back again" (section 11) which I feel is a good reference to work that inspired E: <http://www.erights.org/talks/promises/index.html>

In general, I believe the actor model served as the greatest source of inspiration for E: <http://en.wikipedia.org/wiki/Actor_model>

I know from Mark that promises in Liskov's Argus language were also a source of inspiration for promises in E.

Not inspiration, but precedence and therefore credit. In 1989, Dean, I, and others independently came up with a promise pipelining model similar to Liskov and Shrira's promises as part of the Xanadu (aka Udanax Gold) work <http://web.archive.org/web/20071023111712/http://www.sunless-sea.net/Transcripts/promise.html>. Afterwards, we found out about their 1988 paper <http://portal.acm.org/citation.cfm?idT016>, and so have consistently given them credit for inventing the idea first, as they did.
...

_______________________________________________
e-lang mailing list
e-lang-Ch164+GDJMs@public.gmane.orgos-os.org
http://www.eros-os.org/mailman/listinfo/e-lang




--
    Cheers,
    --MarkM

_______________________________________________
e-lang mailing list
e-lang-r2jiIPW7MOYEUp5O9OQuKg@public.gmane.org
http://www.eros-os.org/mailman/listinfo/e-lang


_______________________________________________
e-lang mailing list
e-lang@...
http://www.eros-os.org/mailman/listinfo/e-lang
Dean Tribble | 12 Jun 2011 11:50

Re: Question about E's history.

It's interesting to note the many design dimensions of promises/futures that have been explored over the years, including:
- whether "touching" or "claiming" a future/promise is blocking or non-blocking
- whether "touching" or "claiming" a future/promise is implicit (by performing an operation that needs its value) or explicit (e.g. future.get() in Java, promise claiming in Argus)
- whether the type Future<T> is distinct from the type T, in statically typed languages
- whether futures/promises are created implicitly as the return value of a message send or explicitly as in the Multilisp form "(future expr)"
- whether or not "pipelining" is supported
- whether or not futures/promises support proper exception propagation

Which only goes to say that "promise" and "future" are very overloaded terms :-)
 
Certainly true. I always strongly tie it to the blocking issue: to me "futures" are blocking, "promises" are non-blocking. To my mind, that distinction is the most crucial, because it is a prerequisite for pipelining support. I realize that the literature uses the terms inconsistently, but I don't know of a more convenient terminology to use to distinguish those cases.
_______________________________________________
e-lang mailing list
e-lang@...
http://www.eros-os.org/mailman/listinfo/e-lang

Gmane