async/await, 언어마다 전혀 다른 이유

A Design Space Exploration of Async/Await

async/await, 언어마다 전혀 다른 이유

async/await는 언어마다 설계가 크게 다르다. Brown 대학 연구진은 7개 런타임(Asyncio, C#, JavaScript, Tokio, Smol, Trio, Swift)을 분석해 9가지 설계 차원을 도출했다. 같은 프로그램도 언어에 따라 'AC', 'ABC' 등 전혀 다른 결과를 낸다. 논문은 형식 의미론으로 이러한 차이를 설명한다.

7개 런타임 전반에 걸쳐, 이 단순한 프로그램의 세 가지 변형에 대해 두 런타임이 같은 출력을 내는 경우는 없었다!
  1. bradleybuda

    퀴즈에 답했더니 "당신은 Javascript 개발자임에 틀림없습니다"라고 하더군요. 사실에 가깝습니다. 아마 제가 두 번째로 능숙한 언어일 겁니다. 사실 저는 async/await라는 발상 자체가 싫어서 Ruby 개발자가 된 측면도 있는데, 이 글을 읽고 나니 제 선택이 매우 뿌듯하게 느껴집니다.

    이 설계 결정들 중 일부는 제 눈에는 도저히 변명할 수 없는 것처럼 보입니다. 예를 들어 저자들이 "Suspension"이라고 부르는 것 말이죠:

    -> Static: Await 지점이 중단을 보장함 -- JavaScript

    -> Dynamic: awaiting 작업에 대한 보장이 없음 -- C# · Swift · Tokio · Smol · Asyncio · Trio

    "await"가 "suspend"의 동의어가 아니라면 대체 뭐란 말입니까?!?

    async/await는 "스레드는 프로그래머가 제대로 다루기엔 너무 어렵다"는 오랜 사고 흐름의 산물 중 하나입니다. 스레드(정확히는 공유 메모리)는 개발자 입장에서 실질적인 사용성 문제가 있습니다. 하지만 일단 그 의미론을 체득하고 나면(이는 대체로 CPU의 물리적 실행 모델에 대응됩니다), 그 지식은 거의 모든 언어와 런타임에 걸쳐 전이됩니다.

  2. biorach

    드디어 누군가가 내가 영원히 머릿속에서 정리하려다 실패해 온 그 지루한 잡다한 것들을 샅샅이 파헤칠 시간을 냈구나.

  3. alilleybrinker

    이렇게 설계 편차의 차원들이 정의되고 나면, 9차원 공간에서 유사도 척도를 만들어 가장 비슷하거나 가장 안 비슷한 조합을 식별할 수도 있을 겁니다.

    또한 누군가 하나의 async 시스템을 알고 있다면, 그들이 익숙한 시스템에서 새로 배우는 시스템으로 넘어갈 때 각 축에서의 차이를 보여줄 수 있는 훌륭한 교육 도구도 됩니다.

이 날의 다른 글

2026-09-11