ALGOL
Mẫu hình | Thủ tục, Mệnh lệnh, Cấu trúc |
---|---|
Thiết kế bởi | Bauer, Bottenbruch, Rutishauser, Samelson, Backus, Katz, Perlis, Wegstein, Naur, Vauquois, van Wijngaarden, Woodger, Green, McCarthy |
Xuất hiện lần đầu | 1958 |
Ảnh hưởng tới | |
Hầu hết các ngôn ngữ mệnh lệnh (còn gọi là các ngôn ngữ "tương tự ALGOL") Ví dụ: Simula, C, CPL, Pascal, Ada |
ALGOL (viết tắt từ ALGOrithmic Language)[1] là một họ các ngôn ngữ lập trình máy tính bắt buộc được phát triển vào năm 1958. ALGOL ảnh hưởng lớn đến nhiều ngôn ngữ khác và là phương pháp tiêu chuẩn để mô tả thuật toán được Hiệp hội Máy tính (ACM) sử dụng trong sách giáo khoa và các nguồn học thuật cho đến khi các ngôn ngữ hướng đối tượng xuất hiện, trong hơn ba mươi năm. [2]
Theo nghĩa là cú pháp của hầu hết các ngôn ngữ hiện đại là "giống như Algol", [3] nó được cho là có ảnh hưởng nhất trong bốn ngôn ngữ lập trình cấp cao trong đó có ngôn ngữ đương đại: FORTRAN, Lisp và COBOL. [4 ] Nó được thiết kế để tránh một số vấn đề nhận thức với FORTRAN và cuối cùng đã phát sinh nhiều ngôn ngữ lập trình khác, bao gồm PL / I, Simula, BCPL, B, Pascal và C.
ALGOL đã giới thiệu các khối mã và các cặp bắt đầu... kết thúc để phân định chúng. Nó cũng là ngôn ngữ đầu tiên thực hiện các định nghĩa hàm lồng nhau với phạm vi từ vựng. Hơn nữa, đây là ngôn ngữ lập trình đầu tiên chú ý đến định nghĩa ngôn ngữ chính thức và thông qua Báo cáo Algol 60 đã giới thiệu mẫu BackusTHER Naur, một ký hiệu ngữ pháp chính thức cho thiết kế ngôn ngữ.
Có ba thông số kỹ thuật chính, được đặt tên sau những năm đầu tiên chúng được xuất bản:
ALGOL 58 - ban đầu được đề xuất gọi là IAL, cho ngôn ngữ đại số quốc tế.
ALGOL 60 - lần đầu tiên được triển khai dưới dạng X1 ALGOL 60 vào giữa năm 1960. Sửa đổi năm 1963. [5] [6]
ALGOL 68 - đã giới thiệu các yếu tố mới bao gồm mảng linh hoạt, lát cắt, song song, xác định toán tử. Sửa đổi năm 1973. [7]
ALGOL 68 về cơ bản khác với ALGOL 60 và không được đón nhận, do đó, nói chung "Algol" có nghĩa là ALGOL 60 và phương ngữ của chúng.
Lịch sử
[sửa | sửa mã nguồn]ALGOL được phát triển bởi một ủy ban của các nhà khoa học máy tính châu Âu và Mỹ trong cuộc họp năm 1958 tại Viện Công nghệ Liên bang Thụy Sĩ tại Zurich (ETH Zurich; xem ALGOL 58). Nó đã chỉ định ba cú pháp khác nhau: cú pháp tham chiếu, cú pháp xuất bản và cú pháp thực hiện. Các cú pháp khác nhau cho phép nó sử dụng các tên và quy ước từ khóa khác nhau cho các dấu thập phân (dấu phẩy so với dấu chấm) cho các ngôn ngữ khác nhau.
ALGOL được sử dụng chủ yếu bởi các nhà khoa học máy tính nghiên cứu ở Hoa Kỳ và ở Châu Âu. Việc sử dụng nó trong các ứng dụng thương mại đã bị cản trở bởi sự vắng mặt của các cơ sở đầu vào / đầu ra tiêu chuẩn trong mô tả của nó và sự thiếu quan tâm đến ngôn ngữ của các nhà cung cấp máy tính lớn khác ngoài Tập đoàn Burroughs. ALGOL 60 tuy nhiên đã trở thành tiêu chuẩn cho việc xuất bản các thuật toán và có ảnh hưởng sâu sắc đến sự phát triển ngôn ngữ trong tương lai.
Cây gia đình của triều đại ngôn ngữ lập trình Algol, Fortran và COBOL
John Backus đã phát triển phương pháp dạng bình thường Backus để mô tả các ngôn ngữ lập trình dành riêng cho ALGOL 58. Nó đã được Peter Naur sửa đổi và mở rộng cho ALGOL 60, và theo đề nghị của Donald Knuth đổi tên thành dạng Backus của Naur. [8]
Peter Naur: "Là biên tập viên của Bản tin ALGOL, tôi bị lôi cuốn vào các cuộc thảo luận quốc tế về ngôn ngữ và được chọn là thành viên của nhóm thiết kế ngôn ngữ châu Âu vào tháng 11 năm 1959. Trong khả năng này, tôi là biên tập viên của báo cáo ALGOL 60, được sản xuất là kết quả của cuộc họp ALGOL 60 tại Paris vào tháng 1 năm 1960. "[9]
Những người sau đây đã tham dự cuộc họp tại Paris (từ 1 đến 16 tháng 1):
Friedrich L. Bauer, Peter Naur, Heinz Rutishauser, Klaus Samelson, Bernard Vauquois, Adriaan van Wijngaarden và Michael Woodger (từ Châu Âu)
John W. Backus, Julien Green, Charles Katz, John McCarthy, Alan J. Perlis và Joseph Henry Wegstein (từ Hoa Kỳ).
Alan Perlis đã đưa ra một mô tả sống động về cuộc họp: "Các cuộc họp đã mệt mỏi, kết thúc và phấn khởi. Người ta trở nên trầm trọng hơn khi những ý tưởng tốt của một người bị loại bỏ cùng với những ý tưởng tồi tệ của người khác. 13 là tuyệt vời. "
ALGOL 60 đã truyền cảm hứng cho nhiều ngôn ngữ đi theo nó. Tony Hoare nhận xét: "Đây là một ngôn ngữ đi trước thời đại, nó không chỉ là một cải tiến so với những người tiền nhiệm mà còn gần như tất cả những người kế nhiệm nó." [10] Ngôn ngữ lập trình Scheme, một biến thể của Lisp đã thông qua khối này cấu trúc và phạm vi từ vựng của ALGOL, cũng đã sử dụng từ ngữ "Báo cáo sửa đổi về lược đồ ngôn ngữ thuật toán" cho các tài liệu tiêu chuẩn của nó để tỏ lòng tôn kính với ALGOL. [11]
Algol và nghiên cứu ngôn ngữ lập trình [chỉnh sửa nguồn]
Như Peter Landin đã lưu ý, ngôn ngữ Algol là ngôn ngữ đầu tiên kết hợp các hiệu ứng mệnh lệnh liền mạch với phép tính lambda (gọi bằng tên). Có lẽ công thức thanh lịch nhất của ngôn ngữ là do John C. Reynold, và nó thể hiện tốt nhất sự thuần khiết cú pháp và ngữ nghĩa của nó. Algol lý tưởng hóa của Reynold cũng đưa ra một lập luận phương pháp thuyết phục về sự phù hợp của các hiệu ứng địa phương trong bối cảnh các ngôn ngữ gọi bằng tên, trái ngược với các hiệu ứng toàn cầu được sử dụng bởi các ngôn ngữ gọi theo giá trị như ML. Tính toàn vẹn về mặt khái niệm của ngôn ngữ khiến nó trở thành một trong những đối tượng chính của nghiên cứu ngữ nghĩa, cùng với Chức năng tính toán lập trình (PCF) và ML. [12]
Tính chất
[sửa | sửa mã nguồn]ALGOL 60 như được xác định chính thức không có cơ sở I / O; việc triển khai tự xác định theo cách hiếm khi tương thích với nhau. Ngược lại, ALGOL 68 cung cấp một thư viện rộng lớn các cơ sở chuyển tiếp (đầu vào / đầu ra).
ALGOL 60 cho phép hai chiến lược đánh giá cho việc truyền tham số: gọi theo giá trị chung và gọi theo tên. Gọi theo tên có tác dụng nhất định trái ngược với gọi theo tham chiếu. Ví dụ, không chỉ định tham số là giá trị hoặc tham chiếu, không thể phát triển thủ tục sẽ hoán đổi giá trị của hai tham số nếu tham số thực được truyền vào là một biến số nguyên và một mảng được lập chỉ mục bởi cùng một biến số nguyên đó [20] Hãy nghĩ đến việc chuyển một con trỏ để hoán đổi (i, A [i]) vào một hàm. Bây giờ mỗi lần hoán đổi được tham chiếu, nó được đánh giá lại. Nói i: = 1 và A [i]: = 2, vì vậy mỗi lần hoán đổi được tham chiếu, nó sẽ trả về kết hợp khác của các giá trị ([1,2], [2,1], [1,2], v.v.). Một tình huống tương tự xảy ra với một hàm ngẫu nhiên được truyền dưới dạng đối số thực tế.
Call-by-name được nhiều nhà thiết kế trình biên dịch biết đến với "thunks" thú vị được sử dụng để thực hiện nó. Donald Knuth đã nghĩ ra "thử nghiệm đàn ông hay con trai" để tách các trình biên dịch thực hiện chính xác "đệ quy và các tham chiếu không cục bộ". Bài kiểm tra này chứa một ví dụ về cách gọi theo tên.
ALGOL 68 được định nghĩa bằng cách sử dụng một hình thức ngữ pháp hai cấp độ được phát minh bởi Adriaan van Wijngaarden và mang tên ông. Các ngữ pháp Van Wijngaarden sử dụng một ngữ pháp không ngữ cảnh để tạo ra một bộ sản phẩm vô hạn sẽ nhận ra một chương trình ALGOL 68 cụ thể; Đáng chú ý, họ có thể thể hiện loại yêu cầu mà trong nhiều tiêu chuẩn ngôn ngữ lập trình khác được gắn nhãn "ngữ nghĩa" và phải được thể hiện bằng văn xuôi ngôn ngữ tự nhiên mơ hồ, và sau đó được triển khai trong trình biên dịch dưới dạng mã ad hoc gắn liền với ngôn ngữ chính thức trình phân tích cú pháp.
Ví dụ và các giới hạn
[sửa | sửa mã nguồn]Xem thêm
[sửa | sửa mã nguồn]Chú thích
[sửa | sửa mã nguồn]- ^ Tên của ngôn ngữ đôi khi được viết cả chữ hoa lẫn chữ thường (Algol 60), và đôi khi chỉ toàn chữ hoa (ALGOL 68 Lưu trữ 2010-01-18 tại Wayback Machine). Để đơn giản, bài viết này sẽ viết ALGOL.