On Wed, 29 Jan 2014 16:41:13 +0200 "daniel.za...@samsung.com"
<daniel.za...@samsung.com> said:

> Hi Raster,
> 
> Don't worry, you don't have to answer this mail. I just want to share 
> our thoughts.

it's on my todo list to answer. tail end of a few emails left. :)

> After thinking more about the two "include" solutions, it seems that the 
> one you proposed can make issues when a same "user" file possesses 
> functions of two classes or more. I mean it would be included by two 
> classes and compilation will not be happy. There is at least one file in 
> that case, sharing both Evas_Object and Evas functions. We could split 
> the file but I don't think separating same feature functions because of 
> Eolian would be wise.
> 
> So for the moment, we look more at the second solution. We even don't 
> have to put the "extern" token (don't ask me why I wanted it), just a 
> forward declaration. In that case, we don't need to change any Makefile 
> and files (except for the splitting).
> 
> We thought pushing next week in efl repo an example of a splitted class, 
> to let people comment and review before the big change.

i'll still get to this ... :) but i'll take this into account - i have to
context switch back to this so i am deferring it until i nuke some other todo
items that are fresher in my mind.

> JackDanielZ, alias me
> 
> On 01/20/2014 03:09 PM, Carsten Haitzler (The Rasterman) wrote:
> > On Mon, 20 Jan 2014 14:25:01 +0200 "daniel.za...@samsung.com"
> > <daniel.za...@samsung.com> said:
> >
> > currently i'm going through phab backlog. :( reviews and then task tickets.
> > i'll roll around to my email box after that.
> >
> >> Hi Raster,
> >>
> >> I know it is a long time we didn't speak about that but I would like to
> >> reopen it to decide the interaction between files.
> >> As I explained before, we have at least two files by class:
> >> - the eolian-generated file that contains all the legacy/Eo functions
> >> - the "user" file that contains the logic part of the functions. There
> >> can be more than one file of this type
> >>
> >> The question is: who is supposed to include who?
> >> - you suggested that the auto-generated file will include the user
> >> files. That can be done by replacing in the makefile these files by the
> >> new one and by giving to Eolian command line the different files to include
> >> - we suggested (more began like that) that one "user" file will include
> >> the auto-generated. We let the makefile as is but we must add into the
> >> auto-generated file externs to the user functions that will no more be
> >> static.
> >>
> >> I think yours is cleaner but I would like to be sure it is ok (i.e we
> >> thought about all the consequences) before beginning changing the
> >> generator.
> >>
> >> Thank you, boss
> >> JackDanielZ, alias Daniel the 3rd.
> >>
> >> On 01/01/2014 02:18 PM, daniel.za...@samsung.com wrote:
> >>> On 12/31/2013 10:03 AM, Carsten Haitzler (The Rasterman) wrote:
> >>>> On Thu, 12 Dec 2013 16:14:34 +0200 "daniel.za...@samsung.com"
> >>>> <daniel.za...@samsung.com> said:
> >>>>
> >>>>> Hi all,
> >>>>>
> >>>>> As you maybe know, we are developing a tool (Eolian) that will help
> >>>>> people to add functions to the Eo classes and to generate automatically
> >>>>> bindings. We spoke a lot about the .eo format to describe the classes
> >>>>> but we never spoke about the generator. So is the time.
> >>>>>
> >>>>> The solution chosen to generate C code is to have two files:
> >>>>> - the first one is fully auto-generated by Eolian and contains EAPI
> >>>>> legacy functions and Eo code
> >>>>> EAPI Eo_Op... = EO_NOOP;
> >>>>> ...
> >>>>> EAPI void
> >>>>> evas_object_image_mmap_set(Evas_Object *eo_obj, const Eina_File *f,
> >>>>> const char *key)
> >>>>> {
> >>>>>        eo_do(eo_obj, evas_obj_image_mmap_set(f, key));
> >>>>> }
> >>>>>
> >>>>> static void
> >>>>> _eo_evas_object_image_mmap_set(Eo *eo_obj, void *_pd, va_list *list)
> >>>>> {
> >>>>>        const Eina_File *f = va_arg(*list, const Eina_File *);
> >>>>>        const char *key = va_arg(*list, const char*);
> >>>>>        _mmap_set(obj, f, key); *// User function located in the second C
> >>>>> file* }
> >>>>> ...
> >>>>> static void
> >>>>> _class_constructor(Eo_Class *klass)
> >>>>> {
> >>>>>        const Eo_Op_Func_Description func_desc[] = {
> >>>>>             EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_CONSTRUCTOR),
> >>>>> _constructor), EO_OP_FUNC(EVAS_OBJ_IMAGE_ID
> >>>>> (EVAS_OBJ_IMAGE_SUB_ID_MMAP_SET), _eo_evas_object_image_mmap_set),
> >>>>> ...
> >>>>> }
> >>>>> ...
> >>>>>
> >>>>> - the second file contains the user code. It is not touched by Eolian.
> >>>> so the "user" edits the generated file above to fill in
> >>>> _eo_evas_object_image_mmap_set() for example (eolian generates that
> >>>> function stub with just enough boilerplate to get them going) right? so
> >>>> it doesnt fully generate but it also has to update/edit/merge in changes
> >>>> from the eo file. this generated file #includes the totally "custom user
> >>>> code never touched by eolian" right? or this eo generated file is NEVER
> >>>> edited by the user and the user has to write the _mmap_set() func by
> >>>> hand? or does eolian generate these empty stubs for the user (or update
> >>>> them if params change)? it'd be nice if it could generate them when they
> >>>> get added to the class with an empty function the "user" then has to
> >>>> fill. which one is it? i would definitely vote for eolian generating at
> >>>> least empty stub functions so things compile (and likely dont work or do
> >>>> anything useful).
> >>> The "user" edits its own file and implements the functions that are
> >>> expected by the generated file.
> >>> Creating stub functions implies that we need to parse C code and that's
> >>> what we want to prevent.
> >>> If you want to create stubs, you have to know a destination file. For
> >>> most of the cases, it is easy because all the functions of the class are
> >>> defined in a same file. But we have classes (Evas Object, Edje iirc...)
> >>> whose user functions are splitted into many files. It would mean you
> >>> have to indicate which function you want to create in a certain file.
> >>> Imo, it is preferable that things don't compile so that you will not
> >>> forget to implement it.
> >>>> for the func name - static so they dont leak out, ensure the "user" file
> >>>> is
> >>>> #included into the eolian generated file so we keep all symbols local and
> >>>> #i'd
> >>>> say start with _ and add _eoimpl_ (eo implementation) just to ensure it
> >>>> wont clash with anything else.
> >>>>
> >>>> static void
> >>>> _eoimpl_mmap_set(Eo *obj, Eina_File *f, const char *key)
> >>>> {
> >>>> }
> >>> For the moment, the "user" file includes the generated file. In this
> >>> way, we don't change the makefiles (I know, bad reason).
> >>> If we do as you suggested, we have to include many files in the case of
> >>> scattered functions and put the generated files into the makefiles. The
> >>> issue here is how we can know which files have to be included. Maybe as
> >>> parameter of Eolian.
> >>> With our solution, only one "user" file includes the generated file but
> >>> we will have to set the user functions as extern into the generated file
> >>> and to remove the static and that's bad. Except if the main "user" file
> >>> of the class (e.g evas_object_main.c) includes the other "user" files of
> >>> the class and the generated file. And so we will just have to remove
> >>> them from the makefiles.
> >>> The solution you suggest seems better. Well, I am your minion, so I must
> >>> agree with you ;-). Seriously I don't know which way to choose for the
> >>> moment.
> >>>
> >>> Concerning the naming conventions, we use for example
> >>> _eo_obj_load_dpi_get into the generated file and
> >>> _evas_image_load_dpi_get into the "user" file.
> >>>>
> >>>>> This separation facilitates the generation for the C files. In the
> >>>>> future, when Eo2 is operational, we will be able to switch fast by
> >>>>> invoking Eolian to generate legacy and Eo2.
> >>>>>
> >>>>> I think this is the best time to speak about the changes we can make in
> >>>>> the current code to set code conventions:
> >>>>> - Eolian-generated Eo functions have to call user functions. Which
> >>>>> convention for the function name? We decided for the moment to go on the
> >>>>> operation only (_mmap_set).
> >>>>> - Prototypes of user constructor and destructor. Since we are not
> >>>>> supposed to see neither va_list nor parameters (except custom
> >>>>> constructors), we chose to give only the object: static void
> >>>>> _constructor(Eo *obj)...
> >>>>> - Data names are for the moment not following the same style. We have
> >>>>> Evas_Object_Image and Elm_Button_Smart_Data. Since "Smart" comes from
> >>>>> Evas_Object_Smart inheritance, I think it can be removed. On the other
> >>>>> way, Evas_Object_Image is imo not enough specific. We could change these
> >>>>> names to Evas_Image_Data and Elm_Button_Data. Maybe we can change too
> >>>>> Evas_Object_Protected_Data to Evas_Object_Data, since I don't see for
> >>>>> the moment the utility of a possible public/protected/private data type.
> >>>>>
> >>>>> I hope that next week, we will show how it will look like on a simple
> >>>>> and little example like ... evas_object_image.c ;-)
> >>>>>
> >>>>> JackDanielZ, alias Daniel the 3rd
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>> ------------------------------------------------------------------------------
> >>>>> Rapidly troubleshoot problems before they affect your business. Most IT
> >>>>> organizations don't have a clear picture of how application performance
> >>>>> affects their revenue. With AppDynamics, you get 100% visibility into
> >>>>> your Java,.NET, & PHP application. Start your 15-day FREE TRIAL of
> >>>>> AppDynamics Pro!
> >>>>> http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk
> >>>>> _______________________________________________ enlightenment-devel
> >>>>> mailing list enlightenment-devel@lists.sourceforge.net
> >>>>> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
> >>>>>
> >>> ------------------------------------------------------------------------------
> >>> Rapidly troubleshoot problems before they affect your business. Most IT
> >>> organizations don't have a clear picture of how application performance
> >>> affects their revenue. With AppDynamics, you get 100% visibility into your
> >>> Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics
> >>> Pro!
> >>> http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk
> >>> _______________________________________________ enlightenment-devel
> >>> mailing list enlightenment-devel@lists.sourceforge.net
> >>> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
> >>>
> >>
> >> ------------------------------------------------------------------------------
> >> CenturyLink Cloud: The Leader in Enterprise Cloud Services.
> >> Learn Why More Businesses Are Choosing CenturyLink Cloud For
> >> Critical Workloads, Development Environments & Everything In Between.
> >> Get a Quote or Start a Free Trial Today.
> >> http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
> >> _______________________________________________
> >> 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


------------------------------------------------------------------------------
WatchGuard Dimension instantly turns raw network data into actionable 
security intelligence. It gives you real-time visual feedback on key
security issues and trends.  Skip the complicated setup - simply import
a virtual appliance and go from zero to informed in seconds.
http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to