Tại sao C vẫn thuộc danh mục Ngôn ngữ cấp cao? [đóng cửa]


12

Nhiều sách giáo khoa về ngôn ngữ lập trình C nói rằng C là ngôn ngữ lập trình cấp cao, nhưng nhiều người dạy kèm trên mạng nói rằng C cũng là ngôn ngữ lập trình cấp trung. Tại sao nó lại như vậy?


3
đề nghị đọc: Thảo luận về $ {blog}
gnat

6
Tôi đồng cảm với sự nhầm lẫn của bạn. Đây là loại phân loại sẽ khiến tôi thấy khó khăn trong bài kiểm tra vì ngay cả câu trả lời "sai" cũng đúng. Xin cầu nguyện bạn không bao giờ có câu hỏi này như một câu hỏi thi đúng / sai hoặc trắc nghiệm. Nếu bạn làm thế, hãy trả lời dựa trên những gì sách giáo khoa đã nói, không phải những gì bạn cảm thấy là chính xác (tôi cảm thấy xấu xa khuyên bạn nên đi ngược lại với ruột của bạn).
Brandon

1
Trong lịch sử, 'ngôn ngữ cao cấp' là những ngôn ngữ, không giống như ngôn ngữ lắp ráp, cho phép lập trình viên trừu tượng hóa từ máy cụ thể và viết mã theo cách có nhiều vấn đề hơn. Fortran và Cobol là 'cấp cao' vì điều đó trong những ngày đầu. C chỉ là một tấm màn mỏng phía trên những thứ dành riêng cho máy móc, nhưng mục đích của nó là để di động, không đặc thù. Vì vậy, vào năm 1960, tiêu chuẩn C là cấp cao. So với C ++ 14 hoặc Haskell hoặc OCaml hoặc Rust, C là cấp độ không quá cao, tất nhiên.
9000

Hầu hết các "ngôn ngữ" cấp cao hiện đại "" này thực sự chỉ là ngôn ngữ kịch bản. Sự khác biệt là nếu nó được biên dịch hoặc giải thích.
MarcusJ

Asm là cấp cao. Sự trừu tượng được cung cấp bởi asm trên phần cứng là rất lớn.
tò mò

Câu trả lời:


34

Trong lịch sử, mọi thứ trừu tượng về mã lắp ráp được gọi là cấp cao. C chắc chắn làm điều đó. Định nghĩa này cũng tương đối rõ ràng, trái ngược với những gì sau đây.

Theo thời gian, chúng tôi đã tạo ra ngày càng nhiều ngôn ngữ lập trình và phát minh ra ngày càng nhiều trừu tượng và công cụ. So với, nói, Python, ngôn ngữ C là nguyên thủy tích cực về sự phong phú về ngữ nghĩa và mức độ trừu tượng trên phần cứng. Với ý nghĩ đó, nhiều người cảm thấy sai lầm khi gọi C cấp cao, khi có rất nhiều ngôn ngữ cao hơn nhiều so với phần cứng.

Vì vậy, bây giờ "cấp cao" thường có nghĩa là "trừu tượng hóa nhiều so với phần cứng" và "cấp thấp" có nghĩa là "trừu tượng hóa ít". Đây là định nghĩa gia sư của bạn sử dụng. Mặc dù vậy, không phải ai cũng đồng ý và các văn bản cũ không sử dụng thuật ngữ mới một cách kỳ diệu, vì vậy bạn vẫn thấy cách sử dụng cũ của "cấp cao" (theo đó C là cấp cao) trôi nổi. Hãy nhớ rằng nhiều cuốn sách C hay về cơ bản là những phiên bản sách mới hơn được phát hành hai mươi năm trước.


Để một cái gì đó được coi là một ngôn ngữ lập trình cấp thấp thích hợp, nó phải cho phép một lập trình viên dễ dàng hoạt động ở cùng mức độ trừu tượng như phần cứng cơ bản. Mặc dù Tiêu chuẩn C sẽ cho phép các triển khai hành xử theo kiểu như vậy, nhưng không có sự phân biệt chính thức được công nhận giữa các triển khai hoạt động ở mức độ trừu tượng đó so với các triển khai không.
supercat

12

Nó là một ngôn ngữ cấp cao hơn mã máy (lắp ráp), đó là quan điểm mà sách và hướng dẫn lập trình C đến từ.

Về mặt đó, nó là một ngôn ngữ lập trình cấp cao.

Tuy nhiên, nó vẫn rất gần với phần cứng - nhiều hơn so với các ngôn ngữ khác, hiện đại hơn (Java, C # và như vậy) - khi nhìn từ quan điểm này, nó là ngôn ngữ lập trình cấp trung.


1
Vậy thì tại sao chúng ta không thể nói rõ ràng rằng C là ngôn ngữ lập trình cấp trung. Trong sách giáo khoa chúng ta không tìm thấy điều đó.
CodeIt

5
@manutd - đó là một câu hỏi cho các tác giả sách;) - nhưng đó là vấn đề. Theo quan điểm của họ, C là một ngôn ngữ cấp cao. Đó là những gì họ đối phó. Khái niệm "ngôn ngữ cấp cao" là mờ nhạt - không có định nghĩa duy nhất nào được tất cả đồng ý.
Oded

Thật không may, đồng ý ý kiến ​​trong một cộng đồng không phải là cách xác định hoạt động mặc dù. Đó là người sáng tạo và khái niệm của nó ở cấp độ cao hơn ngôn ngữ lắp ráp của bộ xử lý - đây là dòng xác định. Đây là những gì định nghĩa nó là cấp cao. Bất kỳ cuốn sách bạn chọn về khoa học máy tính sẽ luôn xác định nó theo cách này. Người dạy kèm có thể không và ý kiến ​​của mọi người có thể không, nhưng khoa học thực tế về cách thức máy tính hoạt động và cách nó được xác định trong khoa học máy tính và bộ xử lý là rất rõ ràng.
Ryan Rentfro

C # cho phép các lập trình viên truy cập vào một phạm vi bộ nhớ dưới dạng một chuỗi các giá trị 64 bit, 32 bit, 16 bit hoặc 8 bit một cách thuận tiện; ví dụ, nếu bộ nhớ giữ các pixel 16 bit, mã có thể xử lý các pixel riêng lẻ hoặc theo nhóm 2 hoặc 4, tùy thuộc vào những gì tốt nhất cho thuật toán. C như được định nghĩa bởi Tiêu chuẩn không định nghĩa một phương tiện thực tế mà theo đó các lập trình viên có thể yêu cầu ngữ nghĩa tương tự. Dĩ nhiên, nhiều phương ngữ C có cấp độ thấp hơn C #, nhưng ngôn ngữ được xác định bởi Tiêu chuẩn thì không.
supercat
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.