On Sun, Jun 19, 2016 at 9:32 AM, Carsten Haitzler <ras...@rasterman.com> wrote:
> On Sat, 18 Jun 2016 23:06:35 -0300 Felipe Magno de Almeida
> <felipe.m.alme...@gmail.com> said:

[snip]

>> I have explained in the email exactly how they would be translated to C++,
>> JS and Lua by _not_ being a object used directly by the user translated
>> automatically by Eolian. So I don't know what you mean. JS will be used
>
> that is the ONLY way for them to work right. to be translated. have you looked
> at c+ promises/futures in stdc++? there is no cancel for starters. there are
> wait methods that we just don't support. you CAN'T map an eina_promise or an
> eo_promise to c++ promises/futures. they are disjoint sets.

I don't know why you think that's the only way. First of all, if
Eolian can generate,
why then bindings writing manual code couldn't?

I think you're confusing by thinking I have to instantiate a
std::future/std::promise
for this to be useful and/or used by C++ developers. future/promises are
part of the STL, which means Standard _Template_ Library, so the concrete
type doesn't have to one from the std:: namespace, I can create one myself
and that will be used just the same. This is exactly how all of eina is
bound to C++ right now, I do not return a std::list, but a
efl::eina::list, which
_is_ a list container, i.e. it models the Container concept from the STL,
however it has more push_back/insert/etc overloads that also accept
a naked-pointer or std::unique_ptr for transferring ownership, and treat
value_type as T and not T* (it is like the boost.ptr_container library).

Spite of it being a different type and having some differences, it works
exactly as the user expects and can be used with all STL algorithms.
That's exactly how efl::eina::future/promise will work. We will have
a efl::eina::future and efl::eina::promise class templates that will
wrap the Eina/Eo_Future* handle/object. They will not, and cannot,
be exposed directly, specially for C++ where it will be a template and
not a C++ class, otherwise we will have void* all over the place and
that would _really_ _really_ suck in C++ to use void*.

For JS it will be exactlly the same, it will not return a new Promise(),
but one that will be manually bound to have the same API + things
we extended it with. The class will be a 'thenable'
(https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve#Resolving_thenables_and_throwing_Errors)
and will
interoperate with normal JavaScript code that expects ECMAScript
Promises. So whoever uses our code will be able to cancel _and_
do the things they are used to with a Promise.

It is true they are all different, however, over a solid, well-defined,
asynchronous primitive we can build all the translations.

Lua is quite different, and IMO, that's what will make it even more
awesome. For this to work, the binding will just generate differently
when it sees a promise<T> in the method, the generated method
will call a eina/eo_promise_then on the promise that the C function
will return with a callback notifying the current coroutine can be
scheduled to resume and it will do an immediately yield. We should
probably have a cancel function on couroutines as well in this case
so we can cancel the whole co-routine which will cancel the currently
pending promise. The cancel could resume the coroutine with a
lua_error, so the coroutine can clean itself if it needs.

So, if you think some of these methods will not work, you will have
to be more specific on why. Because to me, right now, that's the only
sensible solution if we really want people to use our bindings with
asynchronous operations.

[snip]

Kind regards,
-- 
Felipe Magno de Almeida

------------------------------------------------------------------------------
What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic
patterns at an interface-level. Reveals which users, apps, and protocols are 
consuming the most bandwidth. Provides multi-vendor support for NetFlow, 
J-Flow, sFlow and other flows. Make informed decisions using capacity planning
reports. http://sdm.link/zohomanageengine
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to