Hi Stefan,

Here's a use-case to motivate Lazy Iterables (or streams):

Suppose you want to implement rubber-banding on a Canvas.  Right now you
can't do that elegantly with data binding.

To implement rubber-banding, one must capture MouseDown, MouseMove, and
MouseUp.  Right now, one might create a state machine object where the
object's state is manipulated by each individual event.  This gets clumsy
and hard to debug fast.

I've thought it would be nice to, on mouse-down, create an Iterable stream
tracking MouseMove and MouseUp.  MouseUp would be registered as the event
terminating the Iterable stream.  One could then simply call a function
with the coordinates of the MouseDown, along with the Iterable.  The
function can iterate over the events in the stream, process the
rubber-banding operations, and return an "Object created" (or maybe
"Objects selected") message when the rubber band operation completes.

The advantage is that all stateful operations stay inside a single function
that just loops over an Iterable.  You get functional purity in a highly
stateful environment.

One could apply the same logic to the Streams API, with the advantage that
the looping is also abstracted away (the whole rubber-band operation
becomes a reduce over the event stream).

No more time to write tonight.

For calculations, I agree that ComputedValue is nice, and I really like the
ideas in the Cells Manifesto
<http://smuglispweeny.blogspot.com/2008/02/cells-manifesto.html>.


Regards,

Dave

On Wed, May 11, 2016 at 9:31 AM Stefan Xenos <[email protected]> wrote:

> I'm definitely a fan of making Obervables interoperable with as many
> different programming models as possible... but I wouldn't personally
> choose streams or iterables as the mechanism for combining observables - at
> least not in my own code.
>
> That would create a programming model very much like rxjava -- which works
> fine, but it's quite hard to debug and it requires memorizing a lot of
> operators. My own preference is to use ComputedValue as the mechanism for
> combining observables.
>
> For example:
>
> IObservableValue<String> fullName = ComputedValue::create(() -> {return
> firstName.getValue() + " " + lastName.getValue();})
>
> It's definitely less general than a stream-based approach, but I find the
> code much more readable in the (very common) cases where it works. That
> said: we should definitely support utilities that make it easy to
> interoperate between observables and steams, etc.
>
> I'm not familiar with infinite iterables. How would you actually combine
> them?
>
> On Wed, May 11, 2016 at 9:42 AM David Orme <[email protected]>
> wrote:
>
>> I'll have to look at the code to appreciate the implications of this.
>>
>> House about these thoughts:
>>
>> - Create adapters for IObservables to Java 8's streams
>> - Adapt IObservables to lazy infinite Iterables using a Java
>> continuations library and provide ways to compose groups of Iterables into
>> combined streams.  Then reactive code can be expressed as loops over
>> Iterables and state can stay with the code that operates on it.
>>
>> See also: the Cells Manifesto.  Sorry, I'm typing on my phone so don't
>> have the link handy.
>>
>> Dave
>>
>>
>> On Wed, May 11, 2016, 8:09 AM Stefan Xenos <[email protected]> wrote:
>>
>>> The Bind class described there would provide a fluent form way to create
>>> bindings, but IMO an even better approach would be to use ISideEffect as a
>>> replacement for bindings and data binding context. It can do everything
>>> bindings could, but it's much more flexible. Simon has already written a
>>> number of examples.
>>>
>>>   - Stefan
>>>
>>> On Wed, May 11, 2016 at 9:01 AM David Orme <
>>> [email protected]> wrote:
>>>
>>>> I have interest in picking this up again, but have a few other things
>>>> on my plate to attend to first.  (My blog has been idle for awhile but if
>>>> you watch Planet Eclipse, hopefully sooner than later you'll see that
>>>> change.)  On the other hand, my current employer gives my cycles to work on
>>>> this sort of thing.
>>>>
>>>> What were you wanting to see happen?  I have ideas too...
>>>>
>>>> (I was one of data binding's original architects along with Boris
>>>> Bokowski.)
>>>>
>>>> Dave
>>>>
>>>> On Wed, May 11, 2016, 5:45 AM Lars Vogel <[email protected]>
>>>> wrote:
>>>>
>>>>> Hi Erdal,
>>>>>
>>>>> AFAIK nobody is currently working on this branch. AFAIK Stefan Xenos
>>>>> (cc) cherry-picked and reworked some of the generics works from this
>>>>> repo but any further enhancement of databinding did occur in the main
>>>>> platform UI repository.
>>>>>
>>>>> Best regards, Lars
>>>>>
>>>>> On Fri, May 6, 2016 at 5:58 PM, Erdal Karaca <
>>>>> [email protected]> wrote:
>>>>> > Hi all,
>>>>> > I checked out the git repo of the "New Binding API", but it seems
>>>>> there is
>>>>> > not much activity.
>>>>> >
>>>>> > The DataBindingContext class provided a possibility for aggregating
>>>>> status
>>>>> > of its bindings. With the new proposal this does not seem to be
>>>>> possible
>>>>> > anymore.
>>>>> >
>>>>> > What are the plans for the "New Binding API"?
>>>>> >
>>>>> > https://wiki.eclipse.org/JFace_Data_Binding/The_New_Binding_API
>>>>> >
>>>>> > Best regards,
>>>>> > Erdal
>>>>> >
>>>>> > _______________________________________________
>>>>> > e4-dev mailing list
>>>>> > [email protected]
>>>>> > To change your delivery options, retrieve your password, or
>>>>> unsubscribe from
>>>>> > this list, visit
>>>>> > https://dev.eclipse.org/mailman/listinfo/e4-dev
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Eclipse Platform UI and e4 project co-lead
>>>>> CEO vogella GmbH
>>>>>
>>>>> Haindaalwisch 17a, 22395 Hamburg
>>>>> Amtsgericht Hamburg: HRB 127058
>>>>> Geschäftsführer: Lars Vogel, Jennifer Nerlich de Vogel
>>>>> USt-IdNr.: DE284122352
>>>>> Fax (040) 5247 6322, Email: [email protected], Web:
>>>>> http://www.vogella.com
>>>>> _______________________________________________
>>>>> e4-dev mailing list
>>>>> [email protected]
>>>>> To change your delivery options, retrieve your password, or
>>>>> unsubscribe from this list, visit
>>>>> https://dev.eclipse.org/mailman/listinfo/e4-dev
>>>>
>>>>
_______________________________________________
e4-dev mailing list
[email protected]
To change your delivery options, retrieve your password, or unsubscribe from 
this list, visit
https://dev.eclipse.org/mailman/listinfo/e4-dev

Reply via email to