2011-04-14 37 views
71

Trình biên dịch C gcc có được viết bằng C không? Hay là nó được viết trong hội? Nếu trình biên dịch được viết bằng C, thì trình biên dịch được sử dụng để biên dịch mã trình biên dịch là gì?Trình biên dịch gcc C có được viết bằng C không?

+11

Có nó là (chủ yếu). Tất nhiên, người ta cần một trình biên dịch C để biên dịch C như vậy, như với hầu hết các trình biên dịch, có một loạt các giai đoạn "boot-strap". Ý tưởng chung được đề cập tại [Cài đặt GCC: Tòa nhà] (http://gcc.gnu.org/install/build.html) và [Cài đặt GCC - LFS] (http://www.linuxfromscratch.org/lfs/ xem/phát triển/chương05/gcc-pass2.html). –

+0

@mu: đó là bước tiếp theo. – euphoria83

+2

Các máy trạm thương hiệu khác nhau trong những năm 1980 và đầu thập niên 90 có môi trường giống như Unix của họ với trình biên dịch c, các công cụ, vv ... tất cả đều khác nhau một chút.Với nguồn GCC, bạn có thể thực hiện một biên dịch ban đầu của gcc trên một trong các nền tảng này, và sau đó biên dịch gcc với chính nó một vài lần để kiểm tra nhiều hơn hoặc ít hơn cho một điểm cố định. – Paul

Trả lời

82

Lịch sử cụ thể cho gcc được cung cấp tại GCC Wiki. Điểm tổng quát hơn là các trình biên dịch thường được biên dịch ban đầu với một số trình biên dịch khác cho đến khi chúng đủ mạnh để biên dịch chúng. Ngoài ra, có thể viết một trình biên dịch cơ bản có thể xử lý một tập hợp con các tính năng của bạn trong trình biên dịch và xây dựng từ đó. Nhưng một lần nữa, điều này gần như không bao giờ cần thiết nữa. Có rất nhiều trình biên dịch có sẵn, bằng nhiều ngôn ngữ khác nhau. Ngay cả khi Stephen Johnson đã viết pcc (một trong những trình biên dịch C đầu tiên), đã có các trình biên dịch cho B có sẵn, cùng với nhiều ngôn ngữ khác. gcc đã có một số trình biên dịch để chọn từ để xây dựng nó ban đầu, và RMS nói rằng ông đã sử dụng trình biên dịch Pastel ít nhất trong quá trình phát triển ban đầu của mình.

Hãy nhớ rằng, không có yêu cầu trình biên dịch C được viết bằng C. Bạn có thể viết nó trong Perl nếu bạn muốn. Không có yêu cầu rằng một trình biên dịch cho một nền tảng nhất định ban đầu được viết trên nền tảng đó (các hệ thống nhúng hầu như luôn được biên dịch trên một số hệ thống khác). Vì vậy, có rất nhiều cách để có được cho mình bootstrapped.

Câu hỏi này có một số tinh chỉnh thú vị liên quan đến trường hợp đầu tiên của việc khởi động trình biên dịch. Nếu bạn rất thông minh, bạn có thể sử dụng bootstrap đó để làm something incredible, brilliant and terrifying.

+10

+1 cho liên kết Ritchie, đó luôn là một bài đọc hay. :) – unwind

+0

Woah, bài viết thứ hai mà bạn liên kết là vô cùng thông minh. – Ponkadoodle

+4

Bây giờ, họ sử dụng một số [C++ trong gcc] (http://lwn.net/Articles/542457/). –

49

Ban đầu nó được viết bằng một số ngôn ngữ lắp ráp sau đó nó bắt đầu thức ăn cho chó.

+15

+1 Yêu thích cách nói. –

+1

Tôi đã không thấy bất kỳ tài liệu tham khảo để RMS bằng cách sử dụng lắp ráp cho bản gốc bootstrap. Nguồn của bạn là gì? Ông đã có một số trình biên dịch khác để bootstrap với, do đó, có vẻ như rất nhiều công việc. –

+14

Tôi mặc dù thuật ngữ này là bootstrap. –

3

Trong khi điều này rõ ràng chỉ là một chỉ báo rất thô, tôi thấy điều này nhanh chóng danh sách trên thư mục gcc-5.1.0-src/gcc/ thú vị. Thư mục này chứa các nguồn chính của GCC (ngoại trừ các thư viện thời gian chạy).

Sau đây là các đầu tập tin đếm (trên 100) nhóm bằng cách mở rộng bị chi phối bởi các file C và C++.

112 .opt 
    118 .def 
    140 .cc 
    185 .x 
    250 .exp 
    353 .md 
    366 .mm 
    414 .f 
    430 .f03 
    521 .m 
    625 .a 
    1082 .go 
    1371 .h 
    1602 .ads 
    1655 .adb 
    1828 .ada 
    3860 .f90 
    11231 .C  // C++ 
    23811 .c  // C 

Xin lưu ý rằng hiện nay GCC là bộ sưu tập trình biên dịch GNU, không chỉ trình biên dịch GNU C.

6,3 thư mục con gcc

Thư mục gcc chứa nhiều tập tin là một phần trong những nguồn C của GCC, các file khác được sử dụng như một phần của cấu hình và xây dựng quá trình, và thư mục con bao gồm tài liệu và một bài kiểm tra.

tham khảo:https://gcc.gnu.org/onlinedocs/gccint/gcc-Directory.html

Các vấn đề liên quan