You wouldn't have to allocate it and free it for every function... if it
doesn't exist, allocate it, otherwise update the values. Then on del, free
it if it exists.

I don't think this simplifies the code though. Whether you pass the
structure or pass the individual values, the developer is still typing out
the same number of values and the lib is still assigning/manipulating the
same number of values. And as you said, it would be a massive change, with
little value imo.
On Jun 9, 2016 11:55 PM, "Davide Andreoli" <d...@gurumeditation.it> wrote:

2016-06-10 4:10 GMT+02:00 Jean-Philippe André <j...@videolan.org>:

> Hi,
>
>
> This is bu5hman's idea mostly, but I'd like to bring the question to the
> attention of everyone, as I had the same idea before.
>
> For simple structs (think Eina.Rectangle, and Efl.Gfx.Color), would it be
> acceptable to pass them by value instead of reference, in C?
> That is:
>
> Eina_Rectangle a = {1, 2, 3, 4};
> rect_set(obj, rect);
> Eina_Rectangle b = rect_get(obj);
>
> Or even (non portable way, but applications could feel free to use this):
> rect_set(obj, (Eina_Rectangle){.w = 13, .h = 37});
>
>
> I understand this could simplify some code.
>
>
> My main problem with it is a concern about ABI compatibility. It seems GCC
> itself has various ways to pass structs by value. See:
>
>
http://stackoverflow.com/questions/161788/are-there-any-downsides-to-passing-structs-by-value-in-c-rather-than-passing-a
>
>
> Does anyone have real-life knowledge about this? How is it on Windows?
> Any strong arguments in favor or against?
>

I'm against this changes for 2 main reason:
1. API coherence: if we use rect, color, and maybe pos in some api, then we
should use them
in ALL the api that use rect, color, geom, etc... this will be a massive
change.
2. Will make bindings a lot slower, for each function call we need to
allocate the struct, fill with value
provided by user and pass this struct to the C function.. and then free it.
All this for each function call.

just my 2 cents


>
>
> --
> Jean-Philippe André
>
>
------------------------------------------------------------------------------
> 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. https://ad.doubleclick.net/ddm/clk/305295220;132659582;e
> _______________________________________________
> enlightenment-devel mailing list
> enlightenment-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
>
------------------------------------------------------------------------------
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. https://ad.doubleclick.net/ddm/clk/305295220;132659582;e
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
------------------------------------------------------------------------------
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. https://ad.doubleclick.net/ddm/clk/305295220;132659582;e
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to