225 | | 1. Damian Vicino. Topic: Safe Numerics. Mentor: Robert Ramey. |
226 | | |
227 | | 2. Louis Dionne. Topic: Heterogeneous collections (Boost.Hana). Mentor: Joel Falcou. |
| 225 | == 1. Safe Float (boost::safe_numerics<float>) (Damian Vicino mentored by Robert Ramey) == |
| 226 | |
| 227 | === Background === |
| 228 | Arithmetic operations in C++ are NOT guaranteed to yield a correct |
| 229 | mathematical result. This feature is inherited from the early days of C. |
| 230 | The behavior of int, unsigned int and others were designed to map closely |
| 231 | to the underlying hardware. Computer hardware implements these types as a |
| 232 | fixed number of bits. When the result of arithmetic operations exceeds |
| 233 | this number of bits, the result will not be arithmetically correct. In the |
| 234 | past 2 years, the library safe_numerics was developed in Boost Incubator |
| 235 | with a focus in safe_integer operations. Now, we are interesting in |
| 236 | pushing the project forward to include the floating point arithmetics, an |
| 237 | important milestone for the project. |
| 238 | |
| 239 | === GSoC project proposal === |
| 240 | To design a drop-in replacements for float and double (safe<float> and |
| 241 | safe<double> which guarantee that, when used in expressions in a C++ |
| 242 | program, no incorrect arithmetic results will produced. To implement the |
| 243 | safe_numerics<float> and safe_numerics<double>. To write unit and |
| 244 | functional regression testing for all of the above to a 100% code coverage |
| 245 | level. To write documentation to Boost quality levels for the new |
| 246 | container classes, including time and space complexity guarantees and |
| 247 | exception guarantees for each API and each use of each API. |
| 248 | |
| 249 | |
| 250 | == 2. Improve associative data structures in Hana (Louis Dionne mentored by Joel Falcou) == |
| 251 | |
| 252 | === Background === |
| 253 | Hana[1] is a library providing data structures and algorithms working on |
| 254 | heterogeneous objects. It is basically a standard library where you would |
| 255 | replace std::vector by std::tuple (which makes it quite different to the |
| 256 | standard library). The project was started by Louis Dionne as part of GSoC |
| 257 | 2014. |
| 258 | |
| 259 | There is still room for improvement in many parts of the library. Some of |
| 260 | the most lacking parts are the associative data structures, Set and Map, |
| 261 | which provide a limited interface and are implemented using tuples and |
| 262 | linear searching internally, which is inefficient. It would be great to |
| 263 | have a new implementation for those data structures, and also to explore |
| 264 | how the interface of these structures could be improved. |
| 265 | |
| 266 | |
| 267 | === GSoC project proposal === |
| 268 | This project requires good knowledge of: |
| 269 | |
| 270 | * Prior art in C++ template metaprogramming (MPL, Fusion, MPL11 and many |
| 271 | other smaller libraries) - C++11/14 template metaprogramming |
| 272 | implementation techniques - Functional programming; Hana is functional in |
| 273 | nature and most concepts used in the library |
| 274 | come from there. To design a new interface for the associative data |
| 275 | structures, you must be able to navigate through this. |
| 276 | |
| 277 | The project is easy to specify: |
| 278 | |
| 279 | * Find what functionality is missing in the associative data structures - |
| 280 | Find a way to incorporate the new functionality in the current concepts, |
| 281 | or modify those concepts to improve their generality and consistency. - |
| 282 | Explore possible implementation techniques for Maps and Sets. Benchmark |
| 283 | the compile-time (and runtime) performance. |
| 284 | |
| 285 | * Re-implement those data structures, with unit tests, examples and |
| 286 | documentation. |