Why is there so much co-dependency in Boost? Is there anything to be done about it?
Greetings, As a veteran C++ programmer, I've been an admirer of the Boost library for many years. I've used it at a number of companies I've worked for, especially the SmartPtr library. Right now I'm working for a company that worries a lot about negative exposure to Open Source software issues such as questions that might arise about authorship, copyright or even patent issues. The company does allow the use of Open Source software, but it requires that each piece of code that is brought in first be justified and vetted. Unfortunately, I'm finding this to be a nearly impossible task when I look at the amount of code that must be compiled to use the Boost modules I'm interested in. I've done a study and written some tools, to determine just how many Boost header files must be included to use some of the Boost modules. The numbers are staggering: Any: 79 FileSystem: 276 Smart Ptr: 382 String Algo: 180 I went on and did a tally of which modules these header files came from. Here are the counts for how many other Boost modules each of these modules depends upon: Any: 8 FileSystem: 13 SmartPtr: 8 String Algo: 15 Given these numbers, I think I have to abandon any thoughts of using Boost within my current company. There's no way I'm going to get approval to bring so much code into our work just to get a SmartPtr or FIleSystem library. This is unfortunate, because due to Boost's existence there doesn't seem to be much work going on out there to offer lighter weight alternatives. I'm writing this request in the hopes that there's something I'm missing here, and that someone can point out my folly. Is there a way to utilize any of these Boost modules in such a way that they do not require the inclusion of so much code? If not, does anyone have any suggestions as to how to make this fly with my boss? Has this issue come up before and been considered by the Boost designers? I find the issue baffling. TIA for any help or insight anyone can provide. Steve
Hi Steve, On Sunday, 2. September 2012 22:43:13 steve@parisgroup.net wrote:
Greetings,
As a veteran C++ programmer, I've been an admirer of the Boost library for many years. I've used it at a number of companies I've worked for, especially the SmartPtr library.
Well, working without SmartPtr is a no-go.
Right now I'm working for a company that worries a lot about negative exposure to Open Source software issues such as questions that might arise about authorship, copyright or even patent issues. The company does allow the use of Open Source software, but it requires that each piece of code that is brought in first be justified and vetted. Unfortunately, I'm finding this to be a nearly impossible task when I look at the amount of code that must be compiled to use the Boost modules I'm interested in.
Company policies, sigh.
I've done a study and written some tools, to determine just how many Boost header files must be included to use some of the Boost modules.
Please provide more detail on exactly how you measured this lines. Example programs might be best.
The numbers are staggering:
Any: 79
FileSystem: 276
Smart Ptr: 382
String Algo: 180
Well, nearly everything depends on Boost.Config. Config and especially SmartPtr contain lots of conditionally compiled platform dependent code.
I went on and did a tally of which modules these header files came from. Here are the counts for how many other Boost modules each of these modules depends upon: Any: 8
FileSystem: 13
SmartPtr: 8
String Algo: 15
These numbers seem too high. A bit more detail is needed to further comment on this.
Given these numbers, I think I have to abandon any thoughts of using Boost within my current company. There's no way I'm going to get approval to bring so much code into our work just to get a SmartPtr or FIleSystem library. This is unfortunate, because due to Boost's existence there doesn't seem to be much work going on out there to offer lighter weight alternatives.
Well, SmartPtr is in c++11. But this is out of reach for most people, I guess.
I'm writing this request in the hopes that there's something I'm missing here, and that someone can point out my folly. Is there a way to utilize any of these Boost modules in such a way that they do not require the inclusion of so much code?
If you simpley grep for "include" you get lots and lots of files, especially for low level things like Config or SmartPtr with lots of code for lots of platforms ;-) Did you take a look at the "bcp" tools and tried to extract some modules? This should get you more insight.
If not, does anyone have any suggestions as to how to make this fly with my boss? Has this issue come up before and been considered by the Boost designers? I find the issue baffling.
No ideas there, I got Boost in 10 years ago without anyone noticing. Yours, Jürgen -- * Dipl.-Math. Jürgen Hunold ! * voice: ++49 4257 300 ! Fährstraße 1 * fax : ++49 4257 300 ! 31609 Balge/Sebbenhausen * jhunold@gmx.eu ! Germany
On Mon, 3 Sep 2012, Jürgen Hunold wrote: (snip)
Given these numbers, I think I have to abandon any thoughts of using Boost within my current company. There's no way I'm going to get approval to bring so much code into our work just to get a SmartPtr or FIleSystem library. This is unfortunate, because due to Boost's existence there doesn't seem to be much work going on out there to offer lighter weight alternatives.
Well, SmartPtr is in c++11. But this is out of reach for most people, I guess.
It is also in TR1, which might be more accessible. -- Jeremiah Willcock
On Sun, Sep 2, 2012 at 10:43 PM, steve@parisgroup.net
**
Greetings,
As a veteran C++ programmer, I've been an admirer of the Boost library for many years. I've used it at a number of companies I've worked for, especially the SmartPtr library.
Right now I'm working for a company that worries a lot about negative exposure to Open Source software issues such as questions that might arise about authorship, copyright or even patent issues. The company does allow the use of Open Source software, but it requires that each piece of code that is brought in first be justified and vetted. Unfortunately, I'm finding this to be a nearly impossible task when I look at the amount of code that must be compiled to use the Boost modules I'm interested in.
I've done a study and written some tools, to determine just how many Boost header files must be included to use some of the Boost modules. The numbers are staggering:
Any: 79
FileSystem: 276
Smart Ptr: 382
String Algo: 180
I went on and did a tally of which modules these header files came from. Here are the counts for how many other Boost modules each of these modules depends upon:
Any: 8
FileSystem: 13
SmartPtr: 8
String Algo: 15
Given these numbers, I think I have to abandon any thoughts of using Boost within my current company. There's no way I'm going to get approval to bring so much code into our work just to get a SmartPtr or FIleSystem library. This is unfortunate, because due to Boost's existence there doesn't seem to be much work going on out there to offer lighter weight alternatives.
I'm writing this request in the hopes that there's something I'm missing here, and that someone can point out my folly. Is there a way to utilize any of these Boost modules in such a way that they do not require the inclusion of so much code? If not, does anyone have any suggestions as to how to make this fly with my boss? Has this issue come up before and been considered by the Boost designers? I find the issue baffling.
TIA for any help or insight anyone can provide.
I think at some point in the past it was suggested that Boost could use a tiered system, whereby libraries on tier n could only depend on libraries in tiers 0, ..., n. The tier of a library would give some indication as to how fundamentally and generally useful that library is. I don't know how practically informative such a stratification would ultimately be, though. - Jeff
On Sun, Sep 2, 2012 at 10:43 PM, steve@parisgroup.net
wrote: Greetings, As a veteran C++ programmer, I've been an admirer of the Boost library for many years. I've > used it at a number of companies I've worked for, especially the SmartPtr library. Right now I'm working for a company that worries a lot about negative exposure to Open Source software issues such as questions that might arise about authorship, copyright or > > even
From: boost-users-bounces@lists.boost.org [mailto:boost-users-bounces@lists.boost.org] On Behalf Of Jeffrey Lee Hellrung, Jr. Sent: Monday, September 03, 2012 10:58 PM To: boost-users@lists.boost.org Subject: Re: [Boost-users] Why is there so much co-dependency in Boost? Is there anything to be done about it? patent issues. The company does allow the use of Open Source software, but it requires >that each piece of code that is brought in first be justified and vetted. Unfortunately, I'm >finding this to be a nearly impossible task when I look at the amount of code that must be >compiled to use the Boost modules I'm interested in. I don't think that you can avoid using all-of-Boost or none-of-Boost. There are very good reasons for the co-dependency. Concentrate your arguments on the massive benefits you are getting? Boost has put a lot of effort into making sure that all files (including documentation and graphics) contain an authors' copyright claim notice (and that it is a correct claim - and have rejected items for which this was not possible). (There is a 'sinners list' at http://boost.cowic.de/rc/inspect-trunk.html - so you can check the few libraries and files that do not conform. Don't panic at the number of items missing - few are actual C++ code - most are in documentation and examples). Although it is unlikely that any code contains patentable concepts, it is not possible to be sure until this is tested in the courts. Boost would not knowingly provide software that is patented without marking it as such clearly. Because Boost is a leader in software development, that a library is accepted for Boost makes it very much less likely that it is already patented, and the code being placed in the public domain may provide evidence of 'prior art' to thwart future attempts to obtain a patent. Finally, there are very many companies using Boost and none, to my knowledge, have reported getting into trouble so far. You will need to work to get a blanket acceptance of the all Boost libraries? HTH Paul --- Paul A. Bristow, Prizet Farmhouse, Kendal LA8 8AB UK +44 1539 561830 07714330204 pbristow@hetp.u-net.com
Am 04.09.2012 18:16, schrieb Paul A. Bristow:
Because Boost is a leader in software development, that a library is accepted for Boost makes it very much less likely that it is already patented, and the code being placed in the public domain may provide evidence of 'prior art' to thwart future attempts to obtain a patent.
Do you have formal escrow procedures for that? To proof mere existence in a legally sustainable way, it would be sufficient to apply cryptographically signed timestamps. German law provides for "qualified timestamps" (§ 9 Signaturgesetz). I think they are based on European directives. What I don't know is whether there are similar concepts in other important jurisdictions such as the US. -- Jens
On Sep 5, 2012, at 2:29 PM, Jens Müller
Am 04.09.2012 18:16, schrieb Paul A. Bristow:
Because Boost is a leader in software development, that a library is accepted for Boost makes it very much less likely that it is already patented, and the code being placed in the public domain may provide evidence of 'prior art' to thwart future attempts to obtain a patent.
Do you have formal escrow procedures for that?
To proof mere existence in a legally sustainable way, it would be sufficient to apply cryptographically signed timestamps.
German law provides for "qualified timestamps" (§ 9 Signaturgesetz). I think they are based on European directives. What I don't know is whether there are similar concepts in other important jurisdictions such as the US.
No, Boost does not. We've got svn history (and before that, cvs), and a whole slew of mailing list archives. -- Marshall Marshall Clow Idio Software mailto:mclow.lists@gmail.com A.D. 1517: Martin Luther nails his 95 Theses to the church door and is promptly moderated down to (-1, Flamebait). -- Yu Suzuki
On 03.09.2012 07:43, steve@parisgroup.net wrote:
Greetings,
Right now I'm working for a company that worries a lot about negative exposure to Open Source software issues such as questions that might arise about authorship, copyright or even patent issues. The company does allow the use of Open Source software, but it requires that each piece of code that is brought in first be justified and vetted.
Leaving the issue of Boost's structure aside, how does this vetting process even work? I can maybe see someone looking over the code to look for well-known patented software patterns (Does anyone know such? I can't think of any outside of lockfree programming.), but how on earth would you verify authorship or copyright, beyond what the file says? Do you scan the commit history of the files? Also, what's the point? The code is released by everyone who contributed to it under the liberal Boost license. You won't find any comments or commit messages to the point of "oh, by the way, this isn't under the BSL". Or maybe someone who looks it over is expected to find similarities to other software, which isn't under the BSL? This is, in my opinion, completely impossible - there's just way too much code out there to compare to to make any significant difference. How would that look in court? "Yeah, these people claim that Boost contains some of their GPL code, but when we decided to use Boost, we compared its code to 0.0001% of the GPL code in existence (a generous estimate) and didn't find similarities, so we shouldn't be liable!" Maybe you can find a way to convince your boss that the policy just doesn't make sense. Sebastian
I have not been through the Boost source but I have gone through other open source code in this kind of process. It is amazing how much code exists that still has comments like “Property of ...” or “Copyright ....” regardless of the general say GPL license for the project source. The person providing the code means well but may not understand the legal ramifications. Algorithms may be patented (such as some crypto ones) so unless the open source project provides a method of ensuring such code is not included when it is built you might have to get a license to use the project. The copyright registration in the US at least requires the names of all contributors and their involvement. If you contribute it needs to be clear that you have the right to contribute as some companies may assert rights through employment agreements even if it is not directly in your job scope. If a company uses open source code without due diligence to the origin of code the results could be patent infringement litigation, substantial licensing fees, a required change to a company’s product to remove functionality related to the open source code, and/or other similarly unpalatable options. Larry From: Sebastian Redl Sent: Tuesday, September 04, 2012 3:15 AM To: boost-users@lists.boost.org Subject: Re: [Boost-users] Why is there so much co-dependency in Boost? Is there anything to be done about it? On 03.09.2012 07:43, steve@parisgroup.net wrote: Greetings, Right now I'm working for a company that worries a lot about negative exposure to Open Source software issues such as questions that might arise about authorship, copyright or even patent issues. The company does allow the use of Open Source software, but it requires that each piece of code that is brought in first be justified and vetted. Leaving the issue of Boost's structure aside, how does this vetting process even work? I can maybe see someone looking over the code to look for well-known patented software patterns (Does anyone know such? I can't think of any outside of lockfree programming.), but how on earth would you verify authorship or copyright, beyond what the file says? Do you scan the commit history of the files? Also, what's the point? The code is released by everyone who contributed to it under the liberal Boost license. You won't find any comments or commit messages to the point of "oh, by the way, this isn't under the BSL". Or maybe someone who looks it over is expected to find similarities to other software, which isn't under the BSL? This is, in my opinion, completely impossible - there's just way too much code out there to compare to to make any significant difference. How would that look in court? "Yeah, these people claim that Boost contains some of their GPL code, but when we decided to use Boost, we compared its code to 0.0001% of the GPL code in existence (a generous estimate) and didn't find similarities, so we shouldn't be liable!" Maybe you can find a way to convince your boss that the policy just doesn't make sense. Sebastian -------------------------------------------------------------------------------- _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
On Mon, Sep 3, 2012 at 1:43 AM, steve@parisgroup.net
Right now I'm working for a company that worries a lot about negative exposure to Open Source software issues such as questions that might arise about authorship, copyright or even patent issues. The company does allow the use of Open Source software, but it requires that each piece of code that is brought in first be justified and vetted.
I, too, used to work for a company that fretted about such things. In my case the problem became moot when I left to work at a more reasonable company.
I'm writing this request in the hopes that there's something I'm missing here, and that someone can point out my folly. Is there a way to utilize any of these Boost modules in such a way that they do not require the inclusion of so much code? If not, does anyone have any suggestions as to how to make this fly with my boss? Has this issue come up before and been considered by the Boost designers? I find the issue baffling.
I'd like to defend Boost library authors (no central group of designers, btw). The process is just as you've seen in this mailing list. An author builds a library and proposes it for inclusion in Boost. Once a review manager steps forward, the library is offered for review. Often the library is modified to satisfy review feedback; but in due course it is accepted into Boost by consent of the community. Those of us who already use and appreciate Boost are the ones most likely to submit a library for consideration. Why would any one of us refrain from using valuable Boost features in building that new library? We are programmers trying to solve a technical problem, not lawyers inventing doomsday scenarios. Just as with the recent evolution of the C++ language itself, many of the most powerful Boost libraries are specifically designed to make it easier to build other libraries. When Boost offers support that cannot readily be licensed elsewhere -- support that would be prohibitively expensive to rebuild from scratch! -- a good engineer will leverage it. Good engineering involves reusing available technology rather than reinventing it. Forbidding engineers from using available technology is the opposite of good engineering. It is far from surprising to me that Boost libraries heavily use other Boost libraries. That seems entirely appropriate.
On Mon, Sep 3, 2012 at 12:43 AM, steve@parisgroup.net
**
Right now I'm working for a company that worries a lot about negative exposure to Open Source software issues such as questions that might arise about authorship, copyright or even patent issues. The company does allow the use of Open Source software, but it requires that each piece of code that is brought in first be justified and vetted. Unfortunately, I'm finding this to be a nearly impossible task when I look at the amount of code that must be compiled to use the Boost modules I'm interested in.
The Boost license is pretty liberal as well as being pretty explicit. I've been at a number of companies where they've had their legal teams vet the license terms and, as long as license terms pass muster, the code is welcome from a legal perspective. -- Chris Cleeland
steve@parisgroup.net wrote:
Greetings, As a veteran C++ programmer, I've been an admirer of the Boost library for many years. I've used it at a number of companies I've worked for, especially the SmartPtr library.
I've done a study and written some tools, to determine just how many Boost header files must be included to use some of the Boost modules. The numbers are staggering:
... This is a legitimate concern which IMO has not been taken seriously by the Boost community. To some extent it's unavoidable since it's more efficcient to have one "best" solution imported everywhere rather than replecating code. But it doesn't have to be as bad as it currently is. And it's only getting worse as more libraries get added to Boost. Here's what I suggest for boost users such as yourself: a) don't use "convenience headers" which suck in all the headers in a library rather than just the one's used. It seems tedious because one has to read more carefully to know which headers to use but it saves huge amounts of build time and diminishes "dependency surprises" which can cost a lot of time to track down. b) a few libraries "infect" your code with "spreading" depencies. Use your analysis to detect these libraries and complain about them. I have done this in the past to no effect. It did make me feel I was doing something though. If you can't get library authors to see this, you'll just have to avoid that library or fork your own copy. c) In your own code, use pre-compiled headers. This speeds up re-builds. It DOES force you to spend some time looking at how you've divided up your own code but this time is a good investment. Here's what I suggest library author's do: a) Take this gentlement's complaint seriously. b) Consider eliminating "convenience" headers. c) When writing documentation avoid depence on "convenience headers". This seems like it adds some work - less conveniece - but hels addressing this man's problem. Here's what Boost can do. Something like: a) Formalize the comcept of boost library "levels" i) core - e.g. config, auto-link, BOOST_NONCOPIABLE, ... ii) utility - e.g. scoped_ptr, ... iii) application support - e.g serialization Every boost component would depend only on components at the same or lower level. The assignment of library level would be part of the review process. The motivation here is to support the future growth of Boost and C++ libraries in general. I see this as the fundamental requirement behind any efforts to achive "Boost Modularization" Robert Ramey
Am 04.09.2012 20:29, schrieb Robert Ramey:
a) don't use "convenience headers" which suck in all the headers in a library rather than just the one's used.
I've read an advice on the mailing list that boost libraries should provide a 'all.hpp' (containing all headers of the library). Is it not recommended any more?
On Tue, Sep 04, 2012 at 07:38:41PM +0200, Oliver Kowalke wrote:
Am 04.09.2012 20:29, schrieb Robert Ramey:
a) don't use "convenience headers" which suck in all the headers in a library rather than just the one's used.
I've read an advice on the mailing list that boost libraries should provide a 'all.hpp' (containing all headers of the library). Is it not recommended any more?
I'd say they serve two different types of crowds. There's the people that care about dependencies and build times, and there's the people that want to pull in everything for proof-of-concept or exploratory coding without looking up everything constantly in documentation. It would be a major disservice to the latter kind if there was no boost/foo/kitchen_sink.hpp for library foo. There's an additional reason as to why some people include all-headers, and that's documentation that doesn't clearly mention in which headers different functionality exists. There's some Boost libraries that are completely implicit about which headers contains what parts, which makes it some major guesswork to get the bits and pieces you want included, especially if you do not have #include-completion in your editor. -- Lars Viklund | zao@acc.umu.se
Lars Viklund wrote:
On Tue, Sep 04, 2012 at 07:38:41PM +0200, Oliver Kowalke wrote:
Am 04.09.2012 20:29, schrieb Robert Ramey:
a) don't use "convenience headers" which suck in all the headers in a library rather than just the one's used.
I've read an advice on the mailing list that boost libraries should provide a 'all.hpp' (containing all headers of the library). Is it not recommended any more?
I'd say they serve two different types of crowds. There's the people that care about dependencies and build times, and there's the people that want to pull in everything for proof-of-concept or exploratory coding without looking up everything constantly in documentation.
It would be a major disservice to the latter kind if there was no boost/foo/kitchen_sink.hpp for library foo.
OK - we can compromise on this point. Authors can provide convenience headers for this type of user ...
There's an additional reason as to why some people include all-headers, and that's documentation that doesn't clearly mention in which headers different functionality exists.
while at the same time (re)organizing the documentation and code to support the inclusion of only necessary code.
There's some Boost libraries that are completely implicit about which headers contains what parts, which makes it some major guesswork to get the bits and pieces you want included, especially if you do not have #include-completion in your editor.
Which is a source of the problems that the original poster is noting. Let's update code/dcoument/review guidlines to include these considerations. Robert Ramey
a) don't use "convenience headers" which suck in all the headers in a library rather than just the one's used. I've read an advice on the mailing list that boost libraries should
Am 04.09.2012 20:29, schrieb Robert Ramey: provide a 'all.hpp' (containing all headers of the library). Is it not recommended any more? I'd say they serve two different types of crowds. There's the people
On Tue, Sep 04, 2012 at 07:38:41PM +0200, Oliver Kowalke wrote: that care about dependencies and build times, and there's the people that want to pull in everything for proof-of-concept or exploratory coding without looking up everything constantly in documentation.
It would be a major disservice to the latter kind if there was no boost/foo/kitchen_sink.hpp for library foo.
There's an additional reason as to why some people include all-headers, and that's documentation that doesn't clearly mention in which headers different functionality exists. This is a documentation bug and the user should just create a ticket so
Le 05/09/12 00:10, Lars Viklund a écrit : that this is fixed.
There's some Boost libraries that are completely implicit about which headers contains what parts, which makes it some major guesswork to get the bits and pieces you want included, especially if you do not have #include-completion in your editor.
As for example ... Best, Vicente
On Wed, Sep 05, 2012 at 07:13:05AM +0200, Vicente J. Botet Escriba wrote:
Le 05/09/12 00:10, Lars Viklund a écrit :
There's some Boost libraries that are completely implicit about which headers contains what parts, which makes it some major guesswork to get the bits and pieces you want included, especially if you do not have #include-completion in your editor.
As for example ...
My statement was what I subjectively felt during hacking sprees when I know what I want, but can't readily find where it's located when reading about it in the main body of the documentation. Going through the libraries, it seems to be mostly a matter of lack of such detail in the prose non-reference sections, particularly around the sections that introduce a new concept and for the inline samples, like: * Bimap tutorial; * Chrono user's guide; * Concept; * Context only has "include all.hpp or the individual headers", with no reference listing of headers and types at all; * Filesystem v3 only documents top-level filesystem.hpp and filesystem/fstream.hpp; * Iterator - the only mention of headers at all is in the top-level bullet points for a few of the types; * Lambda has a brief listing in Installing, but nothing in-line; * Locale doesn't mention headers by name, but as it's Doxygenish, it links most names to the header page where they live. * MSM doesn't even mention any all-header, it just seems to assume you know exactly what headers to use, and the reference section is flat; * MPL tutorial; * NumericConversion's only mention of any headers is in examples for the sections; * Parameter has a decent set of cross-referenced docs, once you find it under section 7 - until that point no mention of the headers exists; * PointerContainer lacks header mentions in both the tutorial and the reference, with the latter surprising as the reference doesn't contain any header information at all, instead having to go to the non-common 'Library headers' section; * Polygon seems to be completely lacking any header information whatsoever; * ProgramOptions - no mention in the tutorial, overview or howto; * PropertyTree - reasonably straightforward based on the names of the headers in the reference; prose rarely links typenames to the right headers; * Range separates the reference and the header structure; confusing if you've finally gotten used to information being in the reference section; * Test only mentions headers occasionally in samples, I've yet to find anything standalone talking about includes at all, except for the unrecommended standalone header; * Thread lacks an overview of the headers, mentioning them occasionally in the reference - I just give up and use the all-header; * Wave has no top-level index, but the few sections mention all headers by name and synopsis and links to (disabled in Trac) trunk versions of the headers; The libraries that use qbk-style documentation tends to be pretty acceptable, as the common style means that you get a list of headers on the landing page for the library. While not optimal while reading, it's at least something. This might not be a major problem if you're willing to manually cross-reference the reference sections when reading the tutorial/guide/introduction sections in which is where the meat of the documentation usually is located, but it feels quite the wrong way around to dive into header listings to find the type/concept you want, when the main body of documentation around it is in the prose. On an unrelated note, the next time I have to use the expandos in the Iostreams or Serialization documentation, I'm going to cry. They're such fiddly and tiny targets, so unfriendly that I think more than once about using the library due to the inaccessibility of the documentation. Now that I've insulted practically every single Boost author, let me say "good job, everyone". The level of documentation in Boost is way better than what you usually see out in the wild, it's just that it's quite easy to feel disorientated. -- Lars Viklund | zao@acc.umu.se
Lars Viklund wrote:
On an unrelated note, the next time I have to use the expandos in the Iostreams or Serialization documentation, I'm going to cry. They're such fiddly and tiny targets, so unfriendly that I think more than once about using the library due to the inaccessibility of the documentation.
Hmmm - would just making these bigger address your concern here? That would be easy to fix - just add a track item. Or is it the whole concept of using the navigator. Note that the serialization library has the index at the top of each page just as all the other libraries do. Maybe just supressing the navigator panel would be more to your taste. In Firefox at least. one can right click to open a frame in a new window at which point - as far as I can tell - it would be the same as every other boost library. I included the "expando" after the fact since I found it excedingly tedious to navigate complex documentation through the pages themselves Robert Ramey.
On Wed, Sep 05, 2012 at 09:23:34AM -0800, Robert Ramey wrote:
Lars Viklund wrote:
On an unrelated note, the next time I have to use the expandos in the Iostreams or Serialization documentation, I'm going to cry. They're such fiddly and tiny targets, so unfriendly that I think more than once about using the library due to the inaccessibility of the documentation.
Hmmm - would just making these bigger address your concern here? That would be easy to fix - just add a track item.
I'm afraid that larger targets might space out the items too much.
Or is it the whole concept of using the navigator. Note that the serialization library has the index at the top of each page just as all the other libraries do. Maybe just supressing the navigator panel would be more to your taste. In Firefox at least. one can right click to open a frame in a new window at which point - as far as I can tell - it would be the same as every other boost library.
A few things that might make it slightly more accessible: * Have an "expand-all" button to expand everything, which would make the sidebar much more similiar to the typical Boost library landing page. For Serialization, expanding everything is at most two screenheights or so, which is quite manageable and scrollable. * If the sidebar becomes hideable, the documentation pages themselves would need some prev/up/next navigation doohickeys. * If the sidebar becomes hideable, there ought to be a top-level page that contains the ToC. Of these things, the "expand-all" and bigger twiddle targets would likely be among the easier, while the other two would require a lot more work.
I included the "expando" after the fact since I found it excedingly tedious to navigate complex documentation through the pages themselves
It's an interesting idea and helps a lot with having to go back-and-forth between the top-level page and any subpages of interest. The downside is that it's hard to open a part you're interested in a new tab/window and retain the sidebar frame. One of the bothersome things about S11n/Iostreams documentation is that it's impossible to link someone a subpage on IRC or on mail while retaining the sidebar. -- Lars Viklund | zao@acc.umu.se
Lars Viklund wrote:
On Wed, Sep 05, 2012 at 09:23:34AM -0800, Robert Ramey wrote: A few things that might make it slightly more accessible:
* Have an "expand-all" button to expand everything, which would make the sidebar much more similiar to the typical Boost library landing page. For Serialization, expanding everything is at most two screenheights or so, which is quite manageable and scrollable
* If the sidebar becomes hideable, the documentation pages themselves would need some prev/up/next navigation doohickeys.
* If the sidebar becomes hideable, there ought to be a top-level page that contains the ToC.
Of these things, the "expand-all" and bigger twiddle targets would likely be among the easier, while the other two would require a lot more work.
These are in fact not too hard. I'll consider it. It turns out that I've been sucked in to spending time learning about XSLT, XML editors, DocBooK, BoostBook. etc. So I've considered re-formating the serialization documentation in terms of BoostBook which would address all he the above and give the serialization library documentation a more up date look compatible with the other boost libraries. BUT - I would lose the navigator - which I'm actually in love with. What I would really like is an XSLT script which would build a free-floating BoostBook Navigator which would navigate all the boost book docs. Of course it's usage would be optional.
I included the "expando" after the fact since I found it excedingly tedious to navigate complex documentation through the pages themselves
It's an interesting idea and helps a lot with having to go back-and-forth between the top-level page and any subpages of interest. The downside is that it's hard to open a part you're interested in a new tab/window and retain the sidebar frame.
Agreed. Actually it probably would be easy to implement a right click functionality to open the selected page in another tab or window. So to summarize a) a Navigator in a separate window which looks like the table of contents panel in the serialzation libary b) with expand/collapse functionality c) which opens pages in a main window, new window or tab d) is built using an XSLT script from BoostBook XML. e) could be used to navigate all boost book documentation
One of the bothersome things about S11n/Iostreams documentation is that it's impossible to link someone a subpage on IRC or on mail while retaining the sidebar.
Totally agree. My above idea would fix this since the navigator would be in a separate window and not clobber the page's URL. Robert Ramey
Of these things, the "expand-all" and bigger twiddle targets would likely be among the easier, while the other two would require a lot more work.
These are in fact not too hard. I'll consider it.
It turns out that I've been sucked in to spending time learning about XSLT, XML editors, DocBooK, BoostBook. etc. So I've considered re-formating the serialization documentation in terms of BoostBook which would address all he the above and give the serialization library documentation a more up date look compatible with the other boost libraries.
BUT - I would lose the navigator - which I'm actually in love with.
What I would really like is an XSLT script which would build a free-floating BoostBook Navigator which would navigate all the boost book docs. Of course it's usage would be optional.
Nice idea. Robert: the HTML in your navigator pane looks rather similar to the HTML in generated for the Boostbook TOC page, could your scripts be injected in without too much change? If so we would just need to tweak HTML generation to produce an extra TOC page along with the frames etc? BTW I really don't like those tiny graphics either. Also just noted that docbook can output web help, which looks rather nice: http://docbook.sourceforge.net/release/xsl/current/webhelp/docs/content/ch01... but appears to require Java client side? John.
but appears to require Java client side?
I don't think that's so. DocBook/WebHelp requires JavaScript on the client side. I think it requires Java only for the build (ie building the search indexes). Regards, Richard. PS. BTW, the starting point should be : http://docbook.sourceforge.net/release/xsl/current/webhelp/docs/content/inde... (or http://docbook.sourceforge.net/release/xsl/current/webhelp/docs/index.html, which redirects to the above).
Also just noted that docbook can output web help, which looks rather nice: http://docbook.sourceforge.net/release/xsl/current/webhelp/docs/content/ch01... but appears to require Java client side?
John Maddock wrote:
Of these things, the "expand-all" and bigger twiddle targets would likely be among the easier, while the other two would require a lot more work.
These are in fact not too hard. I'll consider it.
It turns out that I've been sucked in to spending time learning about XSLT, XML editors, DocBooK, BoostBook. etc. So I've considered re-formating the serialization documentation in terms of BoostBook which would address all he the above and give the serialization library documentation a more up date look compatible with the other boost libraries.
BUT - I would lose the navigator - which I'm actually in love with.
What I would really like is an XSLT script which would build a free-floating BoostBook Navigator which would navigate all the boost book docs. Of course it's usage would be optional.
Nice idea. Robert: the HTML in your navigator pane looks rather similar to the HTML in generated for the Boostbook TOC page, could your scripts be injected in without too much change? If so we would just need to tweak HTML generation to produce an extra TOC page along with the frames etc? BTW I really don't like those tiny graphics either.
Also just noted that docbook can output web help, which looks rather nice: http://docbook.sourceforge.net/release/xsl/current/webhelp/docs/content/ch01... but appears to require Java client side? John.
John Maddock wrote:
Of these things, the "expand-all" and bigger twiddle targets would likely be among the easier, while the other two would require a lot more work.
These are in fact not too hard. I'll consider it.
It turns out that I've been sucked in to spending time learning about XSLT, XML editors, DocBooK, BoostBook. etc. So I've considered re-formating the serialization documentation in terms of BoostBook which would address all he the above and give the serialization library documentation a more up date look compatible with the other boost libraries.
BUT - I would lose the navigator - which I'm actually in love with.
What I would really like is an XSLT script which would build a free-floating BoostBook Navigator which would navigate all the boost book docs. Of course it's usage would be optional.
Nice idea. Robert: the HTML in your navigator pane looks rather similar to the HTML in generated for the Boostbook TOC page, could your scripts be injected in without too much change? If so we would just need to tweak HTML generation to produce an extra TOC page along with the frames etc?
What is the "Boostbook TOC page"? is that the TOC for each library? In any case what is needed is an XSLT script which would process all the BoostBook files and result in an HTML file which would contain the navigator. This Navigator would include some boilerplate javascript. Note that IO streams has a different (probably slicker) implication of the navigator javascript. a) It makes the navigator separate from the pages and doesn't occupy any significant storage. b) It's usage would be optional. c) It preserves theURL of the origninal pages d) It's cross platform e) It lets us add a couple of cool simple features like opening pages in other tabs. I'm currently bogged down in trying to implement my boost candidate/incubator concept I proosed at boost con a couple of years ago. I is in the course of this that I've become familiar with the pros/cons of docbook/boostbook.
BTW I really don't like those tiny graphics either.
Halleluhuh - at last something easy to fix!!!
Also just noted that docbook can output web help, which looks rather nice: http://docbook.sourceforge.net/release/xsl/current/webhelp/docs/content/ch01... but appears to require Java client side?
Hmm - worthy of investigation. Any such Navigator is goint to require Javascript. I don't see this is a downside. a) Javascript is pretty ubiquitous b) The usage of the "navigator" is optional c) It doesn't take away anything we already have. My little experience with XSLT and DocBook suggests that, like everything else, there's more to it than meets the eye. But only trying it can we know. Robert Ramey
On 06 September 2012 18:54 Robert Ramey [mailto:ramey@rrsd.com] wrote :-
Hmm - worthy of investigation. Any such Navigator is goint to require Javascript. I don't see this is a downside.
a) Javascript is pretty ubiquitous b) The usage of the "navigator" is optional c) It doesn't take away anything we already have.
According to http://www.boost.org/development/requirements.html#Documentation " The format for documentation should be HTML, and should not require an advanced browser or server-side extensions. Style sheets are acceptable. ECMAScript/JavaScript is not acceptable." Not sure quite why such a explicit refusal of javascript but I imagine there were (at least) good reasons for this so may be worth some discussion to see if the reasons are still extant before doing any work. Alex
Alex Perry wrote:
On 06 September 2012 18:54 Robert Ramey [mailto:ramey@rrsd.com] wrote
According to http://www.boost.org/development/requirements.html#Documentation " The format for documentation should be HTML, and should not require an advanced browser or server-side extensions. Style sheets are acceptable. ECMAScript/JavaScript is not acceptable."
Not sure quite why such a explicit refusal of javascript but I imagine there were (at least) good reasons for this so may be worth some discussion to see if the reasons are still extant before doing any work.
That is/was the original policy from many years ago. In the case of the navigators for serialzation and io streams, no one has requested enforcement of this policy. Basically this should be modified to permit javascript compatible with know browsers. BUT - if the "navigator" is factored out as a seperate, optional, boost book compatible component, the original policy isn't violated any more as the original boost documentation web pages wouldn't contain any javascript. Maybe another reason why this would be a good idea. Robert Ramey
Alex
Hi.
2012/9/4 Oliver Kowalke
I've read an advice on the mailing list that boost libraries should provide a 'all.hpp' (containing all headers of the library). Is it not recommended any more?
I think that the mere existence of all.hpp files is not the problem here. What should be avoided is to use these all.hpp files within boost itself as that would unnecessarily enlarge the dependency tree. But then, I do not know whether such include directives currently exist within boost. Ingolf
I've done a study and written some tools, to determine just how many Boost header files must be included to use some of the Boost modules. The numbers are staggering:
...
This is a legitimate concern which IMO has not been taken seriously by the Boost community.
Why do you think this is not being taken seriously? I'm under the impression that there is disagreement as to the real priority of this concern. I think that is quite different. I know I put forward several points that may well be perceived as not taking this seriously. I was genuinely asking why the OP cared about the number of included header files. As a technical question I still find it puzzling to find this a development priority since the solutions involve considerable development effort and a combinatorial explosion in deployed configurations. For these disadvantages, if I am to spend time reducing header file dependencies I require a good reason for expending this effort. Most arguments about this have centered around satisfying an existing arbitrary rule in other organisations. While I sympathise with the developers having to deal with these organisations, it is not compelling to prioritise this issue over and above the work I would be doing to extend Boost.Range or deal with trac tickets.
To some extent it's unavoidable since it's more efficcient to have one "best" solution imported everywhere rather than replecating code.
But it doesn't have to be as bad as it currently is. And it's only getting worse as more libraries get added to Boost.
Again why is it 'Bad'? This is re-use in most examples I have seen. Coupling isn't inherently bad. Re-use is coupling. Specific examples of poor coupling most probably exist. I suspect these would receive a good response from the Boost development community if these were specifically raised.
Here's what I suggest for boost users such as yourself:
a) don't use "convenience headers" which suck in all the headers in a library rather than just the one's used. It seems tedious because one has to read more carefully to know which headers to use but it saves huge amounts of build time and diminishes "dependency surprises" which can cost a lot of time to track down.
+1 - Definitely good advice. We Boost developers should provide the option for the users to make their own choice with respect to having a simple easy to remember include path with slower compile-times, or more specific includes. I believe we do that well.
b) a few libraries "infect" your code with "spreading" depencies. Use your analysis to detect these libraries and complain about them. I have done this in the past to no effect. It did make me feel I was doing something though. If you can't get library authors to see this, you'll just have to avoid that library or fork your own copy.
Did you complain about them in trac tickets that have not been resolved? I definitely am guilty of recently having poor response times to trac tickets. This is something which I would like to assist in getting resolved. Of course, if the library maintainer disagrees that the header file inclusion or dependency is 'bad' then the usual rules apply that the maintainer has the final say. The benefit of avoiding design by committee comes at the cost of some disagreement.
c) In your own code, use pre-compiled headers. This speeds up re-builds. It DOES force you to spend some time looking at how you've divided up your own code but this time is a good investment.
I'm personally undecided about pre-compiled headers. I find this normally means that one has considerably increased the amount of included code per translation unit and therefore generated additional coupling that is far more significant than the perhaps sub-optimal inclusions within Boost.
Here's what I suggest library author's do:
a) Take this gentlement's complaint seriously.
I would be surprised if any of the Boost developers didn't take this seriously. My perception is that many of us are not convinced this is a priority. That isn't the same thing.
b) Consider eliminating "convenience" headers.
I think the Boost library authors are good at choosing the right level of headers to include. Do you have some specific counter-examples?
c) When writing documentation avoid depence on "convenience headers". This seems like it adds some work - less conveniece - but hels addressing this man's problem.
I definitely took the approach of using convenience headers in examples. I did this because the header files were not the primary focus of the example code. The convenience header in my examples provides code that works while reducing clutter in my example. I therefore disagree that we should have a policy of avoiding the convenience headers. Perhaps instead we could provide additional guidance as to how to use the layers of header files. However this seems trivially obvious.
Here's what Boost can do. Something like:
a) Formalize the comcept of boost library "levels" i) core - e.g. config, auto-link, BOOST_NONCOPIABLE, ... ii) utility - e.g. scoped_ptr, ... iii) application support - e.g serialization
Layering the libraries is a good idea. It would appear to be the only manageable way of providing more deployment componentisation in sensible number of tested cohesive units.
Every boost component would depend only on components at the same or lower level. The assignment of library level would be part of the review process.
The motivation here is to support the future growth of Boost and C++ libraries in general. I see this as the fundamental requirement behind any efforts to achive "Boost Modularization"
Robert Ramey
Neil Groves
Neil Groves wrote:
This is a legitimate concern which IMO has not been taken seriously by the Boost community.
Why do you think this is not being taken seriously? I'm under the impression that there is disagreement as to the real priority of this concern. I think that is quite different.
I was specifically refering to the recent discussion of Boost Exception. I got "out voted" on that one which I characterized as having my "concerns not being taken seriously". If you prefer to say "disagreement as to real priority" I'm fine with that. I don't think we're disagreeing here.
To some extent it's unavoidable since it's more efficcient to have one "best" solution imported everywhere rather than replecating code.
But it doesn't have to be as bad as it currently is. And it's only getting worse as more libraries get added to Boost.
Again why is it 'Bad'? This is re-use in most examples I have seen. Coupling isn't inherently bad. Re-use is coupling.
OK - maybe 'bad' is the wrong word. As new libraries get added they depend on previous libraries. It's generally a good thing that code not be repeated. But it makes it more likely that a library user is importing stuff that might surprise him. This is unfortunate (bad) but unavoidable. It's "bad" when the library author includes surprising and or unnecessary dependencies. These bite the user with unexpected behavior like a) much bigger executables than expected b) new requirements like multi-threading c) breakage from updates of seemingly unrelated components.
Specific examples of poor coupling most probably exist. I suspect these would receive a good response from the Boost development community if these were specifically raised.
In many cases there is disagreement what "poor coupling" is.
Did you complain about them in trac tickets that have not been resolved?
This is not an issue regarding bugs. There are differences of opinion regarding library design and approriate functionality and requirements. This differences are reconciled as best we can through the review process.
b) Consider eliminating "convenience" headers.
I think the Boost library authors are good at choosing the right level of headers to include. Do you have some specific counter-examples?
I don't think that "convenience headers" all that bad. As a user, I'm free not to use them (and I don't). BUT - a) I think they encourage practices among users that I don't think are good ones. b) I don't think they are really necessary. The serialization library - a big library - has never had them and no one has ever asked for them. c) It's trivial for users to make their own if they want them.
I definitely took the approach of using convenience headers in examples. I did this because the header files were not the primary focus of the example code. The convenience header in my examples provides code that works while reducing clutter in my example.
d) I understand this. But I see it differently. If one has to use convenience headers to make the examples simple enough to understand, I would consider the possibility that the library might be made clearer and easier to use by refactoring the headers..
Perhaps instead we could provide additional guidance as to how to use the layers of header files.
I think that is one of the things I'm proposing here.
However this seems trivially obvious.
lol - then I guess it will be easy to agree on how to it Robert Ramey
On Sep 3, 2012 2:58 PM, "steve@parisgroup.net"
Greetings,
Right now I'm working for a company that worries a lot about negative
exposure to Open Source software issues such as questions that might arise about authorship, copyright or even patent issues. The company does allow the use of Open Source software, but it requires that each piece of code that is brought in first be justified and vetted. Unfortunately, I'm finding this to be a nearly impossible task when I look at the amount of code that must be compiled to use the Boost modules I'm interested in.
Why would open source be more likely to infringe a patent than your own solution? It is less likely in fact since the public availability of code can be used to demonstrate prior art. Incorporating third party software into your own QA process is often very sensible.
I've done a study and written some tools, to determine just how many
Boost header files must be included to use some of the Boost modules. The numbers are staggering:
Any: 79
FileSystem: 276
Smart Ptr: 382
String Algo: 180
I went on and did a tally of which modules these header files came from. Here are the counts for how many other Boost modules each of these modules depends upon:
Any: 8
FileSystem: 13
SmartPtr: 8
String Algo: 15
Given these numbers, I think I have to abandon any thoughts of using Boost within my current company. There's no way I'm going to get approval to bring so much code into our work just to get a SmartPtr or FIleSystem
I am not staggered. Additionally the number of files has to be one of the most useless software metrics in the known multiverse! library. This is unfortunate, because due to Boost's existence there doesn't seem to be much work going on out there to offer lighter weight alternatives.
I'm writing this request in the hopes that there's something I'm missing
here, and that someone can point out my folly. Is there a way to utilize any of these Boost modules in such a way that they do not require the inclusion of so much code? If not, does anyone have any suggestions as to how to make this fly with my boss? Has this issue come up before and been considered by the Boost designers? I find the issue baffling.
The issue simply isnt a development priority. We prefer to emphasise good interfaces to correct code. The internal header file coupling has a potential to increase your build time. Why else do you care (aside from justifying an arbitrary procedure)? If you have compile time issues please bring these up concretely and with measurements.
TIA for any help or insight anyone can provide.
My recommendation would be to look for another job! I think all the Boost devs would like to improve modularisation, and efforts are already underway. Frankly increasing the number of supported deployable configurations is unlikely to improve external quality factors. It is likely to be better to take the better tested ensemble of libraries. Test and use what you like and leave what you dont. I may be on my own here, but my suspicion would be that dogmatic enforcement of inappropriate rules is the primary problem. If you can't trust your developers to include the approved libraries you probably cant trust then to make any change without supervision.
Steve
Neil Groves
participants (20)
-
Alex Perry
-
Chris Cleeland
-
Ingolf Steinbach
-
Jeffrey Lee Hellrung, Jr.
-
Jens Müller
-
Jeremiah Willcock
-
John Maddock
-
Jürgen Hunold
-
Kerry, Richard
-
Larry
-
Lars Viklund
-
Marshall Clow
-
Nat Linden
-
Neil Groves
-
Oliver Kowalke
-
Paul A. Bristow
-
Robert Ramey
-
Sebastian Redl
-
steve@parisgroup.net
-
Vicente J. Botet Escriba