Today in the St. Petersburg office of Yandex will meet with specialists in parallel programming.
Joel Falca from the French Laboratory for Informatics Research,
Gor Nishanov from Microsoft and
Kirk Shoup , who is working on Microsoft Azure, will come to us. Especially for Habr's readers, we asked Gore Nishanov and Kirk Shup to tell about their personal experience, attitude to C ++, problems and language development.

For those who are interested in the topic, at 19:20 we will start the
video broadcast from the event. The meeting will be held in English. Right on the broadcast page you can ask your guests questions. For those who do not have time to watch the live broadcast, after a while we will post the record.
Gor Nishanov is the Principal Software Engineer for the C ++ development team at Microsoft. He is working on 'await'. Before joining the C ++ team, Gore worked on distributed systems. Last year, he spoke at the annual CppCon conference, which is organized by the Standard C ++ Foundation , with a C ++ Coroutines report. A negative overhead abstraction .
Tell us how you started programming in C ++?')
Since 1992 I have been working on developing C ++ programs for Windows using Win32 and MFC. But this experience was not positive :-) I really met C ++ when I entered postgraduate studies at the
Rensselaer Polytechnic Institute in 1996, where
Dave Musser , one of the co-authors Alexander Stepanov, worked. Thanks to him, the computer science department was saturated with the spirit of modern C ++, which at that time was not widely known.
The ability to create abstractions without loss of efficiency, generic programming and proper use of RAII made C ++ very attractive to me. I wanted to try using modern C ++ on a large industrial project, and Windows NT was a great candidate for this experiment. I worked in the department of Microsoft operating systems for 15 years, where I used modern C ++ in all the projects I encountered. The experience has been successful, but many wishes have also accumulated, how the language and libraries could be improved. Three particularly painful problems — errors in multi-threaded programs, very slow compilation, and unreadable multi-page compilation errors related to C ++ templates — required a solution. I switched to the Visual C ++ team at the end of 2013 to try to help solve these problems, namely, to add convenient support for multi-thread programming, a modular system and a system of concepts for templates in C ++. The latter was already in the final stages of development by Andrew Sutton, it was all about adding support to the compiler. C ++ coroutines, which I am currently working on, are part of the solution to the problems of multi-thread programming. As long as there are no templates, take heart and tell yourself that effective high-level abstractions are worth it.
In which areas is it better to improve C ++?My to-6 is Coroutines, Modules, Concepts, Contracts, Reflection, libraries supporting concurrent / async programming. I think that every programmer has his own priority list. In this case, my top 6 reflect the problems I have encountered.
What insiders on the upcoming standards that are still in development, in your opinion, are the most interesting?The main three: Coroutines, Modules, Concepts. Two smaller ones: default comparisons, unified function call syntax. Libraries: Ranges, Executors, Networking Library
What are the most pressing development problems in our time?The unsolved problem is effective support for multi-threaded programming. Partial solutions such as coroutines, executors, networking library, functional reactive programming are all parts, but as long as they are not assembled into a coherent whole.
Do you plan to finish the work before the “final release” of C ++ 17?What C ++ 17 comes in will be clear by the end of 2016.
When will executors in STL? What is their status now?In C ++ 20, as long as there are several proposals, the consensus will most likely not be reached until C ++ 17 is closed.
What will be the result with std :: async, and with what or how will it be replaced?While there are no specific proposals.
How will parallel, multi-threaded, competitive programming in C ++ 17 change? Are killer features planned to write multi-threaded server screen lengths using new features? Which community members or working groups work on this area, and where can they be found on the Internet?The next two standardization conferences will become clear (http://isocpp.org/,
open-std.org/jtc1/sc22/wg21/docs/papers/2015 ).
Is an expansion of the library of standard elements planned?Optional, variant, string_span, array_span, possibly included in C ++ 17.
Boost is known for its multipage error messages. And what methods do you use to debug C ++ templates?This is one of my top 3 problems with C ++. Pattern Concepts should help get rid of it. As long as there are no concepts, take heart and tell yourself that effective high-level abstractions are worth it.
What would you recommend to young developers who want to follow in your footsteps?Do what your soul is for and what is good at it.
Kirk Shoop joined Microsoft as an intern in 1993. The main direction he is working on is Azure Machine Learning. He also participates in several open source projects of the company: Dash.js , Blink , OpenJDK , Redis . Now Kirk is writing asynchronous libraries like rxcpp, async and transducer. Kirk likes to learn and apply new compiler features to make my libraries and my code more secure and expressive.
Interview in English for those who are more interesting to read in the originalIf you would design C ++ from scratch, what would you do differently?
C ++ is actually a set of several languages; Preprocessor, C, C ++, templates - perhaps even separate languages. It’s been a successful decision. If you want to make it out of the box, I’m making it a lot of things to do.
In which directions should C ++ be improved in the first place? Your ideas.
I like building types at compile-time. Build compile-time. Another idea I made was to add the ScopeGuard behavior into the lambda syntax. So 'FILE file = nullptr; auto fileClose = [~] () {if (file) fclose (file);}
What are the most interesting features?
C ++ standards are co_await, co_yield, co_return are important building blocks for usable async. Concepts are available for template errors from template libraries. Modules between workable libraries.
Nowadays?
My focus has always been to build the library. One example is when the error value is changed.
How is it possible to change with C ++ 17? Will it be a multithreaded server fitting on a single screen? Which people and working groups are working in this area? Where can you read about them on the Internet?
It has been shown that it can be a concurrency.
8. What are the new standard ways of developing multithreaded programs in C ++? What do you usually have?
I advocate using abstractions for abstractions. The issues with concurrency are code structure (which is improved with algorithms) and debugging.
What are your recommendations?
Find lots of code and read lots of code. I’m not motivated to understand them.
When I’ve started programming, I’ve been able to see what I’ve been planning for. After ten years, I saw that I was actually fully caught up. I’m not in the middle of the world.
If you were designing C ++ from scratch, what would you change?C ++ is actually a collection of several languages. Preprocessor, C, C ++, templates — perhaps even Concepts and constexpr — are all separate languages. I think that backward compatibility with C was a good solution, and in this similarity I would like to have a C-compatible language (subset of the language) that would be executed during compilation for typing manipulations. I have written a lot of code on the templates in my life, because most of the problems I work on will benefit if you execute part of their solution at compile time. So a normal language with debugging and debugging capabilities associated with the compiler would be just a dream.
In what areas should first develop C ++?I like the creation of types at compile time. It would be great to be able to determine the names at compile time. Another idea proposed some time ago is to add ScopeGuard to the lambda syntax.
What should be interesting in the new C ++ standards?The most interesting features - co_await, co_yield, co_return, are important components for convenient async. Concepts are very important for normal error messages from libraries on templates. Modules are needed in order to create a separation between components - which, I hope, will be used to create a package manager that will help sort out the dependencies between libraries.
What problems are most relevant today in the development?I have always been focused on developing libraries (and not tools) that would free me from catching errors and generally from their appearance. An example is a smart class for an error code that calls abort () when the error value has changed, but has not yet been worked out.
How will the development of multi-environment programs with C ++ 17 change? Will there be any cool features so that you can write a multi-host server on one screen? Who is working on it?I hope that when we have asio and some patterns with async, or maybe coawait, we will see multithreading in the STL. This will no longer use thread and mutex in code for multi-threaded execution.
How to write multithreaded code in C ++ right now?I am always for algorithms built on concurrency abstractions, which remove the primitive use of thread and lock for a level of abstraction.
What advice would you give to young developers who want to follow your path?Find things that motivate you, write a lot of code and read a lot of code. I am inspired to build things that will exist for many years after I make them, and which will not break even after the changes made by people who do not understand them.
When I started programming, I looked at experienced developers and thought that in 10 years I would catch up with their current level, but they would already go forward by 10 years. Ten years later, I realized that I actually caught up with them completely. Technologies are moving forward, so I did not have to learn the old ones, and I learned new ones at the same time as them.