그외 새로 들어가는 IDE 기능들

전에 쓴 post에 있는 새로운 IDE 기능은 dynamic과 COM interop에 관련되어 새로 추가된 기능들이고, 당연히 이 밖에도 여러가지 새로 VS10에 추가 되는 IDE 기능들이 있습니다. 이번 post에서는 요 기능들에 대해 얘기 할까 합니다.

 

일단 새로 추가된 기능을 2가지로 분류 한다면, 첫번째는 새로이 들어가는 기능이고, 두번째는 기존의 기능을 향상 시킨것입니다.

 

일단 새로이 들어간 기능에 대해서 먼저 쓰자면,

  1. Quick Search
    1. solution 네에 정의된 type, member, filename등을 object browser의 find symbol 보다 아주 빠른 속도로 찾아 주는 기능입니다. 일반적으로 몇 초 안에 원하는걸 찾을수 있습니다.
      image
  2. Call Hierarchy
    1. 이 기능은 method 간의 caller와 callee를 찾아 주는 기능입니다. method간의 관계를 찾아 보는데 아주 유용하죠. 게다가 기존의 “Find All Reference”로는 할수 없는 Override를 찾는다 던가, 아니면 interface의 implement를 찾을수 있습니다.
      image
  3. Highlight References
    1. 이 기능은 같은 파일안에서 동일한 symbol을 화면에 보여 주는 기능입니다. 기존 “Find all reference”이 전체 솔루션에서 같은 symbol을 찾아준다면 이건 동일한 기능을 한 파일에서만 한다고 생각 하시면 됩니다.
      image
  4. Generate from Usage
    1. 이 기능은 정의되어 있지 않은 type/constructor/property/enum member 등을 사용하면, 그 type/member를 자동으로 생성해 주는 기능입니다. generate method와 비슷하다고 보시면 됩니다. 이 기능은 소위 말하는 consume first 방식의 프로그래밍을 하시는 분들을 위한 기능입니다.
      image
  5. Co/Contravariance
    1. 이 기능은 간단히 말해서 이제 C# 4.0에서 아래와 같이 할수 있다는겁니다.

          interface I<in T, out U> { }

          class Base { }     class Derived : Base { }

          class Program     {         void Test(I<Base, Derived> ib)         {             I<Derived, Base> id = ib;         }     }

    2. 아시다시피, 기존에는 같은 generic type 사이에서만 conversion이 가능했지, 보시는것 처럼 inheritance에 따라서 assign 하는것이 불가능 했엇죠. 이제 interface와 delegate의 경우, generic argument에 한해, 이것을 지원합니다. 또한 언어만 지원하는게 아니고, BCL혹은 mscorlib에 정의되어 있는 interface와 delegate 중, co/contravariance 를 씀으로써 혜택 받을수 있는 타입들은 이번 CLR 4.0에서 co/contravariance를 쓰도록 바뀌었습니다. 예를 들어 IEnumerable 이나 Func 같은것들 말이죠.
    3. 보다 자세한 내용은 Covariance and Contravariance in C# 4.0 혹은 Eric Lippert 을 참조 하시기 바랍니다.

 

뭐 이정도 인거 같고, 기존의 있었던 기능들 중에 발전된것들을 나열하자면

  1. Background errors (live squiggles)
    1. 이 기능은 VS 2008 SP1에서 처음 소개된 기능인데, 이번 VS10에서 더욱 다듬어졌습니다.
  2. Refactoring performance
    1. 기존에 사용하던 refactoring engine을 vs 2008에서 새로이 개발한 LAF로 교체 하였습니다. 이로 인해 “Find All reference”, “Rename” 과 같은 여러 refactoring 기능들의 성능이 많이 향상 되었습니다. 특히 local variable 같은 경우는 거의 실시간으로 작동하게 되었습니다.
    2. 전체 solution을 찾아야만 하는 것도 기존의 engine에 비해 거의 2배 이상 성능 향상이 있었습니다.
  3. refactoring on xml doc comment
    1. 밑에 보시는 바와 같이 이제 refactoring operation들이 xml doc comment안에 있는 reference도 찾아낼수 있습니다.
      image
  4. Completion set
    1. 기존의 completion set과 달리 존재 하지 않는 타입 혹은 심볼을 사용하더라도 강제로 commit 시키지 않습니다. 대신 builder를 이용하여 존재 하지 않은 symbol을 commit 할수 있게 해줍니다. (아쉽게도 제가 아직 이 기능이 작동하는 VS를 인스톨 하지 않았네요…)

뭐 기능이 향상 된건 이정도 인거 같네요. 이것보다 몇개 더 했던거 같은데, 지금 기억나는건 이게 다네요.

 

몇 달후에 beta1 아마도 나올테니 관심있으신 분들은 다운 받아서 함 써봐주세요.

 

그럼 수고.