Lịch sử của trình biên dịch C là gì?


23

Khi chúng tôi nói rằng "Dennis Ritchie đã phát triển ngôn ngữ C", chúng tôi có nghĩa là anh ta đã tạo ra một trình biên dịch (sử dụng một ngôn ngữ khác đã được phát triển) có thể biên dịch mã nguồn được viết bằng ngôn ngữ C? nếu có, ngôn ngữ anh ấy đã sử dụng để viết trình biên dịch C đầu tiên là gì? Tôi hiểu trình biên dịch là một chương trình và chúng ta có thể tạo một trình biên dịch khác cho ngôn ngữ C bằng cách sử dụng trình biên dịch C hiện có. Đúng không?

Câu trả lời:


23

Từ wiki :

Ritchie được biết đến như là người tạo ra ngôn ngữ lập trình C và là nhà phát triển chính của hệ điều hành Unix và là đồng tác giả của cuốn sách dứt khoát về C.

Cũng từ wiki :

Trình biên dịch C đầu tiên được viết bởi Dennis Ritchie đã sử dụng trình phân tích cú pháp gốc đệ quy, kết hợp kiến ​​thức cụ thể về PDP-11 và dựa vào trình tối ưu hóa cụ thể của máy tùy chọn để cải thiện mã ngôn ngữ lắp ráp mà nó tạo ra.

Trình biên dịch C đầu tiên cũng được ông viết, lắp ráp.

Trang này từ phòng thí nghiệm chuông trả lời hầu hết các câu hỏi của bạn.


Liên kết đầu tiên bị hỏng.
Mahmoud Hossam

IIRC, C dựa trên một ngôn ngữ trước đó gọi là B và Unix dựa trên một hệ điều hành trước đó có tên là Multics. Đây có thể là một phỏng đoán rõ ràng rằng những thứ này được sử dụng để phát triển bootstrap - nhưng từ những gì tôi đã đọc, đó là một dự đoán sai . Sự phát triển ban đầu của Unix là ở trình biên dịch chương trình, cho đến khi C tiếp quản, chẳng hạn.
Steve314

2
IIRC, B là phiên bản rút gọn của BCPL, là ngôn ngữ lập trình hệ thống ban đầu. Tôi nghĩ rằng rất nhiều công việc Unix ban đầu được mô tả bằng B, nhưng tôi không chắc đã có trình biên dịch Unix thực sự cho nó (có thể là trình biên dịch chéo chạy trên thứ khác).
TMN

Ôi. . . viết một trình biên dịch bằng ngôn ngữ lắp ráp.
compman

6
@compman Tại một số điểm, một người nào đó phải viết một trình biên dịch trong assembly - làm thế nào khác để bạn khởi động theo cách của bạn đến một trình biên dịch trong HLL?
Richard Gadsden

9

Kiểm tra điều này cho một bài học lịch sử: http://www.livingiNET.com/i/iw_unix_c.htm

Khi máy tính PDP-11 đến Bell Labs, Dennis Ritchie đã xây dựng trên B để tạo ra một ngôn ngữ mới gọi là C kế thừa hương vị của cú pháp súc tích và có sự pha trộn mạnh mẽ của chức năng cấp cao và các tính năng chi tiết cần có để lập trình một hoạt động hệ thống. Hầu hết các thành phần của Unix cuối cùng đã được viết lại bằng C, đỉnh cao là chính hạt nhân vào năm 1973

Ngoài ra, điều này có thể thú vị: http://cm.bell-labs.com/cm/cs/who/dmr/chist.html


1
AFAIK, "được xây dựng trên" như trong "thiết kế dựa trên thiết kế của" , không phải là "được biên dịch bằng cách sử dụng" .
vartec

8

Dennis Ritchie đã sử dụng bootstrapping . Bootstrapping là ý tưởng đơn giản, nơi bạn phát triển trình biên dịch đơn giản ban đầu, sau đó bạn sử dụng trình biên dịch đơn giản này để biên dịch trình biên dịch hoàn chỉnh của bạn được viết bằng (một tập hợp con) ngôn ngữ đích của bạn. Đây là cách Ritchie tạo trình biên dịch Last1120c rất sớm .


2

Bài viết này sẽ trả lời câu hỏi của bạn:

http://www.faqs.org/docs/artu/c_evolution.html

Lịch sử của C gắn liền với ngôn ngữ B, mà Ken Thompson đã phát triển một thông dịch viên. Ritchie đã sử dụng nó cho giai đoạn đầu tiên phát triển C.


2

C được thiết kế để cho phép chuyển Unix sang các nền tảng khác mà không phải viết lại tất cả mã lắp ráp cho nền tảng mới.

Do đó, người ta thường nói rằng "C là trình biên dịch mã di động". Điều này phản ánh rằng C cố ý rất gần với CPU (từ khoảng năm 1970) ở mức độ trừu tượng và cũng là lý do mà hầu hết các phần mềm nhúng được viết bằng một loại C.

Vì vậy, C được kết nối mật thiết với Unix và những người Unix đã viết trình biên dịch C đầu tiên dựa trên công việc trước đó để làm những gì họ cần.

Xin lưu ý rằng Kernigan và Richie đã viết một cuốn sách tuyệt vời về C có lẽ là một trong những tài liệu tham khảo có ảnh hưởng nhất trên ngôn ngữ máy tính, vì nó rõ ràng và súc tích đến mức hầu hết người đọc có thể học các chủ đề nâng cao như con trỏ và đệ quy từ nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.