> On Sept. 15, 2014, 6:46 p.m., Ben Mahler wrote: > > 3rdparty/libprocess/3rdparty/stout/include/stout/version.hpp, lines 32-34 > > <https://reviews.apache.org/r/25597/diff/3/?file=688423#file688423line32> > > > > The program will crash if the split is non-numeric, because you'll call > > .get() on a numify operation, are you intending this to occur? > > > > A comment would be nice! > > Kapil Arya wrote: > Good catch! The question now is how to handle the situation where a > string such as "1.a.2" is passed on? Should it be considered an error or > should it be interpreted as "1.0.0"? If it should be considered an error, > how should be change the contructor to reflect that? > > Ben Mahler wrote: > You can add a 'parse' method akin to what was done in duration.hpp: > > ``` > static Try<Version> parse(const std::string& version); > ``` > > This makes the error explicit, and we no longer need the (major(), > minor(), patch()) accessor methods, since the member variables would be const. > > Kapil Arya wrote: > There is one trouble with making major/minor as const fields. Glibc > defines major and minor as macros and that breaks the compilation when these > fields are initialized in a contructor as ": major(majorVersion), > minor(minorVersion), patch(patchVersion)". The preprocessor expands them to > gnu_dev_major and gnu_dev_minor respectively. > > The alternative solution is to go back to accessor functions and mark > these fields as private. Another alternative is to rename the const fields as > majorVersion, minorVersion, and patchVersion. > > Is there any preference here?
I see, seems a bit tricky to skirt around the macro issue: ``` // This caller is ok? int major = version.major(); // The constructor argument is ok? Version::Version(int major, int minor, int patch) {} ``` What if we remove the accessors, and make them const private as 'major_', 'minor_', 'patch_'? I'm curious why we'd need access to the version components, rather than just using the comparison operators or the stringify operator. I could also envision some compatibility operators to ensure that it's the same major version if >= 1.0, or same minor version if < 1.0. How about we hide them for now and defer the decision for later should the need arise? - Ben ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/25597/#review53370 ----------------------------------------------------------- On Sept. 16, 2014, 6:48 p.m., Kapil Arya wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://reviews.apache.org/r/25597/ > ----------------------------------------------------------- > > (Updated Sept. 16, 2014, 6:48 p.m.) > > > Review request for mesos, Adam B and Niklas Nielsen. > > > Repository: mesos-git > > > Description > ------- > > Currently there is no facility in Mesos for checking compatibility of various > Mesos components that could have been built at different times with > potentially different Mesos versions. This requirement is especially > important for doing various compatibility checks between Mesos and Mesos > modules (WIP). > > - Features major, minor, and patch numbers. > - Convenience functions for comparing two versions. > > > Diffs > ----- > > 3rdparty/libprocess/3rdparty/Makefile.am > db9766d70adb9076946cd2b467c55636fe5f7235 > 3rdparty/libprocess/3rdparty/stout/Makefile.am > b6464de53c3873ecd0b62a08ca9aac530043ffb9 > 3rdparty/libprocess/3rdparty/stout/include/Makefile.am > 6fa5b741bdd7f089ba93bf6fea43b9f39f8f0edb > 3rdparty/libprocess/3rdparty/stout/include/stout/os.hpp > 5bbf829b3fa5d09a92e1d64c52c1fc7eed73fc91 > 3rdparty/libprocess/3rdparty/stout/include/stout/version.hpp PRE-CREATION > 3rdparty/libprocess/3rdparty/stout/tests/version_tests.cpp PRE-CREATION > > Diff: https://reviews.apache.org/r/25597/diff/ > > > Testing > ------- > > Added a stout test and ran make check > > > Thanks, > > Kapil Arya > >