Reactive Extensions (Rx) now supports LINQ in C++, goes open source

Reactive Extensions (Rx) is now open source and supports LINQ styles in C++.

From the announcement, Rx is already being used for a number of highly responsive applications including GitHub for Windows:

According to Paul Betts at GitHub, "GitHub for Windows uses the Reactive Extensions for almost everything it does, including network requests, UI events, managing child processes (git.exe). Using Rx and ReactiveUI, we've written a fast, nearly 100% asynchronous, responsive application, while still having 100% deterministic, reliable unit tests. The desktop developers at GitHub loved Rx so much, that the Mac team created their own version of Rx and ReactiveUI, called ReactiveCocoa, and are now using it on the Mac to obtain similar benefits."

In addition to Rx's original support for .NET and new support for Javascript, Rx has also added support for C++:

Rx++: The Reactive Extensions for Native (RxC) is a library for composing asynchronous and event-based programs using observable sequences and LINQ-style query operators in both C and C++.

Ix++: An implementation of LINQ for Native Developers in C++.

Where to download or find out more: https://rx.codeplex.com/

On the Superfluousness of std::move -- Scott Meyers

Scott answers reader questions about whether std::move is superfluous... couldn't one size of std::forward fit well enough on everyone?

On the Superfluousness of std::move

Scott Meyers

During my presentation of "Universal References in C++11" at C++ and Beyond 2012, I gave the advice to apply std::move to rvalue reference parameters and std::forward to universal reference parameters.  In this post, I'll follow the convention I introduced in that talk of using RRef for "rvalue reference" and URef for "universal reference."

Shortly after I gave the advice mentioned above, an attendee asked what would happen if std::forward were applied to an RRef instead of std::move.  The question took me by surprise.  I was so accustomed to the RRef-implies-std::move and URef-implies-std::forward convention, I had not thought through the implications of other possibilities.  The answer I offered was that I wasn't sure what would happen, but I didn't really care, because even if using std::forward with an RRef would work, it would be unidiomatic and hence potentially confusing to readers of the code.

The question has since been repeated on stackoverflow, and I've also received it from attendees of other recent presentations I've given.  It's apparently one of those obvious questions I simply hadn't considered.  It's time I did.

Continue reading...

CGAL 4.1 released (Computational Geometry Algorithms Library)

The CGAL Open Source Project is pleased to announce the release 4.1 of CGAL, the Computational Geometry Algorithms Library.

Besides fixes to existing packages, the following has changed since CGAL 4.0:

  • New compiler support: the Apple Clang compiler versions 3.1 and 3.2 are now supported on Mac OS X.

See http://www.cgal.org/releases.html for a complete list of changes.

The CGAL project is a collaborative effort to develop a robust, easy-to-use, and efficient C++ software library of geometric data structures and algorithms, like

  • triangulations (2D constrained triangulations and Delaunaytriangulations in 2D and 3D, periodic triangulations),
  • Voronoi diagrams (for 2D and 3D points, 2D additively weighted Voronoi diagrams, and segment Voronoi diagrams),
  • Boolean operations on polygons and polyhedra,
  • regularized Boolean operations on polygons with curved arcs
  • arrangements of curves,
  • mesh generation (2D, 3D and surface mesh generation, surface mesh subdivision and parametrization),
  • alpha shapes (in 2D and 3D),
  • convex hull algorithms (in 2D, 3D and dD),
  • operations on polygons (straight skeleton and offset polygon),
  • search structures (kd trees for nearest neighbor search, and range and segment trees),
  • interpolation (natural neighbor interpolation and placement of streamlines),
  • optimization algorithms (smallest enclosing sphere of points or spheres, smallest enclosing ellipsoid of points, principal component analysis),
  • kinetic data structures

Some modules are distributed under the terms of the LGPL Open Source license (GNU Lesser General Public License v3 or later versions). Most modules are distributed under the terms of the GPL Open Source license (GNU General Public License v3 or later versions). If your intended usage does not meet the criteria of the aforementioned licenses, a commercial license can be purchased from GeometryFactory.

For further information and for downloading the library and its documentation, please visit the CGAL web site.

Post-Portland mailing available

The post-Portland mailing is now available. It includes meeting minutes, updated issues lists, and the papers adopted at this meeting (among other papers).

Of particular note is the Evolution Working Group paper status, now present again and maintained by Ville Voutilainen. Thanks, Ville!

 

