On Sat, 24 Sep 2016 11:07:16 +0200 marcel-hollerb...@t-online.de said: > 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.
a problem solvable with ... log domains :) > > > > <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 > -- ------------- Codito, ergo sum - "I code, therefore I am" -------------- The Rasterman (Carsten Haitzler) ras...@rasterman.com ------------------------------------------------------------------------------ _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel