Jaka jest historia kompilatora C?


23

Kiedy mówimy, że „Dennis Ritchie opracował język C”, czy mamy na myśli, że stworzył kompilator (używając „już” rozwiniętego innego języka), który może skompilować kod źródłowy napisany w języku C? jeśli tak, w jakim języku napisał pierwszy kompilator języka C? Rozumiem, że kompilator to program i możemy stworzyć inny kompilator dla języka C przy użyciu obecnie dostępnego kompilatora C. Czy to jest poprawne?

Odpowiedzi:


23

Z wiki :

Ritchie jest najlepiej znany jako twórca języka programowania C i główny programista systemu operacyjnego Unix, a także jako współautor ostatecznej książki na temat C.

Również z wiki :

Pierwszy kompilator C napisany przez Dennisa Ritchiego wykorzystywał rekursywny analizator składni, włączył konkretną wiedzę na temat PDP-11 i polegał na opcjonalnym optymalizatorze specyficznym dla maszyny w celu poprawy generowanego kodu asemblera.

Pierwszy kompilator C również został napisany przez niego w asemblerze.

Ta strona z dzwon-labs odpowiada na większość twoich pytań.


Pierwszy link jest zepsuty.
Mahmoud Hossam

IIRC, C został oparty na wcześniejszym języku o nazwie B, a Unix na wcześniejszym systemie operacyjnym o nazwie Multics. Byłoby oczywiste przypuszczenie, że zostały one użyte do uruchomienia bootstrapu - ale z tego, co przeczytałem, to błędne przypuszczenie. Wczesny rozwój Uniksa był w asemblerze, dopóki C nie przejął, na przykład.
Steve314

2
IIRC, B była uproszczoną wersją BCPL, która była wczesnym językiem programowania systemów. Myślę, że wiele wczesnych prac nad Uniksem zostało opisanych przy użyciu B, ale nie jestem pewien, czy kiedykolwiek istniałby dla niego prawdziwy kompilator Uniksa (być może kompilator krzyżowy działający na czymś innym).
TMN

Ojej . . pisanie kompilatora w asemblerze.
compman

6
@compman W pewnym momencie ktoś musi napisać kompilator w asemblerze - jak inaczej ładujesz się do kompilatora w HLL?
Richard Gadsden

9

Zapoznaj się z lekcją historii: http://www.livinginternet.com/i/iw_unix_c.htm

Kiedy komputer PDP-11 przybył do Bell Labs, Dennis Ritchie zbudował na B, aby stworzyć nowy język o nazwie C, który odziedziczył gust Thompsona do zwięzłej składni i miał potężną mieszankę funkcjonalności na wysokim poziomie i szczegółowych funkcji wymaganych do zaprogramowania działania system. Większość komponentów Uniksa została ostatecznie przepisana w C, a kulminacją było samo jądro w 1973 roku

Może to być również interesujące: http://cm.bell-labs.com/cm/cs/who/dmr/chist.html


1
AFAIK, „wbudowane” jak w „projekcie opartym na projekcie” , a nie jako „skompilowane przy użyciu” .
vartec

8

Dennis Ritchie użył ładowania początkowego . Bootstrapping to prosty pomysł, w którym tworzysz początkowy, prosty kompilator w asemblerze, a następnie używasz tego prostego kompilatora do kompilacji w pełni rozwiniętego kompilatora napisanego w (podzbiorze) języka docelowego. W ten sposób Ritchie stworzył bardzo wczesny kompilator Last1120c .



2

C został zaprojektowany, aby umożliwić przenoszenie Unixa na inne platformy bez konieczności przepisywania całego kodu asemblera dla nowej platformy.

Stąd powszechne powiedzenie, że „C to przenośny asembler”. Odzwierciedla to, że C jest celowo bardzo blisko procesora (od około 1970 roku) na poziomie abstrakcji, a także jest przyczyną, że większość wbudowanego oprogramowania jest napisana w jakimś C.

Tak więc C jest ściśle związany z Uniksem, a ludzie uniksowi napisali pierwszy kompilator C na podstawie wcześniejszych prac, aby zrobić to, czego potrzebowali.

Należy pamiętać, że Kernigan i Richie napisali doskonałą książkę na temat C, która jest prawdopodobnie jedną z najbardziej wpływowych prac referencyjnych na temat języka komputerowego, ponieważ była tak jasna i zwięzła, że ​​większość czytelników mogła uczyć się z niej zaawansowanych tematów, takich jak wskaźniki i rekurencja.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.