Visual Studio 2008의 새로운 intellisense

이번엔 VS 2008의 새로운 기능을 얘기 해 볼까 합니다. 뭐 각 버젼업 마다 새로운 기능을 추가 하는데 이번 VS 2008에서 C# IDE는 사실 C# 3.0의 새로운 기능을 지원 하는데만 거의 모든 시간을 다 사용했습니다.  여기서 C# 3.0의 새로운 기능이라 함은 lambda expression, type inference (var), query expression, object/collection initializer, extension methods, 등등을 말합니다.

위에 나열한 이 새로운 C# 3.0 기능들을 지원하기 위해 사실 저희 팀은 binding을 근본적으로 새로 만들어야 했습니다. VS 2005을 비롯한 그 이전 버젼의 경우, C# IDE의 intellisense는 사실 모든 expression을 이해 한게 아니고, 거의 top level construct들만 이해 했습니다. 쉽게 말하면 어떤 type들이 존재 하는지, 각 타입 에는 어떤 멤버들이 존재 하는지 멤버의 리턴 타입은 뭔지 이런것들은 이해 했지만 expression 레벨로 내려가면 전혀 이해 하지 못했습니다. 예를 들면 (2 + 2) Dot 을 누르면 (2+2)라는 expression을 이해 하지 못하기 때문에 intellisense를 제공 하지 못했습니다.

C# 2.0 까지는 이런게 큰 문제가 되지 않았습니다. 이유는 C# 2.0 까지만 해도 C#이 아주 정적이고 명시적인 언어라 expression 레벨을 지원 하지않아도 프로그램밍 하는데 아주 큰 불편을 주진 않았기 때문이죠. 그런데 이게 C# 3.0으로 완전히 변해 버렸습니다. type inferencing 하나만 가지고도 expression 레벨을 지원 하지 않고는 사용하기가 너무 힘들어 진것이죠. 게다가 query 와 anonymous type 까지 곁들여 준다면.. 기존의 C# intellisense로는 아무것도 할수 없게 된겁입니다. 그래서 VS 2008 에서는 intellisense에 대한 대대적인 보수 작업을 하게 되었습니다.

VS 2005 및 그 이전 버젼의 경우, C# IDE는 IDE 자체가 intellisense를 위한 binding 로직을 가지고 있었습니다. compiler의 binding 로직과는 다른 IDE만을 위한 기능이였죠. 이유야 당연히 compiler와 IDE는 서로 너무 다른 전제 조건을 가지고 있기 때문이죠. IDE의 경우는 99%는 잘못된 코드를 가지고 있고 속도가 정확성 보다 우선순위인데 반해, Compiler의 경우는 99%가 옳은 코드를 가지고 있고 정확성이 속도보다 우선 순위이기 때문이죠. 근데 이게 VS 2008에서 하나로 합쳐졌습니다. 이제 C# IDE의 intellisense의 정보의 정확성은 compiler의 그것과 같아 진것이죠. 물론 그러기 위해서 속도 개선 및 error tolerance 등등 아주 많은 기초 작업이 있었죠.

하여간, VS 2008의 C# IDE 써 보시면 intellisense에서 제공하는 정보가 전보다 확실히 더 정확해 진것을 보실수 있을겁니다.

(1 + 1)을 이해 함은 물론이거니와 new int [] { 1, 2, 3, 4 } 도 이해 하는 ... ㅋㅋ

그럼 수고!!!