CASA Software Engineering Project: C++ Language and Compiler Modernization
The C++11 standard is now well, but not completely, supported by most mainstream C++ compilers. Since there are some useful development gains to be obtained when writing in C++11 vs. the current C++03 CASA it would benefit new development to adopt C++11 as our development language version. Moving to C++11 requires upgrading out compiler versions and their accompanying libraries (both those required by C++ and those required by CASA) so there are pragmatic concerns beyond language selection. In addition, compiler upgrade can also impact other features such as OMP support so we ought to take all other compiler-related needs into account in the modernization.
The cutover may take 6 to 12 months before it can be accomplished since it should occur early in the release cycle.
Please add any requirements, comments, timing considerations, etc. on the discussion Page
which is designed to have any number of discussion threads.
We are currently gathering wants, needs and comments. Please enter them on the discussion page
Members - actively working on this project.
Customers - providing requirements.
- CASA Developers
- External CasaCore Developers
Collaborators - may assist with project, but are not directly responsible for deliverables.
- Collect and evaluate requirements from developers; this will be an iterative process.
- Select potential upgrade targets for compilers and libraries.
- This must address all supported platforms.
- Selected compilers and libraries must have a high probability of supporting complete delivery build.
- CASA's policy towards supporting compilers may need to be modified.
- Install compilers and libraries for validation.
- Suitable test platforms will need to be identified for all
- These will need to be installed on all appropriate platforms in a way that does not interfere with normal development builds, etc.
- Build, test and package CASA to determine level of compatibility issues
- Both developer, CBT and deployed builds on all platforms must work before leaving this step.
- Codebase may require patching and/or modification to build cleanly under new compilers.
- Code built using the new compilers must exhibit comparable performance on tests before this step can be considered successful.
- Either select target versions of compilers and libraries or go back to step 2.
- Deploy new compilers and libraries.
- Timing of the deployment needs to factor in the CASA release cycle since code including with C++11 is unlikely to compile.
- Developers may now begun using C++11 features (at least those supported by the compilers and libraries).
- CasaCore will need to remain backwards compatible with pre-C++11 compilers. Any use of C++11 features in CasaCore should be limited and protected with conditional compilation directives.
- C++11 Language Features (Most compilers currently do not offer complete support of C++11)
- C++11 Library Features
- std::shared_ptr (counted pointer we can use to replace or reimplement casa::CountedPtr)
- std::unique_ptr (replaces auto_ptr)
- Other Compiler Features
- It is desirable that the compiler reduce the current build time, as this will improve build, test and packaging processes.
- It is desirable that the compiler yield an improvement in CASA package performance (speed).
- Other Library Features
- Availability / Cost
- It is desirable that the compiler be available at no additional cost. This suggests that it either be free software or that NRAO already have an existing license for use.
- Should a new license be required, the cost should be approved by management before significant effort is expended on evaluation. Maximum allowable cost is TBD.
- The compiler should generally be compatible with the existing CASA code base and not generate an irreparable number of compiler failures during test builds. An acceptable number of failures that can be addressed in the code base is TBD.
- It is desirable that the compiler be deployed for use at the beginning of a release cycle. This would suggest Fall 2014 or Spring 2015 targets for deployment.
- A set of compilers and libraries which will allow us to develop and deploy CASA using C++ functionality providing features to improve the efficiency of software development.
- Gather requirements from developers