Hi, Apple does exactly that for ages, in their Foundation framework (objective-C, which is a superset of C). For instance, they have an NSMakeRect(x, y, w, h) macro that instantiates an NSRect (which is a C struct that holds rectangle information).
Since one can compile (at least) with gcc, llvm and apple-llvm on OSX, ABI should not be a problem. Otherwise, I guess nothing would have worked... Best regards, Jean On Fri, Jun 10, 2016 at 6:53 AM, 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