Один и тот же async-код в семи языках даёт четыре разных результата
A Design Space Exploration of Async/Await

Исследователи из Brown University изучили, как async/await реализован в семи современных рантаймах — Asyncio, C#, JavaScript, Tokio, Smol, Trio и Swift. Оказалось, что даже простейшая программа с фоновой записью в лог может выдать четыре разных вывода, а для трёх вариаций не найдётся двух рантаймов с одинаковым поведением. Авторы выделяют девять измерений дизайна, включая Eagerness, Extent, Destruction и Cancellation, и формализуют их в виде семантики на ядре асинхронных программ.
Четыре разных ответа для программы, вся задача которой — записать строку лога в фоне.
- biorach
Давно уже было ясно, что между async-рантаймами существуют фундаментальные различия в реализации, которые имеют значение, но _девять_ измерений дизайна? Чёрт возьми.
Я думаю, async обманчив тем, что кажется самодостаточным и относительно простым аспектом языка. Но существует множество дизайнерских решений, и все они имеют широкие последствия.
К тому же, я считаю, что последствия многих из этих измерений не до конца поняты, и collectively мы всё ещё пытаемся понять, как они проявляются в реализациях. Добавьте к этому тонкую природу некоторых последствий плюс комбинации...
Думаю, хорошее сравнение — лексическая и динамическая область видимости в языках программирования. Это измерение дизайна, о котором спорили десятилетие или два в ранние годы проектирования языков программирования. Только со временем, с опытом работы с конкретными реализациями, стало ясно, что лексическая область видимости должна быть выбором по умолчанию, а динамическая область видимости должна быть ограничена различными нишами.
- biorach
Наконец-то кто-то потратил время, чтобы разобрать всю ту нудную хрень, которую я пытался и не мог удержать в голове с незапамятных времён.
- vitaminCPP
Обожаю.
Хотел бы, чтобы там был zig.