async.hpp - asynchronous, stackless coroutines for C++
От: c-smile Канада http://terrainformatica.com
Дата: 30.10.19 23:56
Оценка: 36 (5)
async.hpp это простая header-only имплементация ASYNC/AWAIT примитивов для C++:

https://github.com/c-smile/async.hpp

Кушать не просит, работает на всем что шевелится, в т.ч. на девайсе с 8kb ОЗУ (Arduino):

https://www.youtube.com/watch?v=aQPYnlXV3ZY

Весь исходник https://github.com/c-smile/async.hpp/blob/master/code/async.hpp
Отредактировано 31.10.2019 0:32 c-smile . Предыдущая версия . Еще …
Отредактировано 31.10.2019 0:30 c-smile . Предыдущая версия .
Отредактировано 30.10.2019 23:57 c-smile . Предыдущая версия .
Re: async.hpp - asynchronous, stackless coroutines for C++
От: AndrewJD США  
Дата: 31.10.19 02:02
Оценка:
Здравствуйте, c-smile, Вы писали:


CS>async.hpp это простая header-only имплементация ASYNC/AWAIT примитивов для C++:

CS>Весь исходник https://github.com/c-smile/async.hpp/blob/master/code/async.hpp

Чем она отличается от бустовой (https://www.boost.org/doc/libs/1_71_0/doc/html/boost_asio/reference/coroutine.html)?
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[2]: async.hpp - asynchronous, stackless coroutines for C++
От: c-smile Канада http://terrainformatica.com
Дата: 31.10.19 02:50
Оценка:
Здравствуйте, AndrewJD, Вы писали:

AJD>Здравствуйте, c-smile, Вы писали:



CS>>async.hpp это простая header-only имплементация ASYNC/AWAIT примитивов для C++:

CS>>Весь исходник https://github.com/c-smile/async.hpp/blob/master/code/async.hpp

AJD>Чем она отличается от бустовой (https://www.boost.org/doc/libs/1_71_0/doc/html/boost_asio/reference/coroutine.html)?


Концептуально и boost и моя примерно про одно и то же:

struct task { // a.k.a. boost::coroutine 
  int line_no;
  // state variables live here
  
  bool run() { // a.k.a. boost::reenter
  
  }
}


Но у boost какая-то зубодробительная логика с fork — вообще не понятно зачем эта абстракция.

Для людей испорченных Нарзаном JavaScript async/await понятен из коробки:

TASK(line_reader) {

  vector<char> line;
  char ch;

  TASK_BEGIN
    while(true) {
      AWAIT(char_available(ch));
      if(ch == '\n') break;
      line.push_back(ch);
    }
  TASK_END
} line_reader;


…

  RUN_TASK(line_reader);

  parse(line_reader.line());
Re[3]: async.hpp - asynchronous, stackless coroutines for C++
От: sergii.p  
Дата: 01.11.19 10:06
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Для людей испорченных Нарзаном JavaScript async/await понятен из коробки:


CS>
CS>TASK(line_reader) {

CS>  vector<char> line;
CS>  char ch;

CS>  TASK_BEGIN
CS>    while(true) {
CS>      AWAIT(char_available(ch));
CS>      if(ch == '\n') break;
CS>      line.push_back(ch);
CS>    }
CS>  TASK_END
CS>} line_reader;


CS>…

CS>  RUN_TASK(line_reader);

CS>  parse(line_reader.line());


CS>


у решения boost меньше макросов. И он более приближён к стандарту (меньше переписывать). Вот сейчас затянешь себе в проект, а люди скажут: "чё это за макросня?". В остальном конечно single-header-only решения всегда симпатичнее.
Re: async.hpp - asynchronous, stackless coroutines for C++
От: sergii.p  
Дата: 01.11.19 10:34
Оценка:
Здравствуйте, c-smile, Вы писали:

void start(unsigned int duration) { until = clock_time() + duration; }


а почему не std::chrono::duration. Ограничение на 98 стандарт?
Re: async.hpp - asynchronous, stackless coroutines for C++
От: удусекшл  
Дата: 01.11.19 10:45
Оценка:
Здравствуйте, c-smile, Вы писали:


CS>async.hpp это простая header-only имплементация ASYNC/AWAIT примитивов для C++:


CS>https://github.com/c-smile/async.hpp


CS>Кушать не просит, работает на всем что шевелится, в т.ч. на девайсе с 8kb ОЗУ (Arduino):


Чем это отличается от https://github.com/benhoyt/protothreads-cpp/blob/master/Protothread.h ?
Re[2]: async.hpp - asynchronous, stackless coroutines for C++
От: c-smile Канада http://terrainformatica.com
Дата: 02.11.19 01:19
Оценка:
Здравствуйте, sergii.p, Вы писали:

SP>Здравствуйте, c-smile, Вы писали:


SP>
SP>void start(unsigned int duration) { until = clock_time() + duration; }
SP>


SP>а почему не std::chrono::duration. Ограничение на 98 стандарт?


Можно и std::chrono::duration.

Просто там не девайсе 8kb ОЗУ (прописью: всего восемь килобайт и C runtime нет. И соотв. std тоже нет.
Re[2]: async.hpp - asynchronous, stackless coroutines for C++
От: c-smile Канада http://terrainformatica.com
Дата: 02.11.19 01:27
Оценка:
Здравствуйте, удусекшл, Вы писали:

У>Здравствуйте, c-smile, Вы писали:



CS>>async.hpp это простая header-only имплементация ASYNC/AWAIT примитивов для C++:


CS>>https://github.com/c-smile/async.hpp


CS>>Кушать не просит, работает на всем что шевелится, в т.ч. на девайсе с 8kb ОЗУ (Arduino):


У>Чем это отличается от https://github.com/benhoyt/protothreads-cpp/blob/master/Protothread.h ?


У меня нет virtual functions соотв. нет VTBL.
У меня есть async::timer и async::semaohore. А так, да. Это примерно то же самое.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.