洪民憙 (홍민희) 블로그

이하의 글은 2012년에 쓴 것입니다. 오래된 글인 만큼, 현재의 생각과 전혀 다른 내용도 많이 포함되어 있고, 당시와는 상황이 많이 달라진 점도 있습니다. 또한, 그 당시에 잘못 알려졌던 정보도 포함되어 있을 수 있습니다. 어찌됐든 저는 제 오래된 글이 회자되는 것을 저어합니다. 읽기에 앞서 양해를 부탁드립니다.

.NET을 쓰는 대부분의 개발자들의 문제는 자신이 쓰는 도구가 얼마나 강력한지 제대로 모르고 있다는 점이라고 생각한다. 대부분 MFC 개발하던 사람이어서 그런지 몰라도, 최근 C# 등에 추가되었던 최신 기술들이 사실은 현대적으로 잘 포장된 프로그래밍 언어의 주요 컨셉들이라는 점을 인식하지 못한다. 오히려 이전에 Common Lisp이라도 했던 사람들이면 표현식 트리가 사실 homoiconicity의 .NET판이라는 것을 알고, Haskell이나 Python을 했던 사람들이면 LINQ가 list comprehensions의 확장판이라는 것도 쉽게 알아차릴 수 있을 것이다. 애초에 CLR이라는 개념부터가 현재 JVM이 누리고 있는 공용 언어 VM 역할을 의도(CLR을 풀어보면 ‘공용 언어 런타임’이다)한 것도 매우 앞선 것이었다. 그보다 몇년 뒤에 Parrot이 동적 언어들을 위한 CLR 같은 것을 노렸지만 제대로 대중화되지는 않았고, 몇년 뒤에 CLR의 하위 기술로 Parrot의 목표와 겹치는 DLR 같은 것이 나오기도 했다. P/Invoke 같은 것도 Python의 ctypes 같은 C FFI보다 훨씬 앞서 나온 거였는데1 실상은 .NET 개발자들 사이에서 Win32 API에서만 쓸 수 있는 함수들 부르는 용도로밖에 안 쓰이는 것 같다.

결국 .NET은 CLR이라는 훌륭한 기술에도 불구하고 문화가 수준을 못 따라가는 느낌이다. 또다른 CLR 구현인 Mono 같은 경우에도 역시나 훌륭하지만 이쪽은 오픈소스 쪽에서 막연히2 CLR이 Microsoft가 주도하는 표준이라 꺼려지는 상황이고.


  1. 물론 그 이전에도 Common Lisp 등에서 비슷한 개념의 FFI가 있긴 했지만, .NET 같은 메이저 기술로 등장한 것은 처음이다.

  2. 항상 막연한 것은 아니긴 하지만 내가 볼 때 대부분의 우려는 막연한 것이다.