Sorry I should've noticed that 855335 is a sec-bug. It's title is "Audit SIPCC printf-style format strings" which means we went through every logging call and repaired a few which had incorrect printf-style args.
-EH On Fri, Aug 2, 2013 at 2:44 PM, Justin Lebar <justin.le...@gmail.com> wrote: > > I agree that iostream-based logging would be safer. If we had it I > > wouldn't have had to work on this one: > > > > https://bugzilla.mozilla.org/show_bug.cgi?id=855335 > > I can't access that bug, but maybe you mean > https://bugzilla.mozilla.org/show_bug.cgi?id=onelogger ? > > I feel like the goals there are orthogonal to NSPR vs iostream. > > I haven't had a chance to work on this lately, but I do intend to land > something when I can. > > On Fri, Aug 2, 2013 at 2:41 PM, Ethan Hugg <ethanh...@gmail.com> wrote: > >>It is very useful for building a logging interface that is safer and more > >>convenient than NSPR's printf-style logging. Note that, again, Eric > >>Rescorla already built an (partial) iostream-based wrapper around NSPR > for > >>WebRTC. I would say that, if there is no additional overhead, then we > >>should consider making iostream-based logging the default way of doing > >>things in Gecko because it is so much less error-prone. > > > > I found this comment interesting. It wasn't that long ago I was > instructed > > to get rid of all iostream-based logging from media/webrtc/signaling and > > media/mtransport if it we wanted the logging to appear in opt builds. > > > > https://bugzilla.mozilla.org/show_bug.cgi?id=795126 > > https://bugzilla.mozilla.org/show_bug.cgi?id=841899 > > > > I agree that iostream-based logging would be safer. If we had it I > > wouldn't have had to work on this one: > > > > https://bugzilla.mozilla.org/show_bug.cgi?id=855335 > > > > Can we now use iostreams throughout this code? > > > > -EH > > > > > > > > > > On Fri, Aug 2, 2013 at 2:21 PM, Brian Smith <br...@briansmith.org> > wrote: > > > >> On Wed, Jul 31, 2013 at 7:41 PM, Joshua Cranmer 🐧 <pidgeo...@gmail.com > >> >wrote: > >> > >> > implementation, libc++, libstdc++, and stlport. Since most nice > charts of > >> > C++11 compatibility focus on what the compiler needs to do, I've put > >> > together a high-level overview of the major additions to the standard > >> > library [3]: > >> > * std::function/std::bind -- Generalization of function pointers > >> > > >> > >> Note that Eric Rescorla implemented his own std::bind polyfill when he > was > >> working on WebRTC. I also have some new code I am working on where > >> std::bind is extremely helpful. > >> > >> > >> > Now that you have the background for what is or will be in standard > C++, > >> > let me discuss the real question I want to discuss: how much of this > >> should > >> > we be using in Mozilla? > >> > > >> > >> > >> > For purposes of discussion, I think it's worth breaking down the C++ > (and > >> > C) standard library into the following components: > >> > * Containers--vector, map, etc. > >> > * Strings > >> > * I/O > >> > * Platform support (threading, networking, filesystems, locales) > >> > * Other helpful utilities (std::random, std::tuple, etc.) > >> > > >> > The iostream library has some issues with using (particularly static > >> > constructors IIRC), and is not so usable for most of the things that > >> Gecko > >> > needs to do. > >> > >> > >> It is very useful for building a logging interface that is safer and > more > >> convenient than NSPR's printf-style logging. Note that, again, Eric > >> Rescorla already built an (partial) iostream-based wrapper around NSPR > for > >> WebRTC. I would say that, if there is no additional overhead, then we > >> should consider making iostream-based logging the default way of doing > >> things in Gecko because it is so much less error-prone. > >> > >> > >> > Even if fully using the standard library is untenable from a > performance > >> > perspective, usability may be enhanced if we align some of our APIs > which > >> > mimic STL functionality with the actual STL APIs. For example, we > could > >> add > >> > begin()/end()/push_back()/etc. methods to nsTArray to make it a fairly > >> > drop-in replacement for std::vector, or at least close enough to one > that > >> > it could be used in other STL APIs (like std::sort, std::find, etc.). > >> > However, this does create massive incongruities in our API, since the > >> > standard library prefers naming stuff with this_kind_of_convention > >> whereas > >> > most Mozilla style guides prefer ThisKindOfConvention. > >> > > >> > >> Perhaps a more annoying issue--though not a showstoper--is that > >> unique_ptr::release() means something quite different than > >> nsXXXPtr::Release() means. > >> > >> > >> > With all of that stated, the questions I want to pose to the > community at > >> > large are as follows: > >> > 1. How much, and where, should we be using standard C++ library > >> > functionality in Mozilla code? > >> > > >> > >> We should definitely prefer using the standard C++ library over writing > any > >> new code for MFBT, *unless* there is consensus that the new thing we'd > do > >> in MFBT is substantially clearer. (For example, I think some people > >> successfully argued that we should have our own atomic types because our > >> interface is clearly better than std::atomic.) > >> > >> Even in the case where MFBT or XPCOM stuff is generally better, We > should > >> *allow* using the standard C++ library anywhere that has additional > >> constraints that warrant a different tradeoff; e.g. needing to be built > >> separately from Gecko and/or otherwise needing to minimize Gecko > >> dependencies. > >> > >> > >> > 3. How should we handle bridge support for standardized features not > yet > >> > universally-implemented? > >> > > >> > >> Generally, I would much rather we implement std::whatever ourselves than > >> implement mozilla::Whatever, all other things being equal. This saves us > >> from the massive rewrites later to s/mozilla::Whatever/std::whatever/; > >> while such rewrites are generally a net win, they are still disruptive > >> enough to warrant trying to avoid them when possible. In the case where > it > >> is just STLPort being behind, we should just add the thing to STLPort > (and > >> try to upstream it). in the case where the lack of support for a useful > >> standard library feature is more widespread, we should still implement > >> std::whatever if the language support we have enables us to do so. I am > not > >> sure where such implementations should live. > >> > >> > >> > 4. When should we prefer our own implementations to standard library > >> > implementations? > >> > > >> > >> It is a judgement call. The default should be to use standard library > >> functions, but we shouldn't be shy about using our own stuff if it is > >> clearly better. On the other side, we shouldn't be shy about replacing > uses > >> of same-thing-but-different Mozilla-specific libraries with uses of the > >> standard libraries, all things being equal. > >> > >> > >> > 5. To what degree should our platform-bridging libraries > >> > (xpcom/mfbt/necko/nspr) use or align with the C++ standard library? > >> > > >> > >> I am not sure why you include Necko in that list. Did you mean NSS? For > >> NSPR and NSS, I would like to include some very basic utilities like > >> ScopedPRFileDesc that are included directly in NSPR/NSS, so that we can > use > >> them in GTest-based tests, even if NSPR and NSS otherwise stick with C. > >> But, I don't know if the module owners of those modules will accept > them. > >> > >> > >> > 6. Where support for an API we wish to use is not universal, what is > the > >> > preferred way to mock that support? > >> > [Note: similar questions also apply to NSPR and NSS with respect to > newer > >> > C99 and C11 functionality.] > >> > > >> > >> There is no tolerance for mass changes like s/PRInt32/int32_t/ in NSPR > or > >> NSS, AFAICT. C99 and C11 are basically off the table too, because > Microsoft > >> refuses to support them in MSVC. > >> > >> > >> Cheers, > >> Brian > >> _______________________________________________ > >> dev-platform mailing list > >> dev-platform@lists.mozilla.org > >> https://lists.mozilla.org/listinfo/dev-platform > >> > > _______________________________________________ > > dev-platform mailing list > > dev-platform@lists.mozilla.org > > https://lists.mozilla.org/listinfo/dev-platform > _______________________________________________ dev-platform mailing list dev-platform@lists.mozilla.org https://lists.mozilla.org/listinfo/dev-platform