Succinct and Mighty F#

Don Syme with some information about history, motivation, and development of F# as a strongly typed functional first programming language. He references to a history document at the beginning of the talk. Unfortunately, he runs out of time when showing some interesting coding examples. But, the slides can be found online, here. It's all there.

Conan.io and Meson for C++

For those, who think there is room for optimization for C++ build pipelines and e.g. appreciate something such as the NuGet package management from the .net world, there is light in the tunnel: conan.io and meson.

With conan.io you can integrate binary packages into your build. You can either use an open server or also setup your own, e.g. in a closed development environment. Own code can be packaged and add to the server. Packages are organized dependent on version and platform, to enable cross platform development and support of different compilers. Using conan.io you don't have to install packages globally into your system (or virtualized system), which is handy when working on many different projects.

For source only packages, meson is worth a try.  It allows a compact and simple syntax to include sub-projects into a project, and creates build files based on ninja.

Understanding the Compiler

With the web-based compile explorer (www.godbolt.org) you can easily inspect what your compiler does to your high level code – not meaning that that’s easily understood. 14 different languages are supported (Haskell, C++, Rust, D, …) for the input and many different compilers and versions can be chosen for the output. You can inspect the resulting assembler code with some simplification features, and color coding. Multiple views and windows can be arranged side by side.

Here, the different output of a short loop in C++ in optimized compile (-O3) in clang 6 vs gcc 8. When disabling the optimization the SIMD instructions will disappear:

When changing the high level code it re-compiles on the fly. It’s pretty astonishing how the same functionality looks different in the final assembler codes.