가난한 언어가 있다고 해봅시다. - 중복 어셈블리 코드를 많이 생성합니다 (예 : + b와 같이 간단하게 10 개의 라이너 어셈블리를 생성하지만 작업은 수행합니다) 및 다른 C는 최적화 된 어셈블리 코드를 생성하는 언어를 좋아합니다. (a + b와 같은 간단한 코드의 경우 2 줄). 동일한 서브셋을 사용하여이 두 언어로 컴파일러를 만듭니다. 이제 언어에 대한 컴파일러를 얻었고 부트 스트랩에 대한 준비가되었습니다. 부트 스트랩을 할 수는 있지만 전자의 컴파일러가 좋지 않다고 생각하지 않습니까? poort 코드 생성? 또는 모든 레이어에서 그 영향을받을 부분 집합을 정의하는 데 사용되는 첫 번째 언어가 아닙니다. 즉,이 컴파일러에서 생성 된 컴파일러는 무엇입니까?부트 스트랩에 사용되는 첫 번째 언어는 생성 된 최종 코드에서 항상 스탬핑/영향을 받습니까?
답변
갓 부팅 스트랩 된 컴파일러는 C 컴파일러를 이길 수 없습니다. 그러나 그 누구도 그런 식으로 머물러야한다고 말한 사람은 없습니다. (현대 C 컴파일러를이기는 데 어려움을 겪을 것이지만, 30 년 동안 정제 된 휴대용 어셈블리 언어의 컴파일러와 경쟁하고 있다고 가정 해 봅시다.) 귀하의 언어에 따라 부트 스트랩 된 컴파일러를 확장하는 것이 C로 작성된 것을 확장하는 것보다 훨씬 쉽습니다. 이렇게하면 C에서 구현하기가 더 어려워지는 많은 최적화 단계가 허용되어 점차적으로 컴파일러의 성능이 향상됩니다 (자체 호스트, 즉 자체 컴파일) 및 컴파일 한 다른 모든 프로그램의 성능.
이러한 차이점은 우리에게 또 다른 중요한 점을 안겨줍니다. 완전히 불합리하지 않는 한 컴파일러의 성능은 거의 관련이 없습니다. 생성 된 코드의 성능은 일반적으로 훨씬 더 중요하며 컴파일러의 코드 생성기에 달려 있으며 생성기를 컴파일하는 데 사용되는 컴파일러의 코드 생성기에는 의존하지 않습니다.
세 번째, LLVM과 같은 프로젝트에서 괜찮은 어셈블리 코드를 생성하는 것이 더 이상 어렵지 않게되었습니다. 괜찮은 LLVM 코드를 생성하더라도 리던던시가 포함되어 있어도 LLVM은 및을 처리 할 수있는 여러 가지 최적화 단계를 통해 더 나은 실제 어셈블리 코드 및을 할당하면 합리적인 기간 내에 직접 할 수있는 것보다 훨씬 효율적으로 레지스터를 할당 할 수 있습니다.
일단 컴파일러의 출력이 부트 스트랩되면 부트 스트랩 언어에 따라 어떻게 달라 집니까? 자신 만의 코드 생성을 수행한다면, 그 대답은 전혀 없어야합니다. 물론 컴파일러에는 최적의 코드가 없을 수도 있지만 직접 컴파일하여 해결할 수 있습니다.
내가 생각할 수있는 유일한 점은 부트 스트랩 된 컴파일러의 한 세대에서 다음 세대로 전달되는 상수 값입니다. 컴파일러가 생성하는 코드의 종류에 상관없이 "1"은 "1"과 같습니다.
상수에 대한 흥미로운 측면 : C의 이스케이프 문자. 나는 부트 스트랩을 사용하여 C 컴파일러를 작성한 나는 코드를 같이 볼 때 (I 쉽게 즐겁게 해요) 즐겁게되었습니다
// Decode escape characters.
if (ch == '\\') {
ch = nextchar();
switch (ch) {
case 'n':
ch = '\n';
break;
...
어디 \ n을 '의 초기 값은 어디에서 왔는가? 어떤 사람은 어딘가에서 컴파일러에게 '\ n'이 10이라는 값을 말해야 만했습니다. ;-)
- 1. ASP.NET의 부트 스트랩에 IHttpModule이로드되지 않습니다.
- 2. Db_Table 모델을 부트 스트랩에 사용할 수 있습니까?
- 3. 연결 DbTable을 부트 스트랩에 넣지 못했습니다.
- 4. 부트 스트랩에 대한 명령 줄 인수 리디렉션
- 5. 첫 번째 '취미'프로그래밍 언어는 무엇 이었습니까?
- 6. EF 코드에서 ObjectContext 빌드 첫 번째 CTP4
- 7. GridView 페이징은 항상 첫 번째 페이지를 보여줍니다.
- 8. Listview의 첫 번째 항목은 항상 선택됩니다.
- 9. RadioButtonList SelectedItem 항상 첫 번째 하나
- 10. C# AcroPDF는 항상 첫 번째 프린터에서 인쇄합니다.
- 11. 폼의 컨트롤을 항상 첫 번째 컨트롤로 반복
- 12. 항상 첫 번째 양식에서 값을 가져옵니다. 뭐가 문제 야?
- 13. EF 코드 첫 번째 최종 릴리스의 판별 자 열
- 14. EF 코드 첫 번째 스키마 생성 문제
- 15. 객관적인 프로젝트에서 파일의 첫 번째 생성
- 16. 생성 항상 DB2에서 생성 된 열
- 17. 레일 : 동적으로 생성 된 경로는 최종
- 18. Silverlight ListBox는 선택시 항상 첫 번째 항목을 강조 표시합니다.
- 19. 생성 된 WinForm 코드에서 누락 된 특성
- 20. 첫 번째
- 21. 부트 스트랩에서 생성 된 오류를 ErrorController로 전달하려면 어떻게합니까?
- 22. Sinatra on Passenger는 첫 번째 시도에서 항상 실패합니다.
- 23. EF 코드 첫 번째 DbContext 클래스에서 SQL CE 데이터베이스 생성
- 24. 오늘 AI 연구에서 사용되는 언어는 무엇입니까?
- 25. 멀티 미디어 리모컨에 사용되는 프로그래밍 언어는 무엇입니까?
- 26. 서버는 보낸 순서대로 AJAX 요청을 항상 받습니까?
- 27. 인덱스가 항상 사용되는 알고하는 방법
- 28. QTreeView 하위 노드는 항상 첫 번째 최상위 노드에 대한 포인터입니다
- 29. 확장 가능 목록보기에서 첫 번째 자식을 설정하는 방법 항상 선택
- 30. top 명령의 첫 번째 반복은 항상 동일한 결과를 반환합니다.
자세한 내용을 알고있는 한 (내가 의도 한 말장난!) 말할 수는 없지만 직관적으로 대답은 나에게 의미가 있습니다. :) – Nishant