2010-06-04 2 views
10

Anders Hejlsberg의 .NET 4.0 프레젠테이션에서 그는 NET 5.0 ("또는 일부 향후 릴리스")에서 "서비스로 컴파일러"모델을 연구 중입니다.컴파일러가 서비스로 제공하는 이점

Anders Hejlsberg의 상태 : [소스] "우리는 컴파일러를 열어서 코드 조각을 컴파일하고 표현 트리 및/또는 일리노이를 호출 할 수있는 API가되기를 원합니다. 대화 형 프롬프트, 사용자 작성 리팩터링 및 C#이 거의없는 섬 고유의 언어와 같은 시나리오 전체가 포함됩니다. "

실제로 유용 할 수있는 실제 사례를 찾기 위해 고심하고 있습니다. 여기서 주요 개념을 놓치고 있습니까? 아니면이 언어에 실제로 도움이 될 것입니까?

[1] : 서비스

+2

재귀자가 수정 유전자 알고리즘은 어떻습니까? 방금 주위에 유행어를 던 졌나요? 아마도. 아니면 Skynet에 한 걸음 더 다가 갈 수도 있습니다 .... – Randolpho

답변

4

일부 문제의 경우 실제 문제를 해결할 프로그램을 생성 할 수있는 프로그램을 작성하는 것이 더 쉽습니다. 이것이 특히 유용한 곳 중 하나는 컴파일러 용 파서를 작성하는 것입니다.

다른 경우에는 특정 데이터 형식으로 작업 할 때 최적의 성능을 제공 할 수 있도록 코드를 생성 할 수 있습니다. 즉, 런타임에 해당 메타 데이터를 반영하여 방금 배운 속성에 관한 것입니다. 내가 줄 수있는 한 가지 예는 내 Modelshredder 프로젝트입니다. 기본적으로 개체의 모든 필드와 속성을 가져 와서 해당 값을 개체 배열에 저장합니다.

이 문제에 대한 나의 첫 번째 접근 방식은 Reflection.Emit을 사용하는 손으로 코딩 된 MSIL 주입이었다. 두 번째 접근 방식은 좀 더 다이내믹하고 Expression Trees에 의존합니다.이 트리는 런타임에 효과적으로 구성되고 컴파일되어 MSIL 코딩 된 코드와 동일한 기능을 제공합니다. MoreLinq 트렁크에서 실현 된 것을 볼 수 있습니다 (Modelshredder 사이트를 보시면 링크가 있습니다). 컴파일러를 서비스로 사용하면 실제로 추상화 수준을 올리고 C# 코드를 내 보낸 다음 MSIL로 컴파일 할 수 있습니다.

도메인 특정 언어에 대한 사례가 이미 만들어졌으며 C#과 같은 명령형 언어가 "명령 줄"시나리오에는 적합하지 않지만 더 큰 스크립트보다는 적합하다고 생각합니다. 이라고하는 F # DSL을 기반으로하는 깔끔한 make 시스템이 있습니다.이 시스템은 많은 컴파일러 개념을 서비스로 사용합니다. 비슷한 개념이 Visual Studio에서 F # Interactive Window (이와 같은 방식으로?)에 사용됩니다.

4

http://www.simple-talk.com/opinion/geek-of-the-week/anders-hejlsberg-geek-of-the-week/ 컴파일러이 게임에 대한 사용자 확장을위한 유용 할 수있는 방법의 실제 예. 대부분의 현대 게임은 스크립팅 언어를 통한 사용자 확장 성을 비교적 느리게 만들 수 있습니다. 개발 플랫폼을 필요로하는 컴파일 된 DLL (및이를 사용하는 지식)을 통해 가능합니다. 이를 통해 사용자는 C#을 사용하여 게임에 확장 기능을 작성할 수 있습니다.이 기능은 런타임에 게임에서 컴파일되며 사용자가 직접 컴파일하지 않아도됩니다. 또한 약간의 변화가있을 때마다 게임을 다시 시작할 필요없이 게임 내 콘솔 창에 C# 코드를 입력하여 새로운 아이디어를 테스트 할 수 있습니다. 현재 이러한 유형의 작업은 내장 된 인터프리터 스크립팅 언어에서만 가능합니다.

+1

게임뿐만 아니라. 많은 비즈니스 로직이 원시 C# 코드로 포함될 수 있으며 원하는 경우 런타임에 변경할 수 있어야합니다. –

2

또 다른 예가 복사 방지라고 생각합니다. 프로그램에 CPU ID를 연결하기 위해 설치시 생성되는 고유 한 코드를 컴퓨터에 가질 수 있습니다.

일련 번호를 세금 계산의 매개 변수로 사용한다고 가정 해 보겠습니다. 프로그램의 사본은하기 쉽고 전혀 쓸모가 없습니다.

0

또한 Linqpad와 유사한 기능을 가진 프로그램을 작성하는 것을 매우 쉽게 만듭니다.

데이터베이스에 저장된 소스 코드 청크를 사용하고 구성을 기반으로 특정 데이터를 호출 할 수있는 다른 사용 사례가 Workflow Foundation을 지금 호출 할 수있는 것과 유사합니다. 이는 CRM, ERP 및 기타 데이터웨어 하우징 응용 프로그램의 워크 플로 자동화에서 유용 할 수 있습니다 (악용 될 경우 서사적 인 반대자가 될 수도 있음).