_>Причём тут какой-то rethinkdb, если ты писал свой ответ на вполне однозначную фразу "стекфул корутины в бусте не зря на асме сделали, а не на longjump"?
...который был, в контексте, ответа на мою фразу и пример аццкого кода rethinkdb, нашпигованного платформенными зависимостями )
там черт ногу сломит...
реверскод?) перелогинься))
_>Естественно, что не все библиотеки Boost'a собираются под Андроид (причём это не какие-то баги, а вполне себе заранее заложенная и документированная ситуация). _>
Однако с обсуждаемыми библиотеками (переключения контекстов, сопрограммы и т.п.) никаких проблем нет.
ясно, хорошо
_> И это вполне предсказуемо — откуда возьмутся проблемы у банального ассемблерного кода сохранения/восстановления регистров?
ясно, сохранение контекста/регистров на платформенных асмах — не проблема для библиотеки
_> Там сложности в основном у библиотек требующих всяческий специфичный системный API...
м... я думал, boost опирается только на c++ std / posix и с андроидом проблема именно в совместимости с NDK
(там, например нет стандартной C библиотеки, там bionic)
про Context / Coroutines
вообще это интересно, вполне можно использовать
Технический практический вопрос:
Как именно сделать некий легковесный пул задач на корутинах?
Я так понимаю, корутины дают легковесное переключение "контекста" т.к оным там является переключение (сохранение/восстановление)
указателя инструкций + текущего стека + регистров.
И это эффективнее вызова планировщика ОС
Плюс, позволяет писать более "синхронный" код, как в лекции про яндекс.карты.
Интересно, как именно сделать "асинхронный фьючерс" и wait() — например, ожидание ввода-вывода, сети, результата работы другой корутины и т.д.