async.hpp - asynchronous, stackless coroutines for C++
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
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++
Здравствуйте, 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++
Здравствуйте, 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, Вы писали:
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. А так, да. Это примерно то же самое.
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить