I found these nice C++0x additions for vim:
Add
support of C++0x in
cpp.vim.
Now I have suitable syntax highlighting for
constexpr and other new keywords. C++0x lambda
functions still confuse syntax highlighting
though, I suspect that'll take a bit more effort to fix. Or
maybe it's OK to have lambdas highlighted in bright red, I
guess that could be considered a feature!
I'm working on new pieces of the C++0x standard library for libstdc++ and the more I use it, the more I find that C++0x is a joy to program in. Yes, that's right, C++. Not a pain in the butt. A joy. Personally I've always liked using C++, but in what some might consider a perverse way - with C++0x I think there's a dash of elegance to go with the power that C++ has always had. (But maybe I'm just braindamaged by too many years of using templates.)
RAII combines very nicely with move semantics, so not only can you manage resources 100% safely and simply, you can now transfer ownership of those resources efficiently and 100% safely. Resource Transfer Is Initialization too, thanks to move constructors.
Tuples are like std::pair on steroids, but
whereas the only helper for pairs was
std::make_pair, C++0x gives you a handful of
tuple helpers: make_tuple, tie,
forward_as_tuple, tuple_cat.
These make it very convenient to pass ad-hoc data structures
in and out of functions. Especially when you combine them
with type inference, done with the re-purposed
auto keyword and template argument deduction -
which itself is made more powerful and at the same time
simpler, thanks to variadic templates.
Using these new features I've just implemented
std::try_lock() and std::lock(),
the generic locking algorithms that lock an arbitrary number
of Lockable arguments (typically two or more
std::mutex objects) and it took me roughly the
same number of lines of code as a similar try-and-backoff
algorithm in Butenhof's book, which only handles a fixed
number of mutexes (three) and doesn't have robust
error-handling (abort), and of course only works with one
type of
lock (pthread_mutex_t).
I've seen the future and it tastes like awesome.
