Один и тот же async-код в семи языках даёт четыре разных результата

A Design Space Exploration of Async/Await

Один и тот же async-код в семи языках даёт четыре разных результата

Исследователи из Brown University изучили, как async/await реализован в семи современных рантаймах — Asyncio, C#, JavaScript, Tokio, Smol, Trio и Swift. Оказалось, что даже простейшая программа с фоновой записью в лог может выдать четыре разных вывода, а для трёх вариаций не найдётся двух рантаймов с одинаковым поведением. Авторы выделяют девять измерений дизайна, включая Eagerness, Extent, Destruction и Cancellation, и формализуют их в виде семантики на ядре асинхронных программ.

Четыре разных ответа для программы, вся задача которой — записать строку лога в фоне.
  1. biorach

    Давно уже было ясно, что между async-рантаймами существуют фундаментальные различия в реализации, которые имеют значение, но _девять_ измерений дизайна? Чёрт возьми.

    Я думаю, async обманчив тем, что кажется самодостаточным и относительно простым аспектом языка. Но существует множество дизайнерских решений, и все они имеют широкие последствия.

    К тому же, я считаю, что последствия многих из этих измерений не до конца поняты, и collectively мы всё ещё пытаемся понять, как они проявляются в реализациях. Добавьте к этому тонкую природу некоторых последствий плюс комбинации...

    Думаю, хорошее сравнение — лексическая и динамическая область видимости в языках программирования. Это измерение дизайна, о котором спорили десятилетие или два в ранние годы проектирования языков программирования. Только со временем, с опытом работы с конкретными реализациями, стало ясно, что лексическая область видимости должна быть выбором по умолчанию, а динамическая область видимости должна быть ограничена различными нишами.

  2. biorach

    Наконец-то кто-то потратил время, чтобы разобрать всю ту нудную хрень, которую я пытался и не мог удержать в голове с незапамятных времён.

  3. vitaminCPP

    Обожаю.

    Хотел бы, чтобы там был zig.

Ещё за этот день

2026-09-11