On Fri, Sep 23, 2016 at 06:59:14PM -0700, Cedric BAIL wrote: > On Thu, Sep 22, 2016 at 4:35 AM, Tom Hacohen <t...@osg.samsung.com> wrote: > > On 22/09/16 00:34, Cedric BAIL wrote: > >> On Wed, Sep 21, 2016 at 1:46 AM, Tom Hacohen <t...@osg.samsung.com> wrote: > >>> On 19/09/16 23:33, Cedric BAIL wrote: > >>>> On Mon, Sep 19, 2016 at 2:48 PM, Tom Hacohen <t...@stosb.com> wrote: > >>>>> We haven't agreed on merging Eo, Efl and Ecore. I'm actually pretty much > >>>>> against it. > >>>> > >>>> There was a thread weeks ago. You indeed didn't take part of that > >>>> discussion, but everyone else involved in that thread was ok. Actually > >>>> the discussion evolved more into a what else to merge in. So their was > >>>> an agreement before this email. > >>> > >>> Sorry, I missed that thread. What was the topic? > >> > >> Merging eo, efl and ecore. Like in the title :-) > > > > I remember that thread now, I misunderstood what you meant by merging > > when you said it back then, and now with your promise inside lib/eo/ I > > understand what you meant, and I'm very much against it. > > > > Let me clarify what I mean compared to my understanding of what you > > mean. What I mean is what I thought was discussed in that thread. > > I'm fine with: > > Linking everything into one big fat ugly libefl.so (would rather not, > > but OKish with that). > > Having Efl.h that includes Eo.h, Elementary.h and etc. > > Having an efl_init() and an efl_shutdown() that call them all. > > With EFL_MAIN, you don't need anymore to do any _init/_shutdown. Just > for reference. > > > But if you think about it, it's essentially what we have in elementary. > > It does all of the above except for the one binary linked together. > > Which I'm mostly OK with (although see Marcel's comment about eo_debug > > about which I forgot. Modularity has many advantages). > > > > What I'm *not* OK with: > > Creating interdependency between the libraries and essentially making > > libefl.so Ecore 2.0. One place to store everything. Units make a lot of > > sense, of the advantages have been discussed above. My eo_debug trick > > (which is ready, I just need to enable it, again, see marcel's email for > > details) requires this separation. > > Saw it, it's neat. Question, why limitting it to eo ? Would be quite > useful to also turn on more debug in eina, no ?
For the same reason as why there are different log domains, if i have a issue with eo ref stuff, i would not like to get the complete output of ecore/eina. > > <snip> > > >>> Or without joking: people have been using Eo without ecore and without > >>> Efl.Object. One example is Mike in E (reverted now because Eo was > >>> undeclared stable). You'll probably end up using Ecore in the same app, > >>> but again, everything you can say here you can say about Eina too. > >> > >> Do we have any example of an application that use Eo without Ecore or > >> Efl today ? > > > > edje_cc, expedite, erigo-cli, clouseau-launcher (not the gui) and etc, > > all depend on Eo and not on graphics. As for Ecore: I'm actually not > > sure, some probably use ecore for networking, but it doesn't matter, > > that's just a convenience that happened to be relevant for this case. > > Sort of: if you can afford to use something that makes your life a bit > > easier, why not. > > All of the above example do use ecore and where kind of my point. > > >>> By "clean" I mean "isolated" or "untainted by its users up the stack". > >>> (see next comment for more info). > >>> > >>>> I think that your disagreement about merging is only and just because > >>>> you do not want to make asynchronous request a core feature of EFL. > >>>> The rest is mostly rhetoric. Could you please explain why you have so > >>>> much resistance to it being rolled into more place in efl ? > >>> > >>> That is exactly the reason (was I hiding it?), but not only, and one > >>> example of not "clean". > >>> > >>> A while back I was giving you some flack for not writing tests for a > >>> component of the EFL and cited Eo as an example of getting high test > >>> coverage. You then laughed it off and said something in the lines of > >>> "it's easier to test because it's smaller and not async" or something > >>> like that. > >>> **THAT IS EXACTLY MY POINT.** > >>> From my experience (and I guess the industry's collective experience), > >>> having small separate units make quality assurance easier, units more > >>> testable (because you can easily unit test) and the code easier to > >>> maintain. > >> > >> In my opinion there is a lot of code in Eo that is far from nice to > >> read and easy to maintain. First example is how intricate our pointer > >> infrastructure is in eo and how little it makes sense. I have to go > >> back at eina_safepointer, but there is seriously no justification for > >> that. Especially when it hasn't help us catch thread safety bugs for > >> example. So I agree with your small unit, but small unit has nothing > >> todo as per library, it has to do with how we divide things between > >> functions and files. > > > > No, it has everything to do with interconnectivity of components. Small > > units mean: interdependency is allowed within that unit but not outside > > of it. > > I don't see your problem at all. We have a lot of "independent" unit > tested properly in eina and eet. Would you have preferred to see eina > split for each data type ? > > > Safepointer: that's a different topic. Maybe it belongs there. I'm not > > sure. However, that's migrating things out of Eo and making it smaller, > > which I'm happy with. :) > > Ok. > > > As for your case, ptr indirection is implemented in different source > > files and has no interdependency, so it can be easily pulled out > > whenever needed. > > It doesn't have any clean API and there are ifdef all over the place > in eo to handle it. Tearing it appart isn't trivial... > > > OK, so Eo is less than perfect ergo we should make it worse? I don't see > > your point. Yes, Eo has been made a bit uglier in the last few months. > > It actually made it hard for me to keep track, but it sometimes happens > > when you have a lot of contributions from various sources. However > > because of its isolation, it remains well tested. > > My point is not that it isn't perfect, but that it is not an isolated > piece and that the issue is with unit that don't have a clear API. > Once you put an API, which moving stuff to eina force us to in that > example, you get the clean unit you want. > > <snip> > > >>>>> If you mean just compile them together, then there's no point in it. > >>>>> I know why you want to do it, you want to do it because you put > >>>>> Efl.Future > >>>>> inside libeo.so, but the correct thing to do is probably not to put it > >>>>> there. > >>>> > >>>> I don't want to just compile them together. I want to merge there > >>>> headers. Make it just one library. Make efl.object, efl.future and > >>>> efl.loop one core. Obviously because I want to see efl as providing a > >>>> core asynchronous library with defined pattern. One asynchronous > >>>> pattern is "events", which is like an UDP broadcast (default > >>>> behavior)/multicast (with effort) solution. Efl.Future is more the > >>>> equivalent of a TCP connection. I think providing one without the > >>>> other is going to push for a world of broadcast solution which is not > >>>> always the right pattern. Maybe we should remove events support from > >>>> Eo to avoid this problem. > >>> > >>> Of course also merging the headers. What I meant is: you want a cycle > >>> dep. Mutual reliance. > >> > >> They need it. efl_future_link is the perfect example. How can you link > >> the life time of a future to the one of an object without having that > >> function in efl.object, where it belong. > > > > Have a mixin/interface that implements the relevant interface for > > objects that are loop aware (and thus can use promises). This is how it > > should have been done, not sure what you are doing now. > > Well, what you mean here, is that we will have an Efl.Object_Loop that > every single object in Efl will inherit from. Every single one of > them. Just to implement one function ! > > >>> It's not really a broadcast, because you need to register to listen. > >> > >> It is a broadcast. My computer receive all broadcasted packet on my > >> network all the time, the same as an object will always receive events > >> even if nobody is listening to it. Some, like animator, are > >> implemented like multicast, where you have to actually register an > >> event to get the signal propagated to the object. > > > > Object will always receive events: you mean callback_call? That's some > > definition of receiving events. The event is never really "emitted" if > > no callback is registered. That's arguing about bullshit lingo though. > > Events are not called. I have no idea what you are talking about. > > The callback_call is emitted. The event structure is build, the > function is called and it walk the list of registered callback to see > if there is one that match. This is very close to what a broadcast > packet on the network does. It reach the system of every computer > connected to the network, the packet goes up the stack and the OS > check if any process is listening for it. How different is it ? It is > a broadcast. > > And for multicast, it is just propagated along a tree if some of the > leaf have registered a server there. How different is that from the > behavior of our animator event ? > > >>> Removing events from Eo is not the way to go. If you want an async > >>> pattern, do it up the stack (even eolian) and encourage it there. People > >>> who use the loop will use it. The same way people use Evas when they > >>> want it (not trying to make a funny comment, literally, people include > >>> Evas.h when they want to use it). > >>> > >>> Quite a similar example that reveals better what I mean and see: > >>> > >>> Let's assume we have a TCP class. You want to add HTTP support to the > >>> EFL so you are adding an HTTP class that inherits from it. Now your > >>> argument is that you want to merge them because you want to encourage > >>> people to use HTTP and not roll their own protocol and arguing that if > >>> not that so at least move the port_set (events) function somewhere else. > >> > >> Thanks for the example. You need TCP to build HTTP. If there wasn't > >> TCP in the IP stack, you would reimplement it in every protocol up the > >> stack on top of UDP. Would not be fun at all. FTP, SSH, HTTP over UDP > >> ? With all the fun of trying to reinvent the session thing. My > >> argument stand that you want to have a async request mecanism in efl, > >> because you want all this protocol on top to rely cleanly on it and > >> not reinvent a bad interface or make mistake. > > > > Huh? I don't understand your example. You need TCP (Eo) to build HTTP, > > and it's available for you. You are not reimplementing anything. FTP > > would also inherit from TCP, it doesn't need to know about HTTP. > > Eo is not TCP. Eo is IP. Eo events are UDP (broadcast and multicast in > nature), while future/promise are asynchronous request with guaranty > are TCP. How do you think that Eo is able to do asynchronous request > with guaranty like TCP ??? Just blowing my mind here. I guess, > choosing network as an image for this discussion is not helping you at > all. > -- > Cedric BAIL > > ------------------------------------------------------------------------------ > _______________________________________________ > enlightenment-devel mailing list > enlightenment-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel ------------------------------------------------------------------------------ _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel