2009-07-06 8 views
3

Tiger 컴파일러를 F #으로 작성 중이며 마침내 대상 아키텍처의 결정을 더 이상 연기 할 수없는 시점에 도달했습니다.호랑이 컴파일러의 대상 아키텍처

이것은 첫 번째 컴파일러이지만, 내 마지막 컴파일러는 아닙니다. 그래서 ... 첫 번째 컴파일러에 적합한 대상 아키텍처는 무엇입니까?

CIL (.NET)을 타겟팅하는 방법에 대해 생각해 보았지만 the book 의 중간 코드는 등록 시스템에 더 적합하다고 보입니다.

이 컴파일러를 끝내면 어디로 가야할지 알고 싶습니다. 다른 아키텍처를 타겟팅해야합니까? 컴파일러의 다른 부분에 집중해야합니까? 왜?

+0

나는 XIPS 용 백엔드를 나중에 MIPS 용으로 작성하기로 결정했습니다. 어쨌든 연습을 위해서 전체 컴파일러를 다시 작성하겠습니다. –

답변

3

완전한 개인적 만족을 위해에서 컴파일 된 코드를 실행하고있는 하드웨어를 대상으로 을 대체 할 수 없습니다.

  • MIPS의는 매우 깨끗 명령어 세트이고 SPIM 같은 시뮬레이터를 쉽게 사용할 수 있습니다 그러나, 합리적인 대안이있다. 컴파일러는 간단하고 디버깅 경험은 비교적 행복합니다.

  • 컴파일러를 작성하는 이유에 따라 LLVM 또는 C--과 같은 저급 컴파일러 대상 언어를 사용하는 것이 좋습니다. 하지만 왜 다른 누군가가 당신의 백 엔드를 쓰는 즐거움을 가져야 만할까요?

  • Intel 또는 AMD 하드웨어를 사용하는 경우 SSE 확장을 사용하는 64 비트 명령어 세트 사용을 적극 권장합니다. 가지고 놀 수있는 레지스터의 수는 두 배가 될 것이고 부동 소수점 코드 (있는 경우)는 정상입니다.

1

당신이 CodeDOM을 등의 모든 내장 기능을 사용할 수 있습니다로, CIL은 확실히 좋은 결정 같은 소리 발광 컴파일러를 작성하는 F #을 사용하는 경우

또는 당신이 디자인 할 수있다 자신의 출력 형식을 사용하고 .NET에서 실행되는 VM을 작성하면 출력을 더 쉽게 만들 수 있습니다 (보다 적합한 아키텍처이기 때문에). 디버깅이 더 쉬울 수도 있습니다. 물론 VM을 작성한다는 의미 일지라도 :)

1

x86 어셈블리를 타겟팅하는 것에 대해 생각해 보셨습니까? 몇 년 전에 Tiger 컴파일러를 직접 만들었지 만 어셈블리 에미 터는 쓰기가 어렵지만 전체 프로젝트에서 가장 보람있는 작업 중 하나였습니다. 자신의 작은 VM을 C 언어로 작성하는 것도 좋은 방법이다.

기존 VM을 타겟팅하는 것은 실제 언어이지만 제작 언어를 만드는 경우 연습에서 많은 학습 가능성을 제거합니다.

내가 당신이라면 프로젝트의 다른 최적화 기술을 자세히 살펴볼 것입니다.

+0

저는 실제로 x86 어셈블리와 VM 작성에 대해 생각 해왔습니다. RISC 아키텍처가 첫 번째 시도에서 더 나을지 궁금합니다. 이견있는 사람? –

+1

나의 유일한 RISC 경험은 AVR 어셈블리와 관련이 있으며, 나는 그것을 좋아한다. 재미 있고 깨끗하며 배우기 쉽습니다.ARM 또는 PowerPC에 대해 많이 알지는 못하지만 x86보다 더 좋은 점은 무엇입니까? –

+0

wuub +1. 첫 번째 시도로 RISC를 사용하면 정말 좋습니다. MIPS를 시도하고 시뮬레이션을 위해 SPIM을 사용할 수 있습니다. –