C# 개발 비화

C# 개발 비화: "

2008년에 일본에서 열렸던
Developer Summit 2008
에서 MS C# 개발팀에서
일했던 분의 강연을 정리한 글을 번역했습니다. C#의 개발 비화를 조금 알게 되어서 저는 꽤 재미있게
봤습니다.^^







강연자 소개



C#과의 만남



o 인턴으로 Microsoft
간 것이 계기




+
Windows와 같이 거대한 프로덕트를 어떻게 개발하고 있지?」라고 하는 흥미로부터



+ 인턴의
배속처가 당시는 아직 비밀이었던 C# 팀이었다.




#
배속처가 정해져서 접수하러 갔을 때 접수하는 분으로부터 「이런 빌딩(부서?) 들은 적 없다」라고 들었다




* COOL(C like Object Oriented Language)
등의 코드네임으로 불리고 있었던 시대





강연자와 함수형 언어



o 대학의 과제로 scheme
사용하여 인공지능을 만들어 본 경험이 있었다



+ 전혀 함수형 언어가 아닌 것처럼 프로그램을 짜 버렸다




+ 100
행을 넘는 코드가 되어 버려서 결국 움직이지 않았다



+ 정답이 매우 짧은(20
정도?) 코드로 놀랐다







C# 언어의 사양



* 쿼리 식의 from x in
xs
라고 하는 구문에 대해



o 당초는 foreach(var
item in source) where ...
라고 하는 구문도 검토되고 있었다



o Anders는 쿼리 식에 1
정도 반대하고 있었다



+ 그러나 usability 테스트(테스터에 새로운 구문을 시험해 보는)를 해 보았더니 메소드 방식으로는
아무도 join을 쓸 수 없었다



o SQL로 어순으로 select 보다 from이 먼저 오는 것은 IntelliSense에서 형태 정보를
사용하기 위해




+ 2005
년의 발표 단계에서는 Visual Basic select x in xs 이었다



# VB에서는 당초 select x
쓴 시점에서 in xs까지 자동 생성되었지만 커서가 전후로 격렬하게 움직이는 것이 사용하기 어렵다고
하여 결국 C# 방식으로 변경되었다



# (Anders) 「그러서 말했었잖아」



o from from in xs는 당초 쓸 수 있도록 할 생각이었지만
문법상의 애매함이 발생하는 것을 알게 되어 지원에서 제했다



+
항상 복수의 파서를 쓰고 검증하고 있다



+ yacc 라면 compile
error
가 취급하기 어렵기 때문에 결국 자기가 쓰게 된다



+ Visual C++는 가장
yacc
를 혹사 하고 있는 컴파일러의 하나일지도?




# yacc
의 결과를 yacc에서 처리 하는 것 같은 일을 하고 있다





o var에 의한 형 추론 이야기는
C# 1.0
무렵부터 있었다



o 당시는 JavaScript
오인 당하면 「좋지 않다」라고 생각하고 있었다



o 지금은 상황이 바뀌었다





o 지금은 Ruby가 디자인
미팅에서 화제에 오르는 일도



o (Anders) Ruby
할 수 있는데 어째서 C#에서는 할 수 없어!





o 옛날 아직 해외에서 Ruby
지금처럼 소란을 피우지 않은 무렵 강연자가 Anders에게 Ruby
이야기를 했지만 무시되었다





o 지금 Anders
흥미를 가지고 있는 것



o 메타
프로그래밍





o 언어 설계에서 후회하고 있는 것



o
anonymous method
에서 yield를 사용할 수 없는 것



o void의 취급



o Equals의 취급



o
null
의 취급




+ Ruby

nil
은 훌륭하다



o Tuple를 넣는다고 해도 패턴 매치의 문법을 어떻게 할지 좋은 해결법이
발견되지 않는다







C# 팀의 규모



o C# 2.0 의 시점에서 언어 개발은 10



o designer 3



o
developer 5



o tester 2





o IDE 등을 포함하면 더 증가한다





o 지금은 더 증가하고 있다







C#의 개발 형태



o 디자인 미팅은 주 3, 2시간



* 언어
사양이 정해지면 구현 해 보고 테스트





o C# 1.0이 릴리스 될 무렵에는 이미 Microsoft Research로부터 거의 움직이는 형태의 Generics 구현이
올라 오고 있었다



o 결국 거의 고쳐 써는 바람에 2
정도 걸렸다



o
내용은 거의 같다



o
「심볼명 붙이는 방법이 Research 냄새 」 가 마음에 들지 않는 등등



o
다음에 머지 할 경우에 곤란했다



o 우물쭈물
하고 있으면 Research의 무리는 마음대로 fork하여
스스로 언어 확장을 하기 시작한다





o 소프트웨어라고 하는 것은 역시 개인적인 면이 강하다



o 2 주 정도 묵묵히 작업하여 단번에 체크인 하는 사람도



o 「기계와 같은 놈」이라고 불리고 있다



o 체크인 하자마자 휴가 가는 놈이 있어 곤란하다





o 마음에 드는 곳은 Anders이 코드를 쓰는 일도



o 그렇지만 실제로 제품 코드로 하려면 여러 가지 테스트라든가 대조표가
있어서 거기까지 해 주는 것은 아니다





o 할 수 있으면 C# C# 컴파일러를 고쳐 쓰고 싶지만 그 비용을 정당화 할 수 없기 때문에 아직도 할 수 없다







C#에 대한 요구 사항을 올리는 방법



o 다양한 채널이 있다





o 요망은 일단 PM
정리하여 적당하게 집계하여 Anders에게 제출한다



o 확실하게 reject 되는
것은 여기서 떨어진다



+ 그렇지만 이전 reject
것이 통과하기도 하니까 어렵다



o Anders의 기분이 좋을 것 같은 때에 리스트 올리면 모두 통과한다





o 강연자 자신이 밀어서 채용된 부분도



o
C# 2.0
yield return는 처음 yield만이었다. return이 있는 것이 좋다고 강연자가 추천해서 통과했다.







C#의 호환성



o 어떤 언어 사양이 다음에 어떻게 영향을 주는지 처음부터 간파하는
것은 매우 곤란





o 이번에 강연자가 일본을 방문할 때 「Ruby의 변수 범위에 대해서는 접하지 말아라」라고 조언 되었다





o 한 번 결정한 언어 사양의 변경은 매우 곤란



o 이미
사내에 다수의 C# 프로젝트가 있다




+
현재 Microsoft 사내에서의 신규 프로젝트의 반은 C#



+ 다른 부문에서의 트러블 대응이 부사장 경유로 내려오는 일도




+ C++
컴파일러 팀에는 빌드 시간이 10% 증가한
것만으로 Windows 팀으로부터 「버그」가 올라 온다



# 48
시간 걸리는 빌드가
52
시간이 되면 여러 가지 문제가 일어난다





o foreach 에 대해서 출력하는 IL 코드를 변경한 것만으로 문제가 보고되어 온다



o
IL
해석 툴의 동작이 영향을 받았다









출처 : http://d.hatena.ne.jp/NyaRuRu/20080215/p3






저작자 표시




"

댓글

이 블로그의 인기 게시물

The TRB Forum on Preparing for Automated Vehicles and Shared Mobility brings together public, private, & research organizational partners to share perspectives on the critical issues around #AutomatedVehicles and #SharedMobility. Join us May 13! https://t.co/JdVG3j8grn https://t.co/MTJVp7Eng6

실험동물의 안락사법