×

Welcome to the Slashdot Beta site -- learn more here. Use the link in the footer or click here to return to the Classic version of Slashdot.

Thank you!

Before you choose to head back to the Classic look of the site, we'd appreciate it if you share your thoughts on the Beta; your feedback is what drives our ongoing development.

Beta is different and we value you taking the time to try it out. Please take a look at the changes we've made in Beta and  learn more about it. Thanks for reading, and for making the site better!

Boost 1.36 Released

kdawson posted more than 4 years ago | from the ain't-no-use-if-you-ain't-got-the-boost dept.

Programming 166

AndrewStephens writes "Good news for C++ programmers: Boost 1.36 has been released with 4 new libraries (including very useful exception templates) and a host of updates. In particular, boost.asio (the cross platform AsyncIO library) has seen major additions and now supports asynchronous disk operations on Windows. Almost every modern C++ codebase uses Boost somewhere, and many of its features find their way into the official language specifications."

cancel ×
This is a preview of your comment

No Comment Title Entered

Anonymous Coward 1 minute ago

No Comment Entered

166 comments

Good news everyone.... (0)

Anonymous Coward | more than 4 years ago | (#24636947)

it's a suppository. C++ may as well be...

Really appreciate it (2, Interesting)

amrik98 (1214484) | more than 4 years ago | (#24637045)

Boost made one of my cross-platform projects extremely easy to write; wrapping network functions to account for differences between Windows and Linux was not fun.

Re:Really appreciate it (3, Insightful)

j00r0m4nc3r (959816) | more than 5 years ago | (#24640301)

Easy to write? Yes. How about maintain? Every instance I've encountered Boost has been a nightmare. Boost tends to encourage the template swamp, that miserable wretched pile of crap which you end up with when people overuse templates and fail to properly comment their code. You can end up with some serious convoluted shit pretty easily with Boost. Eventually you learn it and can decipher it, but that means that every single person on the team, and all newcomers need to waste time getting up to speed on a single 3rd party library. 99% of the time people use Boost for things they really shouldn't just because it's there. It also tends to encourage over-engineering of systems because of the multitude of complex tools available. It's not to say that Boost isn't nice or has it's uses, but people should be very cautious in how they use it.

Now if only (1, Insightful)

Anonymous Coward | more than 4 years ago | (#24637097)

they could get rid of the crappy_api_naming_conventions.

Re:Now if only (1)

smitty_one_each (243267) | more than 4 years ago | (#24638161)

CamelCase is for wikis.

Re:Now if only (3, Insightful)

ampathee (682788) | more than 5 years ago | (#24640013)

That's PascalCase. This is camelCase.

Re:Now if only (1)

krischik (781389) | more than 5 years ago | (#24641881)

That's PascalCase. This is camelCase.

Nope: http://en.wikipedia.org/wiki/CamelCase [wikipedia.org]

Re:Now if only (1)

neokushan (932374) | more than 5 years ago | (#24642853)

Did you even read the link you posted?

For clarity, this article will call the two varieties UpperCamelCase and lowerCamelCase. Some people and organizations use the term camel case only for lower camel case, and refer to upper camel case as Pascal case.

Re:Now if only (1, Troll)

shutdown -p now (807394) | more than 5 years ago | (#24641977)

The crappy_api_naming_conventions are those that are used for the C++ standard library itself - you know, "auto_ptr", "binary_search", "push_back", "basic_istream" etc. So naturally any library that presents itself as a natural extension of the standard one will use the same convention.

Given that it's also the one used by many other languages (Python and Ruby use it for method and variable names, for example), I don't see what's wrong with it. As they go, it's pretty readable. If you really want to see a messy naming convention with no reason to exist save for being different, see Eiffel with its ALL_CAPS_CLASS_NAMES and Underscored_Pascal_Case_Methods.

Slight exaggeration? (0, Troll)

kriss (4837) | more than 4 years ago | (#24637301)

"Almost every modern C++ codebase uses Boost somewhere"? While I think it looks like a pretty useful set of libraries, I must admit that statements like this makes me less inclined to even look at it.

Re:Slight exaggeration? (4, Informative)

imbaczek (690596) | more than 4 years ago | (#24637597)

you'll be missing out, boost fixes lots, I mean LOTS of C++ deficiencies... at a cost of compile times and sometimes bogus compiler errors.

Re:Slight exaggeration? (3, Interesting)

HappySmileMan (1088123) | more than 4 years ago | (#24638249)

A statement on /. makes you less inclined to look at a set of C++ libraries, I'm not quite sure how that logic works, has the statement made on /. somehow affected the quality of the libraries?

Re:Slight exaggeration? (3, Insightful)

kriss (4837) | more than 4 years ago | (#24639019)

Affecting the quality? Obviously not, but I won't stop you for being silly to try to make a point.

I'm seeing a release blurb which looks more like an abbreviated commercial press release - including the mandatory "we're the market leader" claim - for a pretty uninteresting update. While this sort of stuff weasels its way into slashdot every now and then, the whacked out of reality claims definitely raises the bullshit-o-meter alarm.

Allow me to demonstrate using the "Almost every modern uses somewhere" template:

"Almost every modern streaming video server uses Windows Media Technologies somewhere"
"Almost every modern web server uses PHP somewhere"
"Almost every modern web design firm uses Dreamweaver somewhere"

Do these claims affect the quality of whatever technology they're trying to push? No. Are the statements obviously overreaching? Yes. Does the fact that the recommendation (assuming they're attached to one in the first place) both push a product/tech and try to convince me that "it Must be Good since So Many Others use it (especially if they're 'modern')" make me less inclined to buy into the pitch? Oh yes.

YMMV, of course.

Use of Boost? (3, Insightful)

Anonymous Brave Guy (457657) | more than 4 years ago | (#24637341)

Almost every modern C++ codebase uses Boost somewhere

[Citation needed]

Boost is created and used by a highly vocal minority of C++ supergeeks. You can play with the definition of "modern", but it's only been in the recent past that Boost even compiled on more than the bleeding edge platforms. Most of the C++ projects I've worked on professionally are still worrying about whether to allow non-trivial use of templates or how to avoid screwing up exceptions, never mind trying to fight through the mess that is getting Boost installed and running these days and spending time getting lawyers to review the licensing terms.

Re:Use of Boost? (3, Informative)

eddy (18759) | more than 4 years ago | (#24637475)

While I agree that it's a bit pissy to imply that if you're not using boost in your c++ project, you're not 'modern', neither installation nor license ought to be much of an issue. The license is as clear cut as it can be:

Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following:

The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor.

C'mon, that ought to be pretty straight forward, even for a lawyer.

It's been a while since I checked out a new version, but most of Boost didn't need installation since it's mostly include files with templates. You just put them somewhere and include them. Now, there are some libraries (regexp iirc) that need to be compiled, but it builds out of the box on gcc for me.

Re:Use of Boost? (1)

Omnifarious (11933) | more than 4 years ago | (#24637623)

I consider that really sad. For the most part, since about 2004 or 2005 compilers have been perfectly fine for Boost. If most shops are still wondering about this, most shops are using dreadfully old development tools.

That being said, I haven't done any really serious C++ development work since early 2006. I now consider C++ to be the language to go to when Python is just too slow for something. And for that there's Boost.Python [boost.org].

Though, I'm starting to get interested in intensive parallelization and Python is seriously lagging in good multithreading support.

Re:Use of Boost? (1, Interesting)

Anonymous Coward | more than 5 years ago | (#24641265)

take a look at stackless python:
http://www.stackless.com/

Re:Use of Boost? (1)

Omnifarious (11933) | more than 5 years ago | (#24641799)

Except that I don't think even the magic of stackless will give me the true multi-CPU concurrency that I want. :-(

Re:Use of Boost? (1, Insightful)

Anonymous Coward | more than 4 years ago | (#24637771)

[Citation needed]

Boost is created and used by a highly vocal minority of C++ supergeeks.

I'm anything but a c++ geek, let alone supergeek. I've basically read sections of stroustrup and done a few toy examples, and that's it. I have never done anything significant in either C or C++. But even I know about and have used boost. I don't really understand (or want to understand) all that "jam" stuff, but I just use the include-only stuff.

As for compatibility, g++ has always worked ok for me.

It's easy.

Questionable negativity (1, Insightful)

Anonymous Coward | more than 4 years ago | (#24638319)

What's happening? Are these people from commercial sellers of C++ libraries saying bad things about Boost?

Re:Questionable negativity (1)

Anonymous Brave Guy (457657) | more than 5 years ago | (#24640525)

Are these people from commercial sellers of C++ libraries saying bad things about Boost?

Yes, absolutely. There is no possibility that someone simply has different experiences to you that have caused them to criticise something based on objective reasons. Anyone who disagrees with you must have a vested interest.

It's not like I'm new here. Go ahead and check my posting history. You'll find I've got plenty of hours logged writing C++, and as surprising as you might find it, I do actually know what I'm talking about.

Be a good chap and pick up the tin-foil hat on the way out, would you?

Re:Use of Boost? (3, Insightful)

Anonymous Coward | more than 4 years ago | (#24639457)

why is this bullshit even getting modded 5 Insightful? It's pure flamebait! Most half-decent compilers don't have problems with boost, the license consists of 5 sentences and .... how exactly can you screw up the installation of a mostly header-only library?

Re:Use of Boost? (1)

Anonymous Brave Guy (457657) | more than 5 years ago | (#24640511)

Most half-decent compilers don't have problems with boost

Ah, the no true Scotsman argument.

Unfortunately, the reality is that compilers outside of the mainstream ones like Visual C++ or GCC have only reached the level of support required for much of the wizardry in Boost relatively recently. If you're working on portable code and your project is more than a couple of years old, you are unlikely to have been able to use Boost when you started it.

the license consists of 5 sentences

That doesn't matter. In some businesses, including almost all large ones in my experience, any use of external software requires formal approval of the licensing terms by the legal staff. Just getting a lawyer to look at the damn thing is often more trouble than it's worth, and little details like the attribution can really mess things up if you are writing a library shipped as source yourself, because it may have implications that you have to pass on to your customers, which in turn is likely to make your lawyers throw a fit.

how exactly can you screw up the installation of a mostly header-only library?

But Boost isn't just headers these days, is it? Some of the most useful aspects of it require hoop-jumping to pre-build them.

I'm sorry that you, and a couple of other people, seem to have assumed I was trolling. I wasn't. My comments are born of bitter experience using (or rather, not being able to use) Boost and other well-known libraries because of exactly the sort of technical and legal hurdles I alluded to. Moreover, when we looked into these things at the time, we found we were far from alone.

In fact, I have never seen Boost used in an established commercial C++ product so far, though I'm aware that it has been considered in several projects I've been involved with. Heck, go look on Sourceforge, which even has a Boost page these days, and look how many of the C++ projects there use it. It's hardly "almost every" one, as the post I criticised claimed, and this is Sourceforge, where the level of enthusiasm and flexibility on the serious projects is probably significantly beyond what you get in your average coding shop.

Re:Use of Boost? (1)

ultranova (717540) | more than 5 years ago | (#24641109)

Unfortunately, the reality is that compilers outside of the mainstream ones like Visual C++ or GCC have only reached the level of support required for much of the wizardry in Boost relatively recently. If you're working on portable code and your project is more than a couple of years old, you are unlikely to have been able to use Boost when you started it.

It is always risky using a non-mainstream compiler for a low-level language like C or C++. The advantage of such languages is that you get good control over details of program execution (such as memory management), but that also means that you have to take said details into account, and that in turn means that any differences between compilers are going to cause problems rather than be invisible implementation details.

C is a bunch of macros over assembler. C++ is a bunch of macros over C. That's not flamebait, it's their whole point and the very reason they're still being used - well, the rational reason; but sadly, I've seen comments to the effect of "real men manage their own memory" offered as reasons to use low-level languages in things they're ill-suited to, such as network-facing servers/clients.

Re:Use of Boost? (1)

twatter (867120) | more than 5 years ago | (#24641239)

That doesn't matter. In some businesses, including almost all large ones in my experience, any use of external software requires formal approval of the licensing terms by the legal staff.

Offtopic, but it just struck me how this is dismissed as FUD and fear mongering when the license in question happens the be the GPL.

On topic now... I've never used boost, but I do have experience with STL and Crypto++. The last time I tried to 'install' boost (I needed the static libs) I couldn't pull it off. And I'm really not that bad. Maybe the process has simplified a bit now, but I wasted too much time to make it worth my while.

Re:Use of Boost? (1)

ucblockhead (63650) | more than 5 years ago | (#24639745)

Unless you are using one of the few parts of boost that require libraries, "installing boost" means copying it somewhere and putting a "-I" line that points to it in your build.

The licensing terms are themselves hardly cryptic.

Re:Use of Boost? (2, Funny)

forkazoo (138186) | more than 5 years ago | (#24641043)

Boost is created and used by a highly vocal minority of C++ supergeeks. You can play with the definition of "modern", but it's only been in the recent past that Boost even compiled on more than the bleeding edge platforms. Most of the C++ projects I've worked on professionally are still worrying about whether to allow non-trivial use of templates or how to avoid screwing up exceptions, never mind trying to fight through the mess that is getting Boost installed and running these days and spending time getting lawyers to review the licensing terms.

I'm glad I'm not the only one who doesn't think boost is everywhere. I mean, I used to. I thought I was the only one who wasn't using it, and that I must be missing out horribly. My projects were working fine, and I didn't really need boost, so I just accepted I was the only one not using it. Over time, I started to have the odd belief that I and everyone I talked to were the only ones not madly in love with template metaprogramming, and we (myself and everyone I know) were somehow simple minded abominations who just weren't clever enough to see how everything needed to be done with templates.

That said, the threading API is conveniently portable to all the platforms I am likely to target with it, and saves me having to worry about platform specific details. So, I am slowly starting to move more and more in the boost direction.

Re:Use of Boost? (1)

shutdown -p now (807394) | more than 5 years ago | (#24641897)

You can play with the definition of "modern", but it's only been in the recent past that Boost even compiled on more than the bleeding edge platforms.

Anyone who had seen Boost source code knows that there are plenty of old hacks and workarounds in it specifically to make it work (to some documented extent) on such archaic compilers as VC6 and g++ 2.95.

Most of the C++ projects I've worked on professionally are still worrying about whether to allow non-trivial use of templates or how to avoid screwing up exceptions

Sounds like the kind of people who might be surprised that C++ is already out of draft for some time, then.

Oh, and I wonder - how do you "screw up exceptions"? It's an old, well-known, and well-documented mechanism, there are plenty of guides and recommendations on how to use it properly in general, and in C++ context in particular (RAII etc)

Re:Use of Boost? (0)

Anonymous Coward | more than 5 years ago | (#24642979)

the mess that is getting Boost installed and running these days

Because typing "sudo apt-get install libboost-dev" is just so damn hard.

(If you choose to use a platform without any decent package management capabilities, then maybe you should complain to the platform's vendor -- what are you paying them for, if not this kind of support?)

and spending time getting lawyers to review the licensing terms

It's a standard, trivial BSD-style license. If your lawyers can't just glance at it and immediately understand it, then either you need better lawyers, or you must be wasting an awful lot of time and money already because you clearly don't use any other BSD-licensed software already.

Boost epitomizes everything that is wrong with C++ (4, Insightful)

Anonymous Coward | more than 4 years ago | (#24637679)

Boost is a great example of what a bloated, backward language C++ has become. It relies on complex intricacies from the standard that are difficult for compiler writers to implement correctly and robustly and without bugs. As a result, Boost itself is not very portable. Either it works on your platform and compiler, or it sort of works, or it doesn't.

Boost--and template metaprogramming in general--is a great exercise in intellectual masturbation. They identified a bunch of useful functionality that isn't supported by the language. Rather than design a new language that does support that functionality, or build external tools to provide it, they contort the template semantics of the language in order to try and squeeze that functionality out of nothing.

Well, template metaprograms are crap. They're nigh undebuggable, they produce unreadable error messages, they take forever to compile, and most C++ programmers don't know how to write (or even read) their implementations. They're an abomination.

Since meta-programming is clearly useful, and something that a lot of programmers want to do... why not add true compile-time metaprogramming support to C++ (or better yet, develop a 10x simpler and cleaner language and put proper compile-time metaprogramming support into it)? Templates are not a natural way to express metaprograms. Why not give C++ programmers the tools to write nice, clean, object-oriented, imperative metaprograms instead of the kludgy functional metaprograms they are forced to scrape by with now?

Again: Boost exemplifies everything that's wrong with C++. All of the corner-case features of C++ that Boost exploits in order to provide useful and sane functionality in an insane way, should be removed from the language (or its successor). Instead, general and clean and low-level metaprogramming mechanisms should take their place so that the functionality embodied in Boost could be written directly by any mid-level programmer instead of an elite group of template wankers. :P

Re:Boost epitomizes everything that is wrong with (5, Funny)

Anonymous Coward | more than 4 years ago | (#24637841)

For a real laugh, read the parent replacing "C++" with "C" and "Boost" with "C++"

Re:Boost epitomizes everything that is wrong with (1, Interesting)

Anonymous Coward | more than 4 years ago | (#24637979)

Back in my day, we did metaprogramming the way god intended -- in the preprocessor, with recursive includes.

The main thing missing, is introspection (3, Interesting)

Anonymous Coward | more than 4 years ago | (#24638349)

The main drawback of metaprogramming via preprocessor is the same as metaprogramming via any external tool--lack of introspection.

What you want is metacode that can be embedded in your normal C++ code, read by the C++ compiler, and can run with access to the AST or some other high-level representation of what the compiler has parsed. It should be able to read, interpret and modify the declarations that have already been parsed--generating new methods or typedefs on the fly, for example.

The compiler knows things about your code: The sizes and alignment requirement of types, the offset of members, whether methods with a particular signature resolve or not, etc.

Rather than funky template metaprograms which try to deduce these things by exploiting strange corner cases of the C++ standard, it would be nice if the metaprograms ran in a context where they had access to all of this information directly from the C++ compiler. It would be nice if the output of the metaprogram was source-code, too. (Much easier to debug that way, than by relying on obscure and cryptic error messages ala C++ templates). ..Of course, C++ is far too big and complicated for this to be done in a sane way. A much better bet is to design a new, smaller, cleaner language (aiming to have perhaps 10% of the complexity and 90% of the usefulness of C++). While you're adding metaprogramming in there, make some room for symbolic includes and a fast and robust incremental compilation system too. The textual includes of C and C++ are so backward its not even funny.

Re:The main thing missing, is introspection (1)

stephentyrone (664894) | more than 4 years ago | (#24638471)

As long as I can still implement an ALU in the preprocessor, I'll be happy.

Re:The main thing missing, is introspection (1)

certron (57841) | more than 5 years ago | (#24641477)

With all this talk of metaprogramming, I'm really surprised no one has mentioned Common Lisp.

Then again, this is a post about a new version of a C++ library which seems to have devolved into a language gang war...

Re:The main thing missing, is introspection (2, Insightful)

jonaskoelker (922170) | more than 5 years ago | (#24641787)

What you want is metacode that can be embedded in your normal C++ code, read by the C++ compiler, and can run with access to the AST or some other high-level representation of what the compiler has parsed. It should be able to read, interpret and modify the declarations that have already been parsed--generating new methods or typedefs on the fly, for example. [...] it would be nice if the output of the metaprogram was source-code, too.

So what you're trying to say is (use 'lisp)?
(and
        (macros-run-on-ast-p 'lisp)
        (reads-decls-p 'lisp)
        (interprets-decls-p 'lisp)
        (modifies-decls-p 'lisp)
        (outputs-source-code-p 'lisp))

Re:Boost epitomizes everything that is wrong with (2, Insightful)

HappySmileMan (1088123) | more than 4 years ago | (#24638311)

As a result, Boost itself is not very portable. Either it works on your platform and compiler, or it sort of works, or it doesn't.

If you left this out you would've looked like less of a troll, seriously. Boost compiles with GCC4 (From 4.0.1 to the latest, on Mac, Linux and BSD), Intel's compiler collection (All OSes), Visual C++ (7.1 to 9.0Beta) and Borland.

If it isn't cross-platform enough, I'd like to know what platform and compiler you use

Re:Boost epitomizes everything that is wrong with (0)

AuMatar (183847) | more than 4 years ago | (#24639501)

Embedded compilers. Many of them don't support basic templates, much less all of Boost.

Re:Boost epitomizes everything that is wrong with (2, Informative)

setagllib (753300) | more than 5 years ago | (#24640015)

Boost targets implementations which actually implement the C++ standard, not subsets of the standard for embedded purposes. The whole point of Boost's advanced functionality is that templates are the only way to express it in C++, short of implementing an actual metalanguage on top of C++, which would be even more heavyweight and incompatible.

Re:Boost epitomizes everything that is wrong with (1)

tepples (727027) | more than 5 years ago | (#24640553)

Boost compiles with GCC4 (From 4.0.1 to the latest, on Mac, Linux and BSD)

But MinGW for Windows appears to have been stuck on 3.4 for years. So if I'm on Windows, should I be using Visual C++ Express instead of MinGW?

Re:Boost epitomizes everything that is wrong with (1)

statusbar (314703) | more than 5 years ago | (#24640841)

actually that is a good question. Why is mingw version stuck in 3.4 when I'm running 4.2 on mac and 4.3 on debian lenny?

does anyone know?

--jeffk++

Re:Boost epitomizes everything that is wrong with (1)

The Snowman (116231) | more than 4 years ago | (#24638589)

Boost exemplifies everything that's wrong with C++. All of the corner-case features of C++ that Boost exploits in order to provide useful and sane functionality in an insane way, should be removed from the language (or its successor).

Maybe that is why the next version of C++ will implement many of the features and libraries in Boost, but natively, avoiding some of the mental masturbation issues you mentioned.

Re:Boost epitomizes everything that is wrong with (2, Insightful)

pla (258480) | more than 4 years ago | (#24638849)

Rather than design a new language that does support that functionality, or build external tools to provide it, they contort the template semantics of the language in order to try and squeeze that functionality out of nothing.

Wait - You actually mean to say you'd rather see an entirely new language appear to address mere oversights in an existing one, than extend the single most widely supported (in the sense of "used" and "dev tools exist on platform-X") language to do a few new tricks?

As an aside, I don't use Boost. But if it does what I needed, you can bet the farm I'd use it rather than waiting for Programming-Language-Du-Jour support on a given platform... For a frame of reference, consider the classic comeback to the apologist's "but Java runs on so many platforms" argument: "And how did you compile the JVM?".

Re:Boost epitomizes everything that is wrong with (0)

shish (588640) | more than 5 years ago | (#24641319)

For a frame of reference, consider the classic comeback to the apologist's "but Java runs on so many platforms" argument: "And how did you compile the JVM?".

By writing a ton of platform-specific code, spending hundreds of hours debugging compiler specific problems because none of them support the standards in exactly the same way, and in general spending far too long worrying about the details when there's a bigger picture to be dealt with :-|

... this is a comeback to be used *against* java? o_O

Re:Boost epitomizes everything that is wrong with (3, Insightful)

benhattman (1258918) | more than 4 years ago | (#24639031)

Well, template metaprograms are crap. They're nigh undebuggable, they produce unreadable error messages, they take forever to compile, and most C++ programmers don't know how to write (or even read) their implementations. They're an abomination.

Since meta-programming is clearly useful, and something that a lot of programmers want to do... why not add true compile-time metaprogramming support to C++ (or better yet, develop a 10x simpler and cleaner language and put proper compile-time metaprogramming support into it)? Templates are not a natural way to express metaprograms. Why not give C++ programmers the tools to write nice, clean, object-oriented, imperative metaprograms instead of the kludgy functional metaprograms they are forced to scrape by with now?

This isn't proof that template metaprogramming or even the boost implementation of it sucks. This is proof that you've seen some bad code written with that feature. So what? Get in line! I've seen rotten code written using too many macros, I've seen rotten code written using too many templates, I've seen rotten code written using too many classes.

Basically, name a language feature, find some engineer who decides that feature is the final greatest achievement in programming, and then give him a year or so. He'll produce some awful, unreadable, undebuggable code.

Personally, I find boost quite useful, and I have never used it to write template metaprograms (it has other features as well). I think they are cool, but I just haven't run into anything where I needed that kind of performance boost.

Re:Boost epitomizes everything that is wrong with (0)

Anonymous Coward | more than 5 years ago | (#24640319)

You know, your rant looks like something I would write. But if I had written it, I would do so knowing that I'm ranting only because of my personal discomfort with it and not because Boost is in any way flawed. I think you are doing the same.

Re:Boost epitomizes everything that is wrong with (0)

Anonymous Coward | more than 5 years ago | (#24641107)

Either it works on your platform and compiler, or it sort of works, or it doesn't.

No room for doubt in this statement. You've just described white, black and all the greys in-between, but haven't specified any weight on these shades. "The associated statement is either true sometimes, true always, or true never" is a tautology—it's never false, regardless of the input.

Re:Boost epitomizes everything that is wrong with (2, Insightful)

Flat5 (207129) | more than 5 years ago | (#24641149)

Boost is not a "template metaprogramming" library, as you seem to be implying. It's just a good library that happens to use template techniques for some purposes for which it is very well suited, for example, the Spirit parser.

You don't need to know template metaprogramming at all to use Spirit. In fact, what Spirit does is make the specification of parsers look like BNF but in C++ syntax. Internally, yeah, the library is awfully complex. But that is the point of a library - it implements once and for all difficult things so that library user's lives are easier. And boost achieves that goal nicely.

Re:Boost epitomizes everything that is wrong with (1)

Kickasso (210195) | more than 5 years ago | (#24641303)

Yes, a programming language with a clean, purpose-built metaprogramming facility would be extremely useful. But I think that doing it imperative style, as you seem to prefer, is a sure way to lose one's sanity.

Re:Boost epitomizes everything that is wrong with (1)

sigmabody (1099541) | more than 5 years ago | (#24641679)

Disagree, but not by a lot. I would say that boost emphasizes the aspects of C++ which both make it a powerful language, but also can make it a nightmare to understand. Boost is kinda like plugging into a nuclear generator: lots of power but very dangerous, and if you're not careful you'll spew radioactive garbage all over your code tree.

The overall success of applying the tool depends on the skill with which it is used. In the hands of novices, boost can turn a normal program into an unmaintainable disaster. Used sparingly, clearly, and with good design, boost can, well, "boost" your ability to write good code.

Yes, it would be cleaner if all the paradigms were in a new, clean, theoretical perfect language. However, for those people writing code now, C++ is pretty good, and boost can be a very useful addition in the right hands. Just be sure you know how to write good code before you start using it, and avoid any nasty explosions. :)

No one dares to write a new language like C++ (0)

master_p (608214) | more than 5 years ago | (#24642517)

Even the gurus (Stroustrup etc) don't dare think about a new language.

I tried to use boost.bimap and my compilations got x10 slower. I then wrote my own bimap, with simpler interfaces of course, and compilation times got back to normal.

One of the biggest problems in C++ is header files. I am surprised they do nothing for this. The slowness of compilation of boost programs comes from parsing and compiling the huge amount of code that lives in the header files.

Huh. I'm still using STL. (3, Insightful)

MostAwesomeDude (980382) | more than 4 years ago | (#24638065)

Seriously. Boost lets you avoid maybe five lines out of every hundred at the lower levels, but that doesn't really improve performance, just make code less readable and more dependent on another library. If people wanna use Boost, fine, but not all "modern C++ codebases" use it or even like it.

Re:Huh. I'm still using STL. (2, Insightful)

hr.wien (986516) | more than 4 years ago | (#24638337)

Five lines out of a hundred? That's an awfully specific number for something as huge as Boost. I know I saved a lot more than that on not having to implement a complete cross-platform signals/slot implementation myself. Or a threading library. Or a parser for Unicode data files from scratch. Or a smart pointer implementation. Or a specific graph implementation with corresponding algorithms every time I need one. I could go on.

Boost isn't about performance. It's about letting you get shit done instead of reinventing the wheel all the time.

Re:Huh. I'm still using STL. (1, Insightful)

EWIPlayer (881908) | more than 4 years ago | (#24638591)

For about the millionth time... Boost != STL. All you've accomplished by saying that is to state that you're an ignorant programmer whom the programming community is happy to leave behind... Let me pull you aside and give you a bit of advice - everyone else please turn away: If you say something's crap and then make it completely obvious that you have absolutely no idea what it is, you look like an idiot who can't even read through a website that isn't slashdot. And you don't want that.

Re:Huh. I'm still using STL. (0)

MostAwesomeDude (980382) | more than 4 years ago | (#24638761)

Okay, here's what I use C++ for.

- writing games

And when using C++, I don't need:

- regexps
- signals and slots
- smart pointers (Seriously? You can't check pointers yourself?)
- graphs

STL can, through std::locale, provide the Unicode services I need, and when I've got OpenAL doing threaded sound and ODE doing threaded physics, I've already got three threads and really shouldn't be popping open anything else.

I do understand that people enjoy saying, "I has a massively powerful library." That's fine. I'm merely saying, "I don't need a massively powerful library, I just need to get shit done."

Re:Huh. I'm still using STL. (2, Interesting)

hr.wien (986516) | more than 4 years ago | (#24639039)

smart pointers (Seriously? You can't check pointers yourself?)

Soo, what happens to your game in case of an exception then? Always careful to clean up any allocated resources I assume? See, this is not a contest to see who can "handle" cleaning up memory himself. Any monkey can do manual resource management if he wants to. Personally, I just can't be arsed to twiddle pointers and exposing myself to memory leaks and other problems unless I have to. Not that I use manual memory allocation much at all.

Anyway, my hobbyist game framework contains at least 4 of the features you mentioned (How on earth do you manage to make a game without having at least one graph in there?), and I'm damned thankful I didn't have to write the boring implementation details myself.

Re:Huh. I'm still using STL. (1)

MostAwesomeDude (980382) | more than 4 years ago | (#24639351)

an exception

A what?

An exception (1)

tepples (727027) | more than 5 years ago | (#24640641)

an exception

A what?

An exception is what the C++ standard library and your other libraries throw when they can't allocate memory for a game object, or they can't read a mesh, texture, map, wave, or music file from the disc, or a user-provided mesh, texture, map, wave, or music file is malformed.

Re:Huh. I'm still using STL. (1)

cnettel (836611) | more than 4 years ago | (#24639075)

It's kind of sad when anyone states that graphs is a good example of what's not needed when writing games. I highly doubt that OpenAL keeps a core busy. It's not the number of threads that matters, it's whether you are actually saturating the CPU or not. And, well, smart pointers are never needed, but they are frequently nice, basically as soon as you might have otherwise wanted to write the cleanup code in multiple places (and that need includes exception handling, if you ever use that).

For me, Boost has been a very useful way to get shit done, including to get a nicer STL-compatible allocator when the freeing strategy could be quite loose, but allocation overhead was all important. I could have got that done by rewriting the code to exclude STL completely, or by writing my own allocator. Using an already existing library was far faster. I am probably looking to use Boost serialization as the starting point for a similar reason now -- there is a codebase with a data hierarchy, that was never intended for state persistence. Rather than writing rather tedious specific code for each class*, or coming up with my own framework, I can reuse something pre-existing.

* and, yes, it does get tedious if you really do error checking and handle the web of references that is really included here

Re:Huh. I'm still using STL. (1)

EWIPlayer (881908) | more than 4 years ago | (#24639213)

You don't use signals and slots when writing games? You know these are for events right? You don't have event based games? Wow. seriously... wow.

Re:Huh. I'm still using STL. (2, Informative)

19thNervousBreakdown (768619) | more than 5 years ago | (#24639735)

Hey, anyone else ever notice that games are, generally speaking, the buggiest, hackiest, most insecure pieces of software on a system? Other than spyware and "enterprisey" stuff, anyway.

- smart pointers (Seriously? You can't check pointers yourself?)

No, I can't, and neither can you unless you've found some way to replace your organic brain with a metal and wire positronic supercomputing device. Once you've managed that feat, you still have to overcome the impossibility of using exceptions properly without RAII. Stick to games.

How Boost features could be worked into a game (3, Insightful)

tepples (727027) | more than 5 years ago | (#24640603)

And when using C++ [to write games], I don't need: regexps

Not even for parsing your game's preference file?

signals and slots

Not even for notifying game objects that things have happened to other objects?

smart pointers (Seriously? You can't check pointers yourself?)

Not even for disposing of a mesh and texture once no nearby game objects need it anymore?

Re:Huh. I'm still using STL. (1)

shutdown -p now (807394) | more than 5 years ago | (#24641935)

smart pointers (Seriously? You can't check pointers yourself?)

For one thing, lacking smart pointers (by which I mean at least std::auto_ptr or boost::scoped_ptr), there's no way to write an exception-safe class that performs any heap object allocation in constructor, and deallocation in destructor.

Re:Huh. I'm still using STL. (1)

shutdown -p now (807394) | more than 5 years ago | (#24641941)

STL can, through std::locale, provide the Unicode services I need

It can, but it needs not, and there's no way to find out in a portable C++ code whether your host C++ implementation even has a Unicode locale at all, which kinds of them it has (UTF-8, UTF-16, UCS2...), and what are the names of those locales to load them. Nor do you get any guarantee that, in either the default or classic locales, wchar_t will be treated as Unicode codepoints by any locale-aware functions.

Re:Huh. I'm still using STL. (3, Funny)

Profane MuthaFucka (574406) | more than 5 years ago | (#24642079)

I'm merely saying, "I don't need a massively powerful library, I just need to get shit done."

Confucius say "Man who try to get shit done without library sit on pot with nothing to read."

Re:Huh. I'm still using STL. (1)

Profane MuthaFucka (574406) | more than 5 years ago | (#24642127)

Confucius say "Man who has maximum three threads and no smart pointers is master of indirection, but should practice sleight-of-hand."

Re:Huh. I'm still using STL. (1)

Eluan (788868) | more than 5 years ago | (#24642667)

Okay, here's what I use C++ for.

- writing games

And when using C++, I don't need:

- graphs

Someone else addressed your other points, and I will address this one.

Clearly you don't know how useful graphs are for writing bots. Especially when combined with space partitioning.

Re:Huh. I'm still using STL. (2, Insightful)

imbaczek (690596) | more than 5 years ago | (#24642923)

Every game more complex than pong will need everything you claim you don't need. Maybe you just don't understand your needs.

regexps - configuration parsing
signals and slots - game entities as properly isolated actors
smart pointers - duh. we'll talk again when a dangling pointer hits you where it hurts the most.
graphs - AI? pathfinding? don't really need those in games, do you?

I've never used it (0)

larry bagina (561269) | more than 4 years ago | (#24638315)

I know there are some people with a huge hard on over it. I've looked into it a couple times but it seemed overrated to me. It might be a good source of template tricks, but that's about it.

Re:I've never used it (5, Informative)

EWIPlayer (881908) | more than 4 years ago | (#24638537)

A lot of the other nay-sayers appear to be just useless trolls. You don't, so I'm going to reply.

You're really selling boost and, by derivation, yourself short. Boost makes a ton of things simple and robust. I wrote the following, cross platform C++ code with boost:

  • asynchronous and robust TCP server in 80 lines of code - and it's decently configurable
  • a command line options parser that's truly extensible in about 60 lines of code.
  • a very solid threading model in about 100 lines of code
  • a synchronized and notification-based queue in about 50 lines of code
  • ... the list goes on for quite a while ...

C++ is old and that means that it doesn't have anything like a modern language has. What it's missing, Boost fills in (not completely, mind you, but it does a really good job). With C++ you get speed and controllable code (C# runs a close second, but I still wouldn't write an OS in it), and with Boost you get a ton of ease back in the language as well.

You're doing yourself a serious disservice by not looking into it. The one thing that I can't believe is that you really did look into it, and certainly not twice. If you did, you'd know it's not just a source of "template tricks"... far, far, far from it.

If you're not using boost, I can guarantee you're reinventing the wheel... badly.

Re:I've never used it (0, Funny)

Anonymous Coward | more than 5 years ago | (#24639873)

I wrote the following, cross platform C++ code with boost:

  • asynchronous and robust TCP server in 80 lines of code - and it's decently configurable
  • a command line options parser that's truly extensible in about 60 lines of code.
  • a very solid threading model in about 100 lines of code
  • a synchronized and notification-based queue in about 50 lines of code
  • ... the list goes on for quite a while ...

All these are already implemented in Java, no need to even code them, just use them.

Again, what is the real advantage of what's its name? Bust?

Ugh, Boost. (1, Funny)

Anonymous Coward | more than 4 years ago | (#24638569)

Get thee behind me, foul creature of Satan!

Are we talking about the same library? (2, Insightful)

benhattman (1258918) | more than 4 years ago | (#24638951)

I'm seeing tons of comments on this thread about how awful boost is and how all it does is cause global warming, start wars with middle eastern nations, and destroy the pristine beauty of C++. Huh?!?

Yes, boost includes meta programming libraries, but it also provides a number of other useful and relatively basic features which truly are missing in C++. The shared_ptr class is one example that nobody thought to include in STL for some unclear reason. What if you want non-platform specific threading or date/time functions?

If you aren't using boost, that's fine, but it is as excellent of a general purpose C++ library as we have available today.

Re:Are we talking about the same library? (3, Interesting)

chrome (3506) | more than 5 years ago | (#24639783)

I think the problem a lot of people have with Boost is not related to how good/bad it is; but rather the complexity in understanding it, and the level of complexity that it brings to your program.

The problem as I see it is that if you're not one of the scary smart people that understands the way the boost developers think, then you will have problems integrating boost into your project, and debugging it when things go wrong.

A lot of those problems will be due to your own ignorance but at the end of the day if something isn't obvious or at least well documented (and boost documentation isn't exactly a light read at the best of times) people will be turned off by how difficult it is, no matter how useful or speedy or good or whatever.

I work with a scary smart C++ programmer who swears by boost. I primarily code in C, but he convinced me to write a project using C++ and boost to see how thoroughly useful it is.

With boost, you can in very few lines of code, write code that can do impressive stuff. This is very true. But what you don't realise when you start out is that when you include boost::asio or boost::threads or whatever, you're including hundreds of thousands of lines of other people's code into your program, perhaps unnecessarily complicating it and making it so when you have a problem, you'll be staring at the debugger going "my code failed where?!" with a backtrace stretching back to infinity (and making Java Exception backtraces look NICE).

Yes, reinventing the wheel is a bad thing, and should be discouraged. But what if you just need a simple wheel? A wheel that, I don't know, goes around and around. I don't need it to report on its air pressure, or self repair, or sprout wings and fly if I go off a cliff. I just need it to be .. a wheel.

And boost tries to be the best possible wheel for every occasion. Its the wheel designed by the Borg. Assembled by nanites, it itself is made from nanits and will, whether you like it or not, assimilate your program into the Borg.

Re:Are we talking about the same library? (2, Funny)

chrome (3506) | more than 5 years ago | (#24639793)

whoops, replied to the wrong post. Oh well, this'll do :P

Re:Are we talking about the same library? (1)

benhattman (1258918) | more than 5 years ago | (#24641635)

I think this is the first boost complaint I've seen on this thread I would agree with. Some functionality in boost can be very difficult to understand, even if it is powerful. The date/time is one that I used recently and found less than intuitive.

Most of this, however, is not a problem with the library, but rather a problem with the documentation. I find code that uses boost ends up being quite readable (assuming no metatemplate programming) however.

Re:Are we talking about the same library? (1)

shutdown -p now (807394) | more than 5 years ago | (#24641955)

With boost, you can in very few lines of code, write code that can do impressive stuff. This is very true. But what you don't realise when you start out is that when you include boost::asio or boost::threads or whatever, you're including hundreds of thousands of lines of other people's code into your program, perhaps unnecessarily complicating it and making it so when you have a problem, you'll be staring at the debugger going "my code failed where?!" with a backtrace stretching back to infinity (and making Java Exception backtraces look NICE).

So, not any different from any but the most naive STL implementations out there.

Here's the thing... if you use STL, then there's no reason not to use Boost. It's really just more of the same. And if you shy away from STL and templates, then why bother with C++ at all? If you want performance, there's C. If you want OOP, there's Objective-C. If you want a high-level language that's easy to read and hard to make mistakes in, there's Java and C# (and plenty of others).

Having said that, the biggest problem with template metaprogramming "backtraces" (which are usually compile-time, really) is the late duck typing model of present C++ templates. With C++0x concepts, things will really be much better.

Re:Are we talking about the same library? (1)

Breakfast Pants (323698) | more than 5 years ago | (#24640107)

>The shared_ptr class is one example that nobody thought to include in STL for some unclear reason.

Thread-safety/performance tradeoff.

Re:Are we talking about the same library? (1)

benhattman (1258918) | more than 5 years ago | (#24641597)

The philosophy of C++ has always been that you only pay a performance hit for the features you use. A shared_ptr class follows this rule of thumb accurately. It's a good reason not to use the feature (if you have code that cannot suffer that performance hit), but it is not a valid reason to exclude it from the standard implementations.

Basically, STL is a "good start" towards a general library. Boost is here to help us get a little further.

Trolls are modded insightful? (5, Insightful)

EWIPlayer (881908) | more than 4 years ago | (#24639385)

Why is it that all the trolls are modded up? People that think that Boost is the same as STL are insightful. People that think Boost is for C++ supergeeks are insightful. People that think Boost epitomizes what is wrong about C++ are insightful. Boost represents a serious set of genius level code and design and helps thousands of programmers that understand how good it is.

I understand that trolls exist and that they will always be with us. I understand that ignorant people will continue to post until the end of time. What I don't understand is that the /. community apparently agrees with them. This is supposed to be a community of hard-core geekery that understand things like operating systems, and game programming, and the intricacies of complex, multi-paradigm languages likes C++. What I'm seeing here is that it's populated, in greater numbers, with ignorance and "I heard a sound bite from someone who doesn't know what they're talking about so now I know everything" kinds of people.

Have a look at what you know and what you don't know and then think about how intelligent your opinion actually is, and then post. And when you're modding that post, do the same thing.

Boost is a mixed bag (5, Interesting)

registrar (1220876) | more than 5 years ago | (#24639939)

I use C++ and Boost and like them. But it's a love-hate relationship. I mostly found the trolls to be insightful because they reflected that love-hate.

C++ is a great programming language in the sense that English is a great natural language. Undesigned, piecemeal, weird idioms, and a pig to learn. But expressive, powerful, portable. Boost plays the role of "the King's English" -- it's a style guide. Sometimes arguable, sometimes wrong, but mostly very good at pointing out how to avoid deficiencies in the language. C, C#, Delphi, Objective C, OCaml, Mathematica and Python are unquestionably better languages than C++. And Esperanto is better than English. But I speak English and use C++ because it does what I need it to do better than any of the alternatives.

Dealing with geeks is a problem for management to deal with. C++ is probably rightly the domain of ubergeeks. If you choose to use C++ because it suits your needs and your geeks like a bit of mental masturbation, good for you. No matter what language you use, your local geeks will push the boundaries. With C++, Boost mitigates the damage your geeks might cause when pushing boundaries (e.g. template metaprogramming). Boost is therefore a tool for managing geeks.

The biggest problem with C++ and Boost is also their biggest asset. The language is too plastic. Every new library, object or template comes with a domain-specific-language that you just have to learn. For example, using functors to create threads. That is counter-intuitive and hard. But with Boost, each domain-specific-language tends to be well designed, so that if you understand C++, then Boost will push you into using the features in a way that is portable and safe.

But an overwhelming gripe is that the online documentation is atrocious. In the sense of incomplete, unclear, impenetrable, useless examples, broken links, broken HTML, outdated. To the point where it becomes a good reason not to use Boost.

Re:Boost is a mixed bag (1)

registrar (1220876) | more than 5 years ago | (#24641685)

I can't believe. I mentioned The King's English. In a post so embarrassingly badly written.

Re:Trolls are modded insightful? (1, Insightful)

Anonymous Coward | more than 5 years ago | (#24640097)

Yeah, sorry. I'm a C++ geek myself. When I used Java to reimplement what we have been doing for 8 years and it only took us 6 months and the new beast run faster, I realized what a problem C++ really was. I moved into Java and never looked back ;-)

C++ is going the way of PL/1, the best language ever, the language that IBM blessed as the language that would have all the features and only the smartest geeks could code in.

Guess what? I have yet to find a geek who used or even who knows PL/1. By being such a complex language it drove itself into irrelevance. It doesn't matter if only the smartest geeks could use it, nobody younger than 20 knows about it and this has been going on for at least 20 years, so even geeks who are in their 40's have no idea it exists, therefore PL/1 is doomed to oblivion.

C++ is headed the same way as PL/1. Please move on into Java and Haskell, or even better, learn Lex and Yacc and create your own languages.

Re:Trolls are modded insightful? (1)

EWIPlayer (881908) | more than 5 years ago | (#24640381)

You're comparing Java and C++ as though they have some sort of global comparison and you can now use Java for everything that you could use C++ for.

That's deeply flawed.

For some sort of argument like that you need to choose languages that are actually in the same space... perhaps C# and Java would be a better thing to look at if you want to play it that way. In my mind, C# is the choice nearly 100% of the time, from a language perspective over Java.

C++ and Java are extremely different languages and can have very different places to play. The fact that you're making this blanket statement is a problem as you are equating them. Equating them like this is irresponsible and it indicates that you've missed something about both languages... they can't be compared like that. You missed something about C++. Perhaps a lot of somethings.

Re:Trolls are modded insightful? (1)

testadicazzo (567430) | more than 5 years ago | (#24641895)

Thanks for that post. I've been scanning through the posts on this topic thinking "Why can't I have moderator points when I need them". I was formulating a similar post in my mind when I stumbled on yours. All of the anti-boost or anti-C++ posts can be tackled one-by-one, but who has the time, and what's the point? It's shocking what the modders have modded and how.

My 2cents worth on the subject is this: Whenever you need to implement some code, it's worth seeing if there's a good library available that already does the job. The first place to look is Boost, because it offers some extremely useful stuff, it's well tested and well implemented.

Templates and meta-programming is difficult, especially the debugging, but it results in extremely efficient code, and is a good way of extending the language. So isn't it nice that Boost guys have done all the difficult work for you? People complaining about having to learn another library are missing a significant point: Learning another library (or subset of a library) is no more difficult thant learning to use some custom made code, and your knowledge is more portable.

All that said, Boost's documentation could be significantly improved. In some cases its fantastic, in others it can only be rated as good if you are using volume as a metric.

Boost rocks your jocks (0)

Anonymous Coward | more than 5 years ago | (#24639631)

Anyone that has taken the time to learn how to use boost::function and boost::bind will know that the boost libraries are brilliant. And that is only two of the many, many super cool additions boost brings to the table.

Boo hoo the errors are too hard to read. Grow a brain, no one said coding in C++ was easy.

Boo hoo it takes to long to compile. Get a quad-core, computing power is cheap.

Re:Boost rocks your jocks (1, Funny)

Anonymous Coward | more than 5 years ago | (#24641247)

So how does one go about buying a portal to this awesomely simple black-and-white world you apparently live in? It sure would make a lot of peoples' lives easier if they could live and work there too.

Use of Boost? (1)

clint999 (1277046) | more than 5 years ago | (#24642847)

Except that I don't think even the magic of stackless will give me the true multi-CPU concurrency that I want. :-(
Load More Comments
Slashdot Account

Need an Account?

Forgot your password?

Don't worry, we never post anything without your permission.

Submission Text Formatting Tips

We support a small subset of HTML, namely these tags:

  • b
  • i
  • p
  • br
  • a
  • ol
  • ul
  • li
  • dl
  • dt
  • dd
  • em
  • strong
  • tt
  • blockquote
  • div
  • quote
  • ecode

"ecode" can be used for code snippets, for example:

<ecode>    while(1) { do_something(); } </ecode>
Sign up for Slashdot Newsletters
Create a Slashdot Account

Loading...