Хочу, к примеру, написать WS сервер. Держать процесс на каждое соединение не очень хорошо, поэтому такие вещи надо бы делать асинхронными. Писать асинхронный код немного муторней чем обычный линейный, и хочется иметь возможность писать код как обычно, а чтобы препроцессор его уже преобразовывал в async.
# Т.е. обычно, к примеру, пишу
my $result = ask_database('query');
# когда тоже самое, но асинхронно:
ask_database('query', sub {
my $result = shift;
});
Т.к. код лочится в основном на ожидании ответа от сети (от базы, или от другого API), то почему бы не делать такое преобразование кода автоматически? Мы ведь знаем когда код вызовет функцию на которой можно заблокироваться.
Либо другой вариант:
// Из этого
console.info('test1');
hypothetic_sleep(1000);
console.info('test2');
// Автоматически бы делалось это
console.info('test1');
setTimeout(function() {
console.info('test2');
})
В питоне в tornado есть gen.coroutine , который вроде бы пытается сделать как раз именно такое упрощение, но проблема в том, что не все библиотеки поддерживают tornado и async вызовы.