WG21 Number PL22.16 Number Title Author Document Date Mailing Date Previous Version Subgroup Disposition
SD-1 12-0000R3 2012 PL22.16/WG21 document list Clark Nelson 2012-11-03 2012-11      
SD-2 12-0001R2 ISO WG21 and INCITS PL22.16 membership list Clark Nelson 2012-09-12 2012-09      
SD-3   SC22/WG21 (C++) Study Group Organizational Information Herb Sutter 2012-10-04 2012-09      
SD-5   WG21 and PL22.16 (C++) Joint Mailing and Meeting Information Herb Sutter 2010-09-20 2012-09      
N3453 12-0143 Minutes, WG21 Teleconference 2012-10-5 Kyle Kloepper 2012-10-5 2012-11      
N3454 12-0144 Minutes, WG21 Meeting No. 54, 15-19 October 2012 Portland, Oregon, USA Kyle Kloepper 2012-11-3 2012-11      
N3455 12-0145 Minutes, PL22.16 Meeting No. 59, 15-19 October 2012 Portland, Oregon, USA Kyle Kloepper 2012-11-3 2012-11      
N3456 12-0146 Range arguments for container constructors and methods, with wording Jeffrey Yasskin 2012-11-03 2012-11   Library  
N3457 12-0147 Algorithm std::iota and its modifications. Vladimir Grigoriev 2012-10-30 2012-11   Library  
N3458 12-0148 Simple Database Integration in C++11 Thomas Neumann 2012-10-22 2012-11   Library  
N3459 12-0149 Comparison of Two Database Access Methodologies Bill Seymour 2012-10-13 2012-11   Library  
N3462 12-0152 std::result_of and SFINAE E. Niebler, D. Walker, J. de Guzman 2012-10-18 2012-11 N3436= 12-0126 Library Adopted 2012-10
N3463 12-0153 Portable Program Source Files Beman Dawes 2012-11-02 2012-11   Evolution  
N3465 12-0155 Adding heterogeneous comparison lookup to associative containers for TR2 (Rev 2) Joaquín Mª López Muñoz 2012-10-29 2012-11 N2882= 09-0072 Library  
N3466 12-0156 More Perfect Forwarding Mike Spertus 2012-11-03 2012-11   Evolution  
N3467 12-0157 Runtime-sized arrays with automatic storage duration (revision 3) Jens Maurer 2012-10-29 2012-11 N3412= 12-0102 Core  
N3468 12-0158 User-defined Literals for Standard Library Types (version 2) Peter Sommerlad 2012-10-24 2012-11 N3402= 12-0092 Evolution  
N3469 12-0159 Constexpr Library Additions: chrono, v3 B. Kosnik, D. Krügler 2012-10-18 2012-11 N3303= 11-0073 Library Adopted 2012-10
N3470 12-0160 Constexpr Library Additions: containers, v2 B. Kosnik, D. Krügler 2012-10-18 2012-11 N3304= 11-0074 Library Adopted 2012-10
N3471 12-0161 Constexpr Library Additions: utilities, v3 B. Kosnik, D. Krügler 2012-10-18 2012-11 N3305= 11-0075 Library Adopted 2012-10
N3472 12-0162 Binary Literals in the C++ Core Language James Dennett 2012-10-19 2012-11   Core  
N3473 12-0163 C++ Standard Library Active Issues List (Revision R80) Alisdair Meredith 2012-11-03 2012-11 N3438= 12-0128 Library  
N3474 12-0164 C++ Standard Library Defect Report List (Revision R80) Alisdair Meredith 2012-11-03 2012-11 N3439= 12-0129 Library  
N3475 12-0165 C++ Standard Library Closed Issues List (Revision R80) Alisdair Meredith 2012-11-03 2012-11 N3440= 12-0130 Library  
N3477 12-0167 C++ Internet Protocol Classes A. Fabijanic, G. Obiltschnig 2012-10-28 2012-11   Networking  
N3478 12-0168 Core Issue 1512: Pointer comparison vs qualification conversions Jens Maurer 2012-10-29 2012-11   Core  
N3479 12-0169 Priority Queue, Queue and Stack: Changes and Additions G. Powell, T. Blechmann 2012-11-02 2012-11 N3443= 12-0133 Library  
N3480 12-0170 C++ Standard Core Language Active Issues, Revision 81 William M. Miller 2012-11-03 2012-11 N3382= 12-0072 Core  
N3481 12-0171 C++ Standard Core Language Defect Reports and Accepted Issues, Revision 81 William M. Miller 2012-11-03 2012-11 N3383= 12-0073 Core  
N3482 12-0172 C++ Standard Core Language Closed Issues, Revision 81 William M. Miller 2012-11-03 2012-11 N3384= 12-0074 Core  
N3484 12-0174 A URI Library for C++ G. Matthews, D. Berris 2012-11-01 2012-11 N3420= 12-0110 Networking  
N3485 12-0175 Working Draft, Standard for Programming Language C++ Stefanus Du Toit 2012-11-02 2012-11 N3376= 12-0066    
N3486 12-0176 C++ Editor's Report, October 2012 Stefanus Du Toit 2012-11-02 2012-11      
N3487 12-0177 TLS and Parallelism Pablo Halpern 2012-05-08 2012-11   Concurrency  
N3488 12-0178 Evolution Working Group paper status Ville Voutilainen 2012-11-02 2012-11   Evolution  
N3489 12-0179 A Rational Number Library for C++ Bill Seymour 2012-10-13 2012-11 N3414= 12-0104 Numerics  
N3490 12-0180 ADL Control for C++ Dave Abrahams 2012-10-31 2012-11   Evolution  
N3491 12-0181 Minutes: SG4 Networking, October 2012 Alex Fabijanic 2012-11-01 2012-11      
N3492 12-0182 Use Cases for Compile-Time Reflection (Rev. 2) Mike Spertus 2012-11-03 2012-11 N3403= 12-0093 Evolution  

