At SC16 there was a discussion between programming language standards for heterogeneous hardware, organised by Khronos. See here for the setup of the session. It was expected to be a heated discussion, but in the end it was a good conversation with lost of learning.
The main message from each language seems to be: “Yes, we’re working on that feature”. This means that a programming language is just like human languages, as new things get named and described world-wide. This also shows the hard work the development of languages bring, as new feature-requests are a constant.
Some random quotes on each language
The below remarks I’ve written down, but much more was said. The below remarks have mostly been said be the various representatives of the languages, but some parts are said by others. As they’re written out-of-context here, understand each was a discussion on its own. If you have quotes written down, mention them in the comments (with attribution).
- OpenCL: the language is being attacked on so many fronts, and parts have been taken by other standards instead of embracing (looks at OpenMP). This means OpenCL is on the right direction.
- C++: We’re on a roll! C++ is the standard of standards.
- OpenACC: both mapping of work to threads and parallel loops, where others only implement both.
- SYCL: Parallel C++ was born in 2008 already. SYCL was always on the CL roadmap. It has an advantage over pragmas, as it works better with more complex algorithms.
- MPI: the only inter-node standard at the panel. It’s an API, not a language. Defacto standard.
- Fortran: old standard, but still modern as it has been evolved continuously.
- OpenMP: works with several languages: C++, Fortran, MPI. Easiest way to add parallelism to code.
All these standards seem to like two things: members who help advance the standard, and user-groups that give feedback. The reasoning for that is simple. Variation in the members (not only friends) tells if it is a real standard, and active user-groups define how well accepted the language is.
Performance, maintainability, portability and productivity
These are the main four goals of a programming language. Performance and productivity are the shared promises of each language, but the other two are the points of discussion.
Tim Mattson: “Simply no language is actually performance portable, it’s a dream“. Because of that, maintainability is more important than performance portability.
With so much progress in all languages, there eventually will be a few winners. I’m saying “eventually”, as it does take some time to have a legacy language replaced.
Breaking the legacy, or not?
Just like human languages (including slang), popularity of languages come and go. Once Latin and German were the defacto language for science, which now is taken by English.
This means that functional languages like HPx and Kokkos, which seem to be better suited for heterogeneous programming, could take over. Also C++ seems to avoid OpenMP and OpenACC by defining parallelism.
On the other hand, if the above languages keep progressing by taking in the right features (while not getting too complex or too hard to learn), they can escape a fall. As an example several non-functional languages have adopted functors (and variants like monads, applicatives and monoids), to better compete with functional languages.
Which will win, depends on too many factors, so an answer would quickly sound political.
If you would get enough time off to learn a new language for programming, which would it be?