문제

편집 된 언어를 만들고 싶습니다. 나는 현재 백엔드를 평가하고 있습니다. 지금까지 나는 실행 속도, 컴파일 및 TCC라는 작고 사용하기 쉬운 컴파일러로 인해 C를보고 있습니다.

여기에서 중간 언어로 사용하는 것에 대한 토론을 읽은 후, 나는 쓰레기 수집과 호환되는 방법과 예외를 처리하는 방법에 대해 생각하려고 노력하고 있습니다. 지금까지 나는 둘 다를 해결할 수 있다고 생각하지만 많은 오버 헤드가 있습니다.

다음은 다른 가능한 백엔드에 대한 나의 생각 중 일부입니다.

  1. 어셈블리 : 프로그램 할 수없고 프로그래밍 할 수있는 총 통증.
  2. .NET : 정말 느립니다. Ironpython 및 Boo에서 1+2를 평가하는 데 5 초, 시작하는 데 5 초, 5 초. 큰 라이브러리 없이는 실행할 수 없습니다.
  3. JVM : 조금 느립니다. 이진 라이브러리에 액세스 할 수 없습니다. 큰 라이브러리 없이는 실행할 수 없습니다.
  4. LLVM : Windows 지원이 없습니다. 컴파일 된 실행 가능한 크기가 16MB+라고 들었습니다.
  5. C- : 저개발 된 것 같습니다.
  6. C ++ : 아마도. 내가 묶을 수있는 멋진 작은 무료를 찾을 수 없습니다.

누구든지 내 마음을 바꾸 거나이 목록에 추가 할 수 있습니까?

편집하다

최근에 LLVM을 실험 해 왔습니다. 나는 그들이 사전 컴파일 된 바이너리를 가지고 있고 기본 조립으로 컴파일 할 수 있음을 알았습니다.

http://www.antlr.org/wiki/display/cs652/generating +machine+executable+binaries+With+llvm

단계는 다음과 같습니다.

  1. LLVM 어셈블리에서 LLVM-AS를 실행하여 LLVM 바이트 코드 파일을 산출합니다.
  2. LLVM Bytecode 파일에서 LLC를 실행하여 어셈블리 파일을 생성하십시오.
  3. 어셈블리 파일에서 어셈블러를 실행하여 객체 파일을 생성하십시오. (또는 외부에서 설치된 C 컴파일러에 의존하는 것으로 보이는 LLVM-LD를 실행)
  4. GCC 등으로 실행 파일로 컴파일하십시오.
도움이 되었습니까?

해결책

프론트 엔드 작성을 고려 했습니까? GCC? 나는 완전성을 위해 이것을 언급합니다. 백엔드 인터페이스가 매우 복잡하고 코드베이스는 거대하고 이해하기 어렵다는 것을 알고 있습니다.

반면, GCC는 많은 전문 프로그램자가 작업하는 성숙한 제품입니다. 최소한 모든 대안의 가장 확실한 기초를 제공 할 것입니다.

개인적으로, 나는 LLVM (흥미로운 아키텍처) 또는 .NET 's IL : 매우 사용하기 쉽고 훌륭한 도구 지원을 선호합니다.반사기, 남자 이름, 반사 마지막으로, .NET 반사 API)와 두 가지 매우 효율적인 구현 (즉, Microsoft의 정식 구현 및 모노).

그러나 나는 건축물에 대한 전문 지식을 주장 할 수 없으므로 소금 한 덩어리 로이 답을 가져 가십시오.

다른 팁

이 경우 LLVM은 아마도 더 나은 선택 일 것입니다.

LLVM에는 Windows 지원이 있으며 컴파일하는 데 시간이 걸립니다.

C ++는 당신에게 많은 것을주지 않을 것입니다. 대신 C를 사용하십시오. 그러나 웹에서 언어를 사용하기를 원한다면 .NET 또는 Java를 사용하려면로드가 느리게하지만 C만큼 빠릅니다.

을 위한 Smarteiffel 우리는 c를 백엔드로 사용합니다.

TCC는 최종 릴리스에 대한 것이 아니지만 개발을위한 아주 좋은 옵션입니다 (생성 된 객체는 GCC -O0과 동일합니다)

목록에 추가 할 또 다른 것 : Slava는 최근 SmallTalk를 구현했습니다. 백엔드 인자. 나는 이것을 직접 시도하지 않았지만, 하위 레벨의 크기/성능과 비슷한 상위 레벨의 기능을 더 많이 제공 할 것임을 느끼고 있습니다.

TCC가 최선의 선택입니다. 휴대용이며 라이브러리가 있으므로 LIBTCC라고하는 백엔드로 쉽게 사용할 수 있습니다. 실행 파일은 GCC보다 작고 Ansi C입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top