함수의 동적 액터 격리를 지원하는 새로운 함수 타입

🛠️ Implemented (Swift 6.0)


이 제안서는 Swift에서 액터 격리 상태를 동적으로 유지하는 새로운 함수 타입인 @isolated(any)를 도입해서, 함수가 값으로 전달될 때도 격리 상태를 보존하도록 돕는 방법을 제안하고 있다.

제안서를 읽어보자 ⭐️ 📖


🌙 소개

이 제안서에서는 Swift의 함수가 액터(actor)에 격리된 상태에서 어떻게 동작하는지를 다루고 있다.

기본적으로 Swift는 함수 선언의 격리 상태를 추론 할 수 있지만, 함수가 값으로 전달될 때는 이 정보를 잃게 되는 문제가 있다.

<aside> 💡

왜 정보를 잃게 되나요..? 값으로 함수가 전달되면, 그 함수의 액터 격리 상태가 명시되지 않아서 Swift의 타입 시스템이 그 격리 정보를 유지할 수 없다. 즉, 전달된 함수가 어느 액터에 속하는지 정보를 잃어버려서 타입 시스템이 이를 정확하게 추적하지 못하는 문제가 발생한다.

</aside>

이 문제를 해결하기 위해 새로운 함수 타입을 제안했는데, 이 함수 타입은 동적으로 액터 격리 상태를 유지할 수 있다. 이 제안은 표현력 문제를 해결하고, 표준 라이브러리의 작업 API(Task API)를 더 효율적으로 만든다.

이 제안을 작업(Task) 생성 API 적용해서, 각 작업이 적절한 격리 상태에서 시작되고, 필요 없는 실행자 전환을 줄여서 성능을 향상시키는 효과를 얻는다.💡

🔍 동기 ****


Swift의 동시성(Concurrency) 기능은 함수의 격리 상태를 제대로 이해하는 것에 의존한다. 특히, 격리된 동기 함수가 적절한 격리 상태에서 실행되지 않으면, 데이터 경합이 발생할 가능성이 높다.

Swift에서 함수 선언과 클로저는 세 가지 형태의 액터 격리를 지원한다

  1. 비격리: 특별한 격리가 없는 상태.