On 11 March 2016 at 00:51, Tom Hacohen <t...@osg.samsung.com> wrote:

> On 10/03/16 12:36, Carsten Haitzler wrote:
> > On Thu, 10 Mar 2016 15:46:19 +0900 Jean-Philippe André <
> j...@videolan.org> said:
> >
> >> On 10 March 2016 at 15:05, Carsten Haitzler <ras...@rasterman.com>
> wrote:
> >>
> >>> On Thu, 10 Mar 2016 07:42:22 +0200 Daniel Zaoui <
> daniel.za...@samsung.com>
> >>> said:
> >>>
> >>>> On Wed, 09 Mar 2016 16:23:04 +0000
> >>>> Tom Hacohen <t...@osg.samsung.com> wrote:
> >>>>
> >>>>> On 03/03/16 10:22, Tom Hacohen wrote:
> >>>>>> On 01/03/16 09:05, Tom Hacohen wrote:
> >>>>>>> Hey,
> >>>>>>>
> >>>>>>> The Eo syntax is going to be changing once more, and this time, I
> >>>>>>> really think/hope it'll be the last time. We plan on stabilizing
> >>>>>>> Eo and all of the functions on top of it in the next few months,
> >>>>>>> so that doesn't leave us much more time to change it again. :)
> >>>>>>>
> >>>>>>> These changes will remove the need for the eo_do family of
> >>>>>>> functions. Functions will now look like normal C functions (which
> >>>>>>> they are). There are many benefits to that, and we have many cool
> >>>>>>> new ideas.
> >>>>>>>
> >>>>>>> For more info: https://phab.enlightenment.org/w/eo/
> >>>>>>>
> >>>>>>> I'm sending this email as an head's up, as I'll be starting to
> >>>>>>> work on migrating to the new Eo syntax (and implementing it)
> >>>>>>> today. Felipe and I have actually already started (needed to for
> >>>>>>> the PoC), but I plan on pushing my changes to master soon.
> >>>>>>>
> >>>>>>> If you have any issues/suggestions/comments with the proposal,
> >>>>>>> please let me know, either in pm, irc or just here.
> >>>>>>>
> >>>>>>
> >>>>>> Changes are in! I still haven't migrated eo_add to the new syntax
> >>>>>> (it uses a non portable gcc extension in the meanwhile), but
> >>>>>> otherwise everything is in. Took me *much* less time than I thought
> >>>>>> it would, so yay. :P
> >>>>>>
> >>>>>> I decided to push it now instead of letting it rest in my branch
> >>>>>> for a while because literally every hour that passed introduced
> >>>>>> more merge conflicts for me, so the benefits from stabilising it
> >>>>>> more in my branch were diminished by the new conflicts and issues
> >>>>>> that could arise.
> >>>>>>
> >>>>>> If you have an application that uses the Eo api, you can use my
> >>>>>> script https://devs.enlightenment.org/~tasn/migrate_eo.py to
> >>>>>> migrate your code. When using the script you should keep two things
> >>>>>> in mind: 1. You are only allowed to run it *once* per source code,
> >>>>>> because the changes to eo_add() would otherwise accumulate and your
> >>>>>> code will be wrong. If you need to correct something you've done
> >>>>>> wrong, reset the code to the previous state and run the script
> >>>>>> again on the original code. 2. The migration script is not perfect.
> >>>>>> In particular it can't deal with some corner cases like:
> >>>>>> eo_do(obj, a_set(1),
> >>>>>> /* b_set(2),
> >>>>>>       g_set(4), */
> >>>>>>    c_set(2));
> >>>>>> Or abominations like:
> >>>>>> eo_do(obj, if (a_get())
> >>>>>>    do_something());
> >>>>>>
> >>>>>> So please be aware of that and *manually* review your changes after
> >>>>>> the script has run.
> >>>>>>
> >>>>>> If your code does have these cases, I recommend you either get rid
> >>>>>> of them, or manually migrate that code before running the script
> >>>>>> (remove the relevant eo_do).
> >>>>>>
> >>>>>> Follow the wiki page mentioned in the previous email for more
> >>>>>> information about Eo and what else needs changing.
> >>>>>>
> >>>>>> Please let me know about any regressions (there shouldn't be any)
> >>>>>> or any issues you may face.
> >>>>>
> >>>>> I'm now pushing my changes to eo_add. I'm pushing it now for the same
> >>>>> reason I pushed the previous changes in.
> >>>>>
> >>>>> I created a new script that assumes the code has already been
> >>>>> migrated with the previous (migrate_eo.py) script. This script is
> >>>>> called migrate_eo_add.py and can be found at:
> >>>>> https://devs.enlightenment.org/~tasn/migrate_eo_add.py
> >>>>>
> >>>>> When using the script you should keep two things in mind:
> >>>>> 1. You are only allowed to run it *once* per source code, because the
> >>>>> changes to eo_add() would otherwise accumulate and your code will be
> >>>>> wrong. If you need to correct something you've done wrong, reset the
> >>>>> code to the previous state and run the script again on the original
> >>>>> code. 2. The migration script is not perfect. In particular it can't
> >>>>> deal with cases like missing {} for if/for/while content so for
> >>>>> example,
> >>>>>
> >>>>> if ()
> >>>>>      return eo_add(...)
> >>>>>
> >>>>> would break.
> >>>>> 3. If you are fancy and use the same variable inside eo_add and
> >>>>> outside, for example like:
> >>>>> parent = eo_add(CLASS, parent);
> >>>>>
> >>>>> your code will break. I suggest you use a temporary variable.
> >>>>>
> >>>>> So please be aware of that and *manually* review your changes after
> >>>>> the script has run.
> >>>>>
> >>>>> If your code does have these cases, I recommend you either get rid of
> >>>>> them, or manually migrate that code before running the script (remove
> >>>>> the relevant eo_do).
> >>>>>
> >>>>>
> >>>>>
> >>>>> Sorry, but C++ will break until the C++ guys fix it. I'm now in the
> >>>>> process of migrating the rest of our applications. Hopefully this
> >>>>> will be the last disruption of this sort.
> >>>>>
> >>>>
> >>>> Sorry man but the new syntax is ugly. I still don't see why this
> change
> >>> was
> >>>> needed. Please enlighten me. It reminds me the wonderful eo_do_ret
> >>> syntax :-)
> >>>>
> >>>> So yes Tom I vomit on your eo_add
> >>>>
> >>>>
> >>>>                    BBEEEUUUUUUAAAAAHHHHH...
> >>>>
> >>>>                      %%%%%%
> >>>>                     %%%% = =
> >>>>                     %%C    >
> >>>>                      _)' _( .' ,
> >>>>                   __/ |_/\   " *. o
> >>>>                  /` \_\ \/     %`= '_  .
> >>>>                 /  )   \/|      .^',*. ,
> >>>>                /' /-   o/       - " % '_
> >>>>               /\_/     <       = , ^ ~ .
> >>>>               )_o|----'|          .`  '
> >>>>           ___// (_  - (\           eo_add(&obj...
> >>>>          ///-(    \'   \\
> >>>
> >>> bwhahahahahha.
> >>
> >>
> >>> the reason was eo add methods.
> >>>
> >>> obj = eo_add(..., text_set(obj, "x"), color_set(obj, 1, 2, 3, 4));
> >>>
> >>> because eo4 changes to pass obj into every method - that means obj has
> to
> >>> be
> >>> filled and defined with the RIGHT eo id before the extra text_set() is
> >>> called
> >>> because it passes it in, thus you have to pass a ptr to the eiod so it
> can
> >>> be
> >>> filled in first so it is correct for the following calls within the
> eo_add.
> >>>
> >>
> >> I know you don't like it but I can see two solutions to that:
> >> 1. a different macro for eo_add() that doesn't allow any function calls
> >> before finalize (I believe it would be used quite often)
> >> 2. use a tls to store the currently created obj and add a macro to get
> it
> >> in those inlined function calls, eg.
> >>   obj = eo_add(CLASS, parent, do_something(eo_cur))
> >
> > or - leave it as is. :) 2 funcs is bad too - imho worse. tls is also bad
> - you
> > have to handle nested adds and maintain a whole stack in the tls too.
>
> See my email, I have a solution to do it with just one function, where
> user applications compiled with compilers that don't support this
> extension automatically degrade to slower version that uses the stack.
> They can both be used interchangeably in the same code, same binary,
> same anything, though for all the user is concerned both are actually
> the same macro, eo_add().
> <https://lists.sourceforge.net/lists/listinfo/enlightenment-devel>
>

I would love this.

We need to be careful about have compiler-dependent stuff in our headers,
but if we can have a clean syntax with a TLS stack for non GCC compilers I
don't think the performance impact would be too bad (it's not every eo_do
this time, only object creation).

Maybe in order to detect support we should not rely on GCC / CLANG version
flags but actually test that the code with ({ }) compiles?

-- 
Jean-Philippe André
------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785111&iu=/4140
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to