Meeting C++ 2012: European C++ users group meeting

C++ continues to heat up with new conferences! Europeans now have something similar to C++ Now (formerly BoostCon), one organized and hosted by Europeans, but open to anyone:

Meeting C++ 2012

Nov 9-10, 2012, Düsseldorf/Neuss, Germany

Meeting C++ is being held with the collaboration of C++ Users Groups from Dusseldorf, Berlin, and Belgium. The inaugural conference already has over 175 attendees registered, and a rich talk list of current C+ topics. WG21's own Michael Wong will give a keynote on Good C++ Coding Style.

C++11: The New Standard -- Dave Abrahams

C++11 -- The New Standard

Dave Abrahams, BoostPro Computing

Contact [email protected] for further details

 

In this class we’ll be using real C++11 compilers to explore the new standard, including these specific topics:

Classes: override and final, =default and =delete, in-class member initializers, delegating and inheriting constructors
Move Semantics: copy elision, rvalue references, and perfect forwarding
Concurrency: high- and low-level lock-based components. Atomics and the C++ memory model.
General: range-based for loops, nullptr, uniform initialization, string encodings, unicode, and auto
Functional: Lambda expressions, std::bind, std::function, user-defined literals, and constexpr
Exceptions: noexcept, nesting, copying, and re-throwing, system_error and friends
Containers: arrays, tuples, initializer_lists, emplacement, scoped allocators, and hash tables
Basic Types: standard-layout types, extended integer types, generalized unions, alignments, and scoped enums
Smart Pointers: unique_ptr, shared_ptr, weak_ptr, make_shared, allocate_shared
Templates: extended SFINAE, working with decltype and declval, and variadic templates

Because the earlier C++03 standard is familiar, and will still be relevant for many years, we offer special attention to future-proofing and to the emulation of C++11 features in C++03 using 3rd-party libraries such as Boost.

Who It’s For: experienced C++ programmers who want to be ready for C++11.

Format: Each day is divided roughly into four blocks, each consisting of an hour of lecture and thirty minutes of hands-on exercises. Ideally presented as a 5-day course, it is scalable to 3 days customized to your team’s needs.

Download a complete brochure (PDF) or contact [email protected] for details.

 

Higher Level C++ with the Boost Libraries -- Dave Abrahams

Higher-Level C++ with the Boost Libraries

Dave Abrahams, BoostPro Computing

Contact [email protected] for further details

The Boost library collection has become the de-facto standard toolkit for serious C++ development projects.

What You'll Get: new tools, revolutionary ideas, and a foundation upon which to continue expanding their knowledge.

Who It’s For: C++ developers who want to accelerate their work using high-quality infrastructure.

Format: Each day is divided roughly into four blocks, each consisting of an hour of lecture and thirty minutes of hands-on exercises. Ideally presented as a 5-day course, it is scalable to 3 days based on your team’s needs.

Structure: the scope of Boost is broad, so it is important to cover a subset of the collection that is both useful and relevant to your team. We will customize a selection of course modules that address your group’s needs, experience, and short- and long-term needs.

Suggested Course Modules

The modules below represent some suggested groupings of similar/related libraries, based on size, domain, and utility. Some libraries don’t fit neatly into one particular module, and the list of Boost libraries is constantly growing, so be sure to let us know if you want something you can't find here.

  • The Boost Core: presents a broad array of generally-useful libraries and introduces “vocabulary components and idioms” that are used throughout other libraries in Boost and in the C++11 standard. Recommended for all presentations of this course.
  • The Boost Graph Library: concepts, algorithms, data structures, theory and practice.
  • Computational Geometry with Boost: covers Boost.Geometry and Boost.Polygon.
  • Networking and Async Services: showcases Boost.ASIO and gets inside the “network programming head-space,” showing design patterns that can make this kind of code tight, maintainable, and efficient.
  • Boost Concurrency and HPC: covers both the issues inherent in concurrent systems and a suite of libraries in Boost that can help you solve them.
  • Algebraic Data Types: describes a highly-generic and introspectable way of working with data using the Boost Tuple, Variant, Optional, and Fusion libraries.
  • Image Processing: covers the powerful Boost.GIL library
  • Testing and Correctness: discover the Boost tools for writing rock solid code. Shows how to manage uncertainty and makes it possible to code with confidence.
  • Boost for Numerical Computing: covers the Boost.Math, Boost.Interval, Boost.Random, Boost.Accumulators and more, including several important offerings outside the Boost collection.
  • Functional Programming: aimed at C++03 programmers (who don’t have true lambda expressions) and at C++11 programmers desiring more power to create and manipulate functions.
  • Thinking Hybrid with Boost.Python: covers everything needed to flow smoothly between Python and C++, small- and large-scale development, extending Python, and embedding it in C++ programs.
  • Text Processing with Boost: develop fluency with the vocabulary of Boost's many text processing libraries and learn how to apply them effectively.
  • Metaprogramming Concepts and Frameworks: 
A compressed, high-intensity subset of our 5-day metaprogramming course, covering Boost.MPL, Boost.Fusion, and Boost.Proto, among others.

just::thread 1.8.2 released: C++11 thread library supports Ubuntu Quantal and Fedora 17

just::thread 1.8.2 is now available.

Anthony Williams' implementation of the C++11 threading library adds support for gcc 4.7.2, and consequently official support for Ubuntu Quantal and Fedora 17.

just::thread is now available for the following compilers:

  • Microsoft Visual Studio 2005, 2008, 2010 and 2012 for both 32-bit and 64-bit Windows,
  • TDM gcc 4.5.2 and 4.6.1 for both 32-bit and 64-bit Windows,
  • g++ 4.3, 4.4, 4.5, 4.6 and 4.7 (4.7.2 or later) for both 32-bit and 64-bit Linux (x86/x86_64), and
  • MacPorts g++ 4.3, 4.4, 4.5, 4.6 and 4.7 (4.7.2 or later) for 32-bit and 64-bit MacOSX.

Boost 1.52.0 released

Release 1.52.0 of the Boost C++ Libraries is now available.

These open-source libraries work well with the C++ Standard Library, and are usable across a broad spectrum of applications. The Boost license encourages both commercial and non-commercial use.

Releases 1.51.0 and 1.52.0 contain one new library (Boost.Context, by Oliver Kowalke) and numerous enhancements and bug fixes for existing libraries.

Here are some useful links for 1.52.0.

Many thanks to the Boost release team:

    Beman Dawes
    Daniel James
    Eric Niebler
    Marshall Clow
    Rene Rivera
    Vladimir Prus

We very much appreciate their continued hard work.

The Future of C++ -- Herb Sutter

Yesterday, many thousands of you were in the room or live online for Herb Sutter's talk, now available online:

The Future of C++

Herb Sutter
November 2, 2012

From Herb's video announcement summary:

This has been a phenomenal year for C++, since C++11’s publication just 12 months ago. And yesterday was a great day for C++.

Yesterday I had the privilege of announcing much of what Microsoft and the industry have been working on over the past year.

(minor) C++ at Microsoft

On September 12, we shipped VC++ 2012 with the complete C++11 standard library, and adding support for C++11 range-for, enum class, override and final. Less than two months later, yesterday we announced and shipped the November 2012 CTP, a compiler add-in to VC++ 2012 adding C++11 variadic templates, uniform initialization and initializer_lists, delegating constructors, function template default arguments, explicit conversion operators, and raw string literals. Details here, and download here.

Note that this is just the first batch of additional C++11 features. Expect further announcements and deliveries in the first half of 2013.

(major) C++ across the industry

Interest and investment in C++ continues to accelerate across the software world.

  • ISO C++ standardization is accelerating. Major companies are dedicating more people and resources to C++ standardization than they have in years. Over the next 24 months, we plan to ship three Technical Specifications and a new C++ International Standard.
  • C++ now has a home on the web at isocpp.org. Launched yesterday, it both aggregates the best C++ content and hosts new content itself, including Bjarne Stroustrup’s new Tour of C++ and Scott Meyers’ new Universal References article.
  • We now have a Standard C++ Foundation. Announced yesterday, it is already funded by the largest companies in the industry down to startups, financial institutions to universities, book publishers to other consortia, with more members joining weekly. For the first time in C++’s history since AT&T relinquished control of the language, we have an entity – a trade organization – that exists exclusively to promote Standard C++ on all compilers and platforms, and companies are funding it because the world runs on C++, and investing in Standard C++ is good business.

This is an exciting time to be part of our industry, on any OS and using any language. It’s especially an exciting time to be involved with C++ on all compilers and platforms.

Thank you all, whatever platform and language you use, for being part of it.

Links: