| 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. |