Brice Goglin, le Thu 07 Mar 2013 23:59:54 +0100, a écrit :
> We have a specific ABI field in the main component structure
> (hwloc_component) to avoid problems in case we break this new ABI.
> Breaking it isn't as bad as breaking the main hwloc ABI, but it'd still
> be good to not break it in every major release anyway. If you see
> anything to change to make things more future-proof, let me know, I'd
> rather change it before v1.7.
I'm wondering about the hwloc_disc_component_type_e values and excludes.
AIUI, GLOBAL is supposed to exclude anything else, while CPU excludes
with other CPUs, and ADDITIONAL isn't supposed to exclude with anything
except GLOBAL. I hope I have made it clearer in the documentation.
BTW, it seems we're not supposed to set multiple types in the type
field; that might be a concern, I'd tend to see the type field as an OR
I'm wondering whether these rules "you should always set GLOBAL in
excludes", and "GLOBAL should always set all types" are really nice.
For instance, some component built against 1.7 will not include flags
that we will introduce in 1.8, etc.
So I'd say that GLOBAL should rather be special-cased, by making it ~0,
as for now it's a bit confusing that it looks like CPU. ADDITIONAL
could be renamed MISC, meaning that it's something that another
component should not have to care about. We can for instance document
that it does not make sense to exclude MISC, unless through GLOBAL.
I'm wondering whether we should already introduce various types for the
various additional plugins we already have: OpenCL, PCI, nvml, gl, cuda.
I'd tend to reckon it makes sense to, so that third-party can already
exclude them from their plugins, if they ever need to (better provide
the feature than wait for people to ask for it next century).
About extensibility in general, the abi field will indeed allow us to be
able to introduce e.g. other callbacks.
BTW, is there really a reason for making the next field last in the
structure? When we'll add other fields, it'll look odd being in the
middle of the structure. Perhaps it's the methods which should go last,
as we'll probably introduce methods in the future?
Also, shouldn't we already bump the COMPONENT_ABI on 1.7 release?
Perhaps it should be put along others in VERSION, so we easily take the
same care as the soname?