답변

6

"서비스 제공자로서의 컴파일러"는 컴파일러를 개별적인 것으로 분해하는 것을 의미합니다.

소스 코드가 한쪽 끝으로 들어가고 컴파일 된 어셈블리가 나오는 큰 모노 리식 블랙 박스가있는 대신 입력 된 출력이있는 더 작은 (검정색) 상자가 많이 있습니다.

예를 들어, 소스 코드를 하나의 상자에 입력하고 다른 구문 상자에서 추상 구문 트리 (AST)를 가져올 수 있습니다. 그런 다음이 트리를 옵티마이 저가 제공하기 전에 조작 할 수 있습니다.이 중에서 컴파일러에 공급 될 수있는 코드의 다른 표현이 나오고 실행 가능 코드가 출력됩니다.

미래의 .NET의 "컴파일러로서의 서비스"부분에 대한 정확한 계획에 대해 많이 알지 못하기 때문에 위의 내용은 단순한 추측이지만 그 방법을 통해 나는 가능성을 알 수 있습니다.

리팩토링은 AST에서 작동 할 수 있으며 매핑 및 변환을 통해 AST에서 원래 소스 코드로 돌아갈 수있는 방법이 있다고 가정합니다 (매핑은 AST에서 노드를 가져 와서 요청할 수 있음을 의미합니다). "소스 코드의 어느 부분에서이 노드가"에 해당하는지, 그리고 변환은 "이 AST가 현재 수정 한 이후에 내가 나타내는 소스 코드를 제공 할 수 있습니까?"라는 의미입니다.

예를 들어, JetBrains와 DevExpress 모두를보고 Microsoft의 리팩토링 도구를 만들고 리팩토링을위한 코드를 읽고 선택하는 코드 작성에 대한 자신의 노력을 평가해야합니다.

+0

감사합니다. @Martinho, 나는 거기에 기억하지 못했던 용어가 있다는 것을 알고있었습니다. –

1

내 회사 (시맨틱 디자인)는 DMS Software Reengineering Toolkit이라는 "서비스로 컴파일러"를 제공합니다.

DMS는 컴퓨터 (모든 공식적인) 언어와 관련하여 일반적입니다. 언어 설명 (DMS에는 C++, C#, Java, PHP, COBOL 및 기타 여러 언어에 대한 견고한 버전이 있음)이 있으면 DMS는 원본을 AST로 구문 분석하고 원본 주석을 포함하여 AST에서 유효한 원본을 다시 생성 할 수 있습니다.

DMS는 구성 가능한 속성 평가, 흐름 분석, 반복 솔버, 사용/분석 분석, 로컬 및 글로벌 콜 그래프 구성, 글로벌 포인트 - 투 애니레이션 등 다양한 분석 엔진을 제공합니다. AST는 절차 코드 (고전적인 컴파일러 트리 해킹) 또는 소스 - 소스 변환에 의해 수정 될 수 있습니다. 변형은 한 언어의 AST를 동일한 언어 ("최적화") 또는 다른 언어 ("구체화/번역")로 매핑 할 수 있습니다. 이것은 매우 성숙한 인프라로 15 년 이상의 지속적인 엔지니어링이 뒷받침됩니다.

DMS를 사용하여 원하는 입출력 언어 집합을 선택/정의하고 컴파일러 지향 DSL (원하는 도구를 만들기 위해 DMS로 컴파일 됨)로 작성된 사용자 정의 코드를 작성하여 DMS 기계의 다양한 비트를 호출합니다 당신의 목적을 달성하십시오.

DMS 자동차 공장 조립 세포를 실행 재 -architecting 도구, 코드 생성 도구를 언어 마이그레이션 도구 (B-2 Stealth Bomber mission software migration 참조), 대규모 C++를 구축하는 데 사용, 많은 고전적인 소프트웨어 엔지니어링 툴 (테스트 커버리지, 프로파일되었습니다 , 복제 탐지, 스마트 differencers).리팩토링 도구를위한 자연스러운 토대입니다. 우리는 다음과 같은 작업을하고 있습니다 : -

+0

당신은 스스로 그것을 검증했기 때문에 물어봐야합니다 : 공학이란 무엇입니까? 경과 시간에서와 마찬가지로? – sehe

+0

그건 틀린 표현이지만 그렇다고 15 년이 넘은 공학이 있습니다. 나는이 단어를 "연속" –

4

Roslyn CTP는 코드 무언가와 관련이있는 경우 "빠른 수정"이 될 수있는 용어에 대한 "코드 동작"을 구현하기 위해 walkthrough을 포함합니다 또는 문맥 상 제공되는 경우 리팩터링을 사용합니다.

또한 Roslyn CTP를 설치하면 Visual Studio에서 볼 수있는 CodeRefactoring 프로젝트 템플릿을 살펴보십시오.