вторник, 25 июня 2019 г.

[prog.c++] Кому-нибудь будет интересен еще один доклад про акторов и их применимость/реализуемость в C++?

Мне прислали приглашение подать доклад на конференцию C++ Russia 2019 Piter, которая пройдет в Питере 31-го октября и 1-го ноября. И я нахожусь в задумчивости по поводу темы доклада с которым можно было бы достойно выступить.

Пришла мысль о том, что можно еще раз попробовать поговорить про акторов. Я два раза уже выступал с подобными докладами, но там речь шла все-таки о конкретном инструменте или о вещах, связанных с этим инструментом. Поэтому собственно тема самих акторов осталась не раскрыта.

А можно было рассказать о том, что такое подход на базе акторов вообще. О том, решение каких типов задач и как он упрощает. Где применим, а где нет. Как понять, что применим.

А так же добавить сюда информацию о том, как модель акторов может быть реализована в C++. Ну, например, как могут быть в принципе представлены акторы (нити, сопрограммы, объекты с коллбэками). Как может происходить извлечение и обработка сообщений (ручной вызов receive актором или автоматический вызов коллбэка). Как может происходить работа с сообщениями (аллокация в момент отсылки, преаллокация, аллокация с отложенной деаллокацией, простой FIFO порядок или selective-receive/stashing). Отказоустойчивость C++ приложений с акторами. Защита акторов от перегрузок. Распределенность для акторов (прозрачная или непрозрачная, из коробки или нет). Насколько черным должен быть тот ящик, который выступает в качестве акторного фреймворка (т.е. насколько просто в него заглянуть и понять, что происходит). Насколько просто тестировать акторов и кто/как может в этом помочь.

И, главное, чтобы этот рассказ не был привязан к какому-то одному конкретному инструменту. Ссылки на то, что есть в наличии в QP/C++, CAF, SObjectizer и т.п., возможны, но разве что как иллюстрации.

Идея в том, чтобы человек, который имеет смутное представление об акторах, но вынужденный программировать на C++, мог выйти после доклада с представлением о том, нужны ему акторы или нет. И, если нужны, то на какие моменты стоит обращать внимание при выборе готового фреймворка или (недайбох) написании собственного лисапеда.

Часть этих вопросов уже рассматривалась, например, на Corehard Autumn 2017. Но там рассматривался, в основном, концептуальный аспект, без привязки к особенностям реализации. А когда мы говорим об акторах в C++, то без привязки к реализации не обойтись. Очень уж специфический язык C++ и очень уж сильно сегментировано его комьюнити (об этом речь шла на C++ Russia 2018, но там не освещался вопрос полезности/бесполезности акторов). Поэтому хочется выдать материал в максимально сжатом и концентрированном виде.

Повторюсь, задача максимум -- это сделать такой доклад, чтобы выйдя с него у человека было понимание того, нужны ли ему акторы или нет. И, если нужны, чтобы в руках было что-то вроде чек-листа, пройдясь по которому можно было бы понять какие именно акторы нужны и почему.

В общем, если кому-то будет интересен такого рода доклад, то дайте как-то о себе знать. А если будет еще и конкретное пожелание о том, чтобы вы хотели услышать в докладе, то будет совсем хорошо.