История изменений
Исправление Lrrr, (текущая версия) :
Zig 0.16 закрыл проблему раскраски функций: sync и async теперь имеют одинаковую сигнатуру, отличается только переданный I/O-интерфейс. Если вы писали асинхронный Rust и упирались в async fn-заражение - посмотрите, как это решено здесь.
ничего он не закрыл, лол. Просто теперь цвет функции будет определяться не специальным ключевым словом в сигнатуре, а наличием специального параметра, вот этим самым I/O-интерфейсом.
И получается ровно то же самое что раньше: если у тебя функция foo() не цветная, а bar(io) цветная, то вызвать bar из foo ты не сможешь, потому что в foo() у тебя не будет этого самого io. Придется либо создавать его на месте, либо передавать откуда-нибудь сверху отдельным параметром, делая foo() цветной. Это ровно то же самое асинк-заражение что и раньше.
Реальный способ бороться с этим был, есть и будет только один: явно обрабатывать частичные чтения и прочие EAGAIN и писать эвент-лупы с машинами состояний и потоковыми парсерами. Сложно, да. И сразу становится видно, какое непродуманное гуано все эти сетевые протоколы и прочие JSON. Но тут уже надо определиться, либо ты программист, либо нет.
Исходная версия Lrrr, :
Zig 0.16 закрыл проблему раскраски функций: sync и async теперь имеют одинаковую сигнатуру, отличается только переданный I/O-интерфейс. Если вы писали асинхронный Rust и упирались в async fn-заражение - посмотрите, как это решено здесь.
ничего он не закрыл, лол. Просто теперь цвет функции будет определяться не специальным ключевым словом в сигнатуре, а наличием специального параметра, вот этим самым I/O-интерфейсом.
И получается ровно то же самое что раньше: если у тебя функция foo() не цветная, а bar(io) цветная, то вызвать bar из foo ты не сможешь, потому что в foo() у тебя не будет этого самого io. Придется либо создавать его на месте, либо передавать откуда-нибудь сверху отдельным параметром. Это ровно то же самое асинк-заражение что и раньше.
Реальный способ бороться с этим был, есть и будет только один: явно обрабатывать частичные чтения и прочие EAGAIN и писать эвент-лупы с машинами состояний и потоковыми парсерами. Сложно, да. И сразу становится видно, какое непродуманное гуано все эти сетевые протоколы и прочие JSON. Но тут уже надо определиться, либо ты программист, либо нет.