Trong
khoa học máy tính, một
ngôn ngữ lập trình bậc cao (
tiếng Anh: high-level programming language) là một
ngôn ngữ lập trình có sự
trừu tượng hóa mạnh mẽ khỏi các chi tiết của
máy tính. So với các
ngôn ngữ lập trình bậc thấp (low-level programming language), nó có thể sử dụng các yếu tố
ngôn ngữ tự nhiên, dễ sử dụng hơn, hoặc có thể tự động (hoặc thậm chí che giấu hoàn toàn) các khu vực quan trọng của các hệ thống điện toán (ví dụ,
quản lí bộ nhớ (memory management)), làm quá trình phát triển chương trình đơn giản hơn và tương đối dễ hiểu hơn so với một ngôn ngữ bậc thấp. Lượng trừu tượng hóa được cung cấp định nghĩa một ngôn ngữ lập trình có bậc cao tới mức nào.
[1]Vào thập niên 1960, các ngôn ngữ lập trình bậc cao sử dụng một
compiler (trình biên dịch) thường được gọi là
autocode (mã tự động).
[2]Ví dụ của autocode là
COBOL và
Fortran.
[3]Ngôn ngữ lập trình cấp cao đầu tiên được thiết kế cho máy tính là
Plankalkül, được tạo ra bởi
Konrad Zuse .
[4] Tuy nhiên, nó đã không được thực hiện trong thời đại của ông, và những đóng góp ban đầu của ông phần lớn bị cô lập với những phát triển khác do
Thế chiến thứ hai, ngoài ảnh hưởng của ngôn ngữ đối với ngôn ngữ "
Superplan " của
Heinz Rutishauser và ở một mức độ nào đó của
Algol . Ngôn ngữ cấp cao đầu tiên trên diện rộng đáng kể là
Fortran, một sự phát triển máy độc lập trước đó của IBM
Autocode hệ thống.
Algol, được xác định vào năm 1958 và 1960 bởi các ủy ban gồm các nhà khoa học máy tính châu Âu và Mỹ, đã giới thiệu phép
đệ quy cũng như
các hàm lồng nhau dưới
phạm vi từ vựng . Nó cũng là ngôn ngữ đầu tiên có sự phân biệt rõ ràng giữa
giá trị và
tên-các tham số và
ngữ nghĩa tương ứng của chúng.
[5] Algol cũng giới thiệu một số khái niệm
lập trình có cấu trúc, chẳng hạn như
cấu trúc while-do và
if-then-else và
cú pháp của nó là
cấu trúc đầu tiên được mô tả bằng ký hiệu chính thức - "
Backus – Naur form " (BNF). Trong cùng khoảng thời gian đó,
Cobol đã giới thiệu
các bản ghi (còn gọi là cấu trúc) và
Lisp lần đầu tiên giới thiệu một
trừu tượng lambda tổng quát đầy đủ trong một ngôn ngữ lập trình.