LINUX.ORG.RU

История изменений

Исправление 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. Но тут уже надо определиться, либо ты программист, либо нет.