Andrew, Mike, Actually thanks for making me recheck it. I have just installed doxygen, and can confirm that it can generate parameters for non-functional macros. This was my main reason for going with /// comment style, which is used for all other plain macros. I have just submitted V3 version with this fixed.
With C language modernisation I fully agree that it needs to be done reasonably, and that is why I also try to be very realistic on what people actually use. For instance, one of the issues that caused several problems is the use of 1-sized arrays instead of flexible array members. A couple years ago that was still there just because there still existed some compilers that did not support [] syntax. Best wishes, Vitaly > 17 авг. 2019 г., в 1:58, Andrew Fish <af...@apple.com> написал(а): > > > >> On Aug 16, 2019, at 2:40 PM, Vitaly Cheptsov via Groups.Io >> <vit9696=protonmail....@groups.io <mailto:vit9696=protonmail....@groups.io>> >> wrote: >> >> Mike, >> >> I missed your message while writing mine, but I am afraid I disagree with >> the functional macro usage for this feature. >> >> I explicitly quoted C standard static_assert definition in one of my >> previous messages, and I want EDK II to be as close to standard C as >> possible. >> >> This will avoid a lot of confusion for newcomers and will let us later adopt >> a more flexible single and double argument interface when it gets >> standardised. >> >> For these reasons altogether, I am not positive the macro could get a >> doxygen documentation as it is not designed to have any arguments in the >> first place. >> > > Vitaly, > > I don't understand your logic? It is always possible to write a comment in C > code? > > In terms of the C standard and the EFI type system we kind of have a long > history of how the code ended up like it is. The (U)EFI spec defined its own > type system (and ABI) as a way of specifying interoperability so the code got > built on top of that. 20 years ago we shied away from having and EFI code > base produce definitions of standard C things as we wanted to make it easier > to import chunks of code in OS loaders that needed to get ported to EFI from > lots of different vendors. Also one of the early compilers that we > standardized on was VC2003 and that does not even fully support C99. For some > reason it seems VC2008 was also a popular target for some time. I don't think > VC++ got around to C99 until 2013/2015. So that is kind how the edk2 ended up > with its own type system. > > I'm all for modernization of the C code as long we are thoughtful about > compatibility. For example I still see that VS2008 is a supported > BaseTools/Conf/tools_def.template. > > Thanks, > > Andrew Fish > > >> Best wishes, >> Vitaly >> >> On сб, авг. 17, 2019 at 00:04, Kinney, Michael D <michael.d.kin...@intel.com >> <mailto:michael.d.kin...@intel.com>> wrote: >>> >>> Laszlo, >>> >>> I agree that better comments/documentation of STATIC_ASSERT() >>> for EDK II usages is required. For example, EDK II defines >>> the ASSERT() macro which is based on the standard C function >>> assert(), but we still document it fully for EDK II usage. >>> >>> /** >>> Macro that calls DebugAssert() if an expression evaluates to FALSE. >>> >>> If MDEPKG_NDEBUG is not defined and the DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED >>> bit of PcdDebugProperyMask is set, then this macro evaluates the Boolean >>> expression specified by Expression. If Expression evaluates to FALSE, then >>> DebugAssert() is called passing in the source filename, source line number, >>> and Expression. >>> >>> @param Expression Boolean expression. >>> >>> **/ >>> #if !defined(MDEPKG_NDEBUG) >>> #define ASSERT(Expression) \ >>> do { \ >>> if (DebugAssertEnabled ()) { \ >>> if (!(Expression)) { \ >>> _ASSERT (Expression); \ >>> ANALYZER_UNREACHABLE (); \ >>> } \ >>> } \ >>> } while (FALSE) >>> #else >>> #define ASSERT(Expression) >>> #endif >>> >>> I would like to see the macro documentation for >>> STATIC_ASSERT() with the Doxygen style description of the >>> parameters. The fact I asked if STATIC_ASSERT() supported >>> the 2nd message parameter should have been a trigger >>> for me to ask for the more complete macro comment block. >>> The fact that this macro can be directly mapped to >>> built in compiler name makes the implementation simple, >>> but other implementations are possible for compilers >>> that do not support this feature directly. This is why >>> the complete description of the EDK II version is required. >>> >>> I would like to see a V3 with the complete description. >>> >>> In general, I agree it is better if there is code that >>> uses a new feature in the code base, so the feature can >>> be tested. A second option we can consider going forward >>> is for unit test code to be submitted with a new feature, >>> so even if there are no consumers from the EDK II repos, >>> the feature can still be tested as the EDK II repos are >>> maintained. A third option is for community members to >>> provide Tested-by responses to the feature along with >>> statements in the Bugzilla that clearly documents how the >>> the feature was tested. >>> >>> Best regards, >>> >>> Mike >>> >>> > -----Original Message----- >>> > From: devel@edk2.groups.io <mailto:devel@edk2.groups.io> >>> > [mailto:devel@edk2.groups.io <mailto:devel@edk2.groups.io>] On Behalf Of >>> > Laszlo Ersek >>> > Sent: Friday, August 16, 2019 12:39 PM >>> > To: vit9...@protonmail.com <mailto:vit9...@protonmail.com> >>> > Cc: devel@edk2.groups.io <mailto:devel@edk2.groups.io>; >>> > leif.lindh...@linaro.org <mailto:leif.lindh...@linaro.org>; >>> > af...@apple.com <mailto:af...@apple.com> >>> > Subject: Re: [edk2-devel] [PATCH v2 1/1] MdePkg: Add >>> > STATIC_ASSERT macro >>> > >>> > On 08/16/19 19:23, vit9...@protonmail.com <mailto:vit9...@protonmail.com> >>> > wrote: >>> > > Laszlo, >>> > > >>> > > I have already mentioned that the documentation is >>> > sufficient as >>> > > _Static_assert is C standard >>> > >>> > Yes, in a release of the ISO C standard that edk2 does >>> > not target. >>> > >>> > In addition, edk2 already has several restrictions in >>> > place against standards-conformant code. (Such as bit- >>> > shifting of UINT64 values, initialization of structures >>> > with automatic storage duration, structure assignment, >>> > maybe more.) >>> > >>> > > so I do not plan to make a V3 for this patch. >>> > >>> > I find that regrettable. >>> > >>> > > The patch is merge ready. >>> > >>> > Such statements are usually made when people that >>> > comment on a patch arrive at a consensus. The patch may >>> > be merge-ready from your perspective and from Mike's. >>> > It is not merge-ready from my perspective. >>> > I hope I'm allowed to comment (constructively) on >>> > patches that aren't strictly aimed at the subsystems I >>> > co-maintain. >>> > >>> > > As for usage examples I have an opposing opinion to >>> > yours and believe >>> > > it is based on very good reasons. Not using >>> > STATIC_ASSERT in the >>> > > current release will make the feature optionally >>> > available and let >>> > > people test it in their setups. >>> > >>> > Not using STATIC_ASSERT in the current stable release >>> > makes the STATIC_ASSERT macro definition *dead code* in >>> > edk2 proper. I understand that edk2 is a "kit", and >>> > quite explicitly caters to out-of-tree platforms. >>> > That's not a positive trait of edk2 however; it's a >>> > negative one, in my judgement. Whatever we add to the >>> > core of edk2, we should exercise as diligently as we >>> > can *inside* of edk2. >>> > >>> > > In case they notice it does not work for them they >>> > will have 3 months >>> > > grace period to report it to us and consider making a >>> > change. >>> > >>> > That is what the feature freezes are for. The feature >>> > is reviewed before the soft feature freeze, merged (at >>> > the latest) during the soft feature freeze, and bugs >>> > can still be fixed during the hard feature freeze. The >>> > community is expected to test diligently during the >>> > hard feature freeze. >>> > Perhaps we should extend the hard feature freeze. >>> > >>> > My problem is not that the change is not "in your >>> > face". I'm all for avoiding regressions. My problem is >>> > that the code is dead and untestable without platform >>> > changes, even though it could be put to great use in >>> > core code at once. If you think that's too risky, this >>> > close to the stable tag, then one solution is to >>> > resubmit at the beginning of the next development cycle >>> > (again with additional patches that utilize the >>> > STATIC_ASSERT macro at once). Developers will then have >>> > close to three months to report and fix issues. >>> > >>> > Another solution would be to conditionally keep >>> > VERIFY_SIZE_OF, vs. >>> > using STATIC_ASSERT, for expressing the build-time >>> > invariants. The default would be STATIC_ASSERT. Should >>> > it break, people could immediately switch back to >>> > VERIFY_SIZE_OF, without disruption to their workflows. >>> > >>> > We've done similar things in OvmfPkg in the past. For >>> > example: >>> > - USE_LEGACY_ISA_STACK (commit a06810229618 / commit >>> > 562688707145), >>> > - USE_OLD_BDS (commit 79c098b6d25d / commit >>> > dd43486577b3), >>> > - USE_OLD_PCI_HOST (commit 4014885ffdfa / commit >>> > cef83a3050e5). >>> > >>> > > This will also give them 3 months grace period of >>> > VERIFY_SIZE_OF macro >>> > > removal in favour of STATIC_ASSERT. Making the change >>> > now will let >>> > > people do seamless transition to the new feature and >>> > will avoid >>> > > obstacles you are currently trying to create. >>> > >>> > Please stop making claims in bad faith. I'm not trying >>> > to "create obstacles". I'm a fan of STATIC_ASSERT. I'm >>> > not a fan of dead code. >>> > >>> > > Thus STATIC_ASSERT usage and VERIFY_SIZE_OF removal >>> > must both be >>> > > separate patchsets with potentially separate BZs. >>> > > >>> > > Thanks for understanding, >>> > >>> > Why are you presenting this as a done deal? The v2 >>> > patch was submitted three days ago, IIUC. >>> > >>> > Also, I wish we could have this discussion without >>> > condescension. >>> > >>> > Thanks, >>> > Laszlo >>> > >>> > >>> >> >> >> -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#45869): https://edk2.groups.io/g/devel/message/45869 Mute This Topic: https://groups.io/mt/32850582/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-
signature.asc
Description: OpenPGP digital signature