Cấp cao so với cấp thấp không phải là một thứ đen trắng, mà là một quy mô liên tục. Các thuật ngữ được sử dụng để mô tả mức độ gần gũi của ngôn ngữ lập trình với phần cứng; cấp độ càng cao, nó càng trừu tượng hóa phần cứng.
Rõ ràng, mức thấp nhất là mã máy nhị phân - đó là biểu diễn chính xác mà HĐH tải và cung cấp cho CPU. Hội là mức độ trừu tượng đầu tiên được xây dựng trên nó: thay vì mã nhị phân, người ta viết mnemoics, mã biểu tượng có thể đọc được của con người đại diện cho các lệnh máy nhị phân. Đây là những gì mọi người đã sử dụng để lập trình hệ thống trước UNIX.
C là bước tiếp theo trong chuỗi trừu tượng, kết hợp các mẫu phổ biến vào các cấu trúc điều khiển luồng và trừu tượng hóa các hướng dẫn cụ thể của máy thành cú pháp bất khả tri của nền tảng, và sự trừu tượng cuối cùng này là một trong những yếu tố chính giúp UNIX trở nên cách mạng và rất thành công, bởi vì nó có nghĩa là cùng một mã có thể được biên dịch cho bất kỳ nền tảng nào mà không có bất kỳ thay đổi lớn nào.
C ++ cho biết thêm một lớp trừu tượng: nó bổ sung thêm các lớp học (vtables trừu tượng hóa và bối cảnh đi vào một cú pháp OOP), new
và delete
(bundling cấp phát bộ nhớ và khởi tạo biến thành một cấu trúc duy nhất), kiểm tra kiểu thời gian biên dịch, các mẫu (loại an toàn thời gian biên dịch siêu lập trình) và một loạt các tiện ích cú pháp thời gian biên dịch như không gian tên, nạp chồng hàm và toán tử, v.v.
Python có một bước tiến lớn khác từ phần cứng. C ++ vẫn cung cấp cho người lập trình toàn quyền kiểm soát việc cấp phát bộ nhớ và cho phép thao tác trực tiếp với RAM; Python chăm sóc quản lý bộ nhớ cho bạn. Ngoài ra, thay vì biên dịch mã của bạn thành các hướng dẫn máy hoàn toàn tự nhiên, nó chạy mã này với máy ảo; điều này mang đến một hình phạt về hiệu năng (đôi khi có thể rất nặng nề, nhưng thường không phải là điều đáng lo ngại), nhưng nó cũng cho phép những thứ gọn gàng trong C ++ và cực kỳ khó khăn trong C, như thao túng các chức năng và các lớp khi chạy thời gian, nhận được tên của các đối tượng tùy ý trong thời gian chạy, khởi tạo các lớp theo tên trong thời gian chạy, vá khỉ, v.v.
Vì vậy, khi mọi người chia ngôn ngữ thành "cấp độ cao" và "cấp độ thấp", họ sẽ vẽ một dòng tùy ý ở đâu đó và dòng đó không phải lúc nào cũng giống nhau. Năm 1970, dòng là giữa lắp ráp và C (trừu tượng hóa các hướng dẫn máy cụ thể nền tảng là yếu tố quyết định); vào năm 1987, nó có thể đã ở đâu đó giữa C và C ++; ngày nay, nó có thể nằm giữa C ++ và Java (với quản lý bộ nhớ tự động là yếu tố quyết định).
Câu chuyện dài: cấp độ cao là một thang trượt và đối với ba ngôn ngữ bạn đề cập đến đó là C <C ++ <Python.