II. Lịch sử phát triển ngôn ngữ lập trình
5. Bước đầu tiên tiến tới sự tinh xảo
Vào những năm 1950, các ngôn ngữ lúc bấy giờ được phát triển quanh một kiến trúc duy nhất, một số ngôn ngữ thì cho máy UNIVAC và một số thì cho máy IBM series 700, tất cả đều phụ thuộc vào máy và không có một ngôn ngữ nào phổ dụng để biểu diễn các thuật toán. ALGOL là kết quả của quá trình nỗ lực để thiết kế một ngôn ngữ phổ dụng.
GAMM và ACM gặp nhau trong bốn ngày để thiết kế tại Zurich (ngày 27 tháng 5 đến ngày 1 tháng 6 năm 1958, với các mục tiêu sau cho ngôn ngữ mới:
- Cú pháp của ngôn ngữ phải được gần gũi với các ký hiệu toán học - Nó phải dễ dàng để mô tả các thuật toán
- Nó phải được chuyển thành mã máy
ALGOL 58
Nó kế thừa từ Fortran và có một số điểm chú ý như sau - Tên biến có chiều dài bất kỳ
- Mảng có thể có nhiều chiều (mảng một chiều, hai chiều, …) - Tham số được tách biệt bởi hình thức (in & out)
- Câu lệnh phức hợp (begin … end) - Dấu chẩm phẩy kết thúc một câu lệnh - Thao tác gán là :=
- if có một mệnh đề else-if - Không có I/O
Mặc dù ban đầu IBM rất tâm huyết, nhưng đã từ bỏ vào giữa năm 1959 và nó không được hiện thực.
ALGOL 60
Chỉnh sửa của ALGOL 58 tại cuộc họp 6 ngày tại Paris. Nó là chuẩn để đưa ra các thuật toán cho hơn 20 năm. Tất cả các ngôn ngữ mệnh lệnh sau này được dựa trên nó. Là ngôn ngữ độc lập máy đầu tiên và cũng là ngôn ngữ đầu tiên có cú pháp chính thức được định nghĩa (BNF). Tuy nhiên chưa bao giờ được sử dụng rộng rãi, đặc biệt là ở Mỹ vì các lý do như thiếu I/O và tập ký tự làm cho các chương trình không portable, quá mềm dẻo dẫn tới
việc khó khăn để hiện thực, BNF vào lúc đó thì quá xa lạ và được coi là phức tạp và thiếu sự hỗ trợ của IBM.
Có các tính năng mới như
- Cấu trúc khối (phạm vi cục bộ)
- Tham số được đặt chương trình con có thể là tên biến hay giá trị - Đệ quy các chương trình con
- Các hàm lồng nhau
Nguyên lý tách khỏi: tách các các lệnh (đặt chúng vào khối) để chúng được xem như là một câu lệnh, và thu hẹp phạm vi khai báo tên biến, thủ tục, hàm được khai báo trong một khối để chúng không bị xung đột với các biến có cùng tên được sử dụng ở một nơi nào đó trong chương trình cho các mục đích khác nhau.
Nguyên lý chứa trong: Một hàm lồng trong (hay thủ tục lồng trong) là một hàm mà bị bao bọc bên trong một hàm khác. Nó chỉ có thể được gọi bởi hàm lồng nó hay bởi các hàm bị lồng trực tiếp hay không trực tiếp trong cùng hàm lồng nó. Nói cách khác, phạm vi của hàm lồng trong bị giới bị giới hạn bởi hàm lồng nó. Hàm lồng nhau là một hình thức che dấu thông tin và hữu ích trong các tác vụ thủ tục bị phân chia thành các tác vụ con mà chỉ có ý nghĩa trong cục bộ. Nó tránh làm lộn xộn đến các phần khác của chương trình (các hàm, biến khác, ...) mà không liên quan đến những phần này. Vì vậy, các hàm lồng nhau bổ sung những khả năng cho các cấu trúc khác như bản ghi hay các đối tượng.