Polyphonic C#

자바가 처음 발표될 때 랭귀지에 멀티 쓰레드 프로그래밍을 인테그레이션(integration) 한 점을 강점으로 꼽았으나 synchonirzed과 wait만으로는 많은 프로그래밍 실수를 유발할 수 있음이 널리 알려지게 되었고, Java5에서 뒤늦게 java.util.concurrent package를 추가하며 결국 원래 모델인 멀티 쓰레드 관련 라이브러리 제공으로 회귀하게 되었다.

Polyphonic C#은 이러한 한계점을 극복하기 위한 시도로 시작 되었다.

Polyphonic C#은 Microsoft의 C# 언어를 바탕으로 컴파일러에 concurrency 지원을 추가한 실험적인 언어이다. 비슷한 목적에서 출발한 또 다른 실험 언어인 joint-calculus를 바탕으로 concurrency를 추상화(abstraction)해서 프로그램 개발자가 별도로 쓰레드 라이브러리를 사용할 필요없이 동기화(synchronization)을 비롯한 멀티쓰레드 프로그래밍(multi-threaded programming)을 컴파일러가 대신해주는 프레임웍이다.

개인적으로 이런 스타일의 리서치가 무척 좋다. 프로그래머에게 짐(burden)을 넘기지 않고, 컴팔일러가 최적화 할 수 있는 부분은 최대한 컴파일러가 끌고 들어오는 편이 맞다고 생각하고, concurrency 역시 어느정도 이 영역에 속한다고 본다. 컴퓨터 내부의 CPU와 아키텍처, 메모리 모델을 충분히 고려한 concurrnecy는 사람이 아니라 컴파일러의 몫이고 이를 자동화 할 수 있다면 기존 프로그램에서 자주 발견되는 데드락 실수 등을 현저히 줄일 수 있을 것이다. 이것을 가능하게 하기 위해서 concurrency 자체를 추상화할 수 있는 방법이 필요한데, polyphonic C#은 그 기초를 제공한다.

개인적으로 계속 지켜볼 주제다.

이 프로젝트는 지금 Microsoft Research Cambridge U.K.의 컴파일러인 Cw 프로젝트로 흡수되어 진행되고 있다.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s