ALGOL (viết tắt từ ALGOrithmic Language) 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ử
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
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
👁️
4 | 🔗 | 💖 | ✨ | 🌍 | ⌚
**ALGOL** (viết tắt từ **ALGO**rithmic **L**anguage) 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à
**ALGOL 68** (viết tắt của _Algorithmic Language 1968_) là ngôn ngữ lập trình máy tính dùng lệnh được coi là sự kế thừa của ngôn ngữ lập trình ALGOL 60, được thiết kế với mục
nhỏ|trái|Sao ba Algol **Algol** (**Beta Per**, **β Persei**, **β Per**), được biết với tên thông dụng là **Demon Star**, là một ngôi sao sáng trong chòm sao Anh Tiên. Nó là một trong những sao đôi che nhau
**_Molophilus algol_** là một loài ruồi trong họ Limoniidae. Chúng phân bố ở miền Ấn Độ - Mã Lai.
**_Copris algol_** là một loài bọ cánh cứng trong họ Bọ hung (Scarabaeidae).
**Pascal** là một ngôn ngữ lập trình cho máy tính thuộc dạng mệnh lệnh và thủ tục, được Niklaus Wirth phát triển vào năm 1970. Pascal là ngôn ngữ lập trình đặc biệt thích hợp
nhỏ|Peter Naur **Peter Naur** (sinh ngày 25.10.1928 tại Frederiksberg, Zealand) là người Đan Mạch tiên phong trong Khoa học máy tính và được giải Turing của "Asociation for Computing Machinery" năm 2005. Tên Naur là
nhỏ|Cbmain 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
Mục đích của **danh sách các ngôn ngữ lập trình** này là bao gồm tất cả các ngôn ngữ lập trình hiện tại đáng chú ý, được sử dụng hiện tại và những ngôn ngữ
Một **sao đôi** được tạo thành từ một hệ thống gồm hai ngôi sao chuyển động trên quỹ đạo của khối tâm hai ngôi sao. Đối với mỗi ngôi sao, sao kia là "bạn đồng
**Whetstone** là một kiểm chuẩn tổng hợp để đánh giá hiệu suất của máy tính . Whetstone được viết lần đầu tiên bằng ALGOL 60 năm 1972 tại Bộ phận Hỗ trợ Kỹ thuật TSU
**Ngôn ngữ biên dịch** (tiếng Anh: _compiled language_) là ngôn ngữ lập trình có triển khai thường là trình biên dịch (bộ dịch tạo ra mã máy từ mã nguồn), chứ không phải trình thông
**John McCarthy** (4 tháng 9 năm 1927 - 24 tháng 10 năm 2011) là một nhà khoa học máy tính và nhà khoa học nhận thức người Mỹ. McCarthy là một trong những người sáng
**Oberon** là một ngôn ngữ lập trình đa năng được xuất bản lần đầu tiên vào năm 1987 bởi Niklaus Wirth và là thành viên mới nhất của gia đình Wirth gồm các ngôn ngữ
thumb|[[Sao biến quang Cepheid L Carinae]] nhỏ|300x300px|So sánh hình ảnh [[VLT-SPHERE của Betelgeuse vào tháng 1 năm 2019 và tháng 12 năm 2019, cho thấy sự thay đổi về độ sáng và hình dạng. Betelgeuse
**Mã giả** (, xuất phát từ chữ pseudo và code) là một bản mô tả giải thuật lập trình máy tính ngắn gọn và không chính thức cấp cao, trong đó sử dụng những quy
là một bộ manga thể loại shōjo, xuyên không, huyền ảo lịch sử của tác giả Chieko Hosokawa. Truyện bắt đầu được phát hành trên tạp chí hàng tháng _Princess_ của nhà xuất bản Akita
Đây là danh sách các ngôn ngữ lập trình đáng chú ý, được nhóm theo loại. Vì không có sơ đồ phân loại bao quát cho các ngôn ngữ lập trình, nên trong nhiều trường
Trong khoa học máy tính, **luồng điều khiển** (tiếng Anh: _control flow_ hay _flow of control_) là thứ tự các câu lệnh, tập lệnh hay lời gọi hàm riêng biệt của một chương trình mệnh
**Dylan** là một ngôn ngữ lập trình đa mẫu hình có hỗ trợ hàm, lập trình hướng đối tượng (OOP), động và phục hồi trong khi cung cấp một mô hình lập trình được thiết
**Alpha Persei** (được Latinh hóa từ **α Persei**, viết tắt là **Alpha Per**, **α Per**), được đặt tên chính thức là **Mirfak** (phát âm là /ˈmɜːrfæk/ hay /ˈmɪərfæk/), là ngôi sao sáng nhất trong chòm
**C++** (**C Plus Plus**, **CPP,** IPA: /siː pləs pləs/) là một ngôn ngữ lập trình đa năng bậc cao (high-level) được tạo ra bởi Bjarne Stroustrup như một phần mở rộng của ngôn ngữ lập
Trong khoa học máy tính, **reflection** (có thể dịch là "phản tỉnh", "tự xét mình") là việc tiến trình có khả năng xem xét, nội quan, và sửa đổi kết cấu cùng với hành trạng
**Delphi** là sản phẩm phần mềm sử dụng phương ngữ Delphi của ngôn ngữ lập trình Object Pascal và cung cấp môi trường phát triển tích hợp (IDE) để phát triển ứng dụng nhanh chóng
**Hệ điều hành** (tiếng Anh: Operating system, viết tắt: OS) là phần mềm hệ thống quản lý tài nguyên phần cứng máy tính, phần mềm và cung cấp các dịch vụ chung cho các chương
**Alpha Virginis** (tiếng Anh: Spica, α Vir / α Virginis / Alpha Virginis) là ngôi sao sáng nhất trong chòm sao Thất Nữ (Virgo), và là một trong những sao sáng nhất trên bầu trời
**Sao** (tiếng Anh: _star_), **Ngôi sao**, **Vì sao** hay **Hằng tinh** (chữ Hán: 恒星) là một thiên thể plasma sáng, có khối lượng lớn được giữ bởi lực hấp dẫn. Sao gần Trái Đất nhất
**Edsger Wybe Dijkstra** (; 11 tháng 5 năm 1930 tại Rotterdam – 6 tháng 8 năm 2002 tại Nuenen), là nhà khoa học máy tính người Hà Lan. Ông được nhận giải thưởng Turing năm
**BASIC** là một ngôn ngữ lập trình bậc cao, đơn giản, dễ sử dụng, nhằm đơn giản hóa quá trình lập trình. BASIC được phát minh vào năm 1963 bởi các giáo sư John George
nhỏ| Chương trình máy tính "Xin chào, thế giới" của [[Brian Kernighan (1978) ]] **Chương trình máy tính** là tập hợp các câu lệnh thực hiện một tác vụ cụ thể khi được máy tính
nhỏ|phải|The faint yellow translucent sphere represents one light-minute distance from the Sun (very small dot). It is larger than the stars Gamma Orionis and Algol B, but smaller than the radius of Mercury's orbit and
**Ada** là ngôn ngữ lập trình xuất xứ từ Bộ quốc phòng Mỹ vào khoảng nửa đầu thập niên 80 của thế kỷ 20. Ngôn ngữ này được đặt tên theo Ada Augusta nữ bá
**Viện Đại học Copenhagen** (tiếng Đan Mạch: _Københavns Universitet_) là viện đại học lâu đời nhất Đan Mạch, cũng là một trong số các viện đại học lâu đời nhất Bắc Âu. Các cơ sở
**_The Mythical Man-Month: Essays on Software Engineering_** (Chuyện tưởng tượng về Man-Month: Thử nghiệm trong kỹ thuật phần mềm) là một cuốn sách về quản trị dự án phần mềm được viết bởi Fred Brooks,
Họ máy tính lớn **_Minsk_** được phát triển và sản xuất tại Byelorussia từ năm 1959 đến 1975. Tiến trình phát triển của nó sau này đã được ngừng lại để giải quyết vấn đề
Sir **Charles Antony Richard Hoare** (**Tony Hoare** hay **C.A.R. Hoare**, sinh ngày 11 tháng 1 năm 1934) là một nhà khoa học máy tính người Anh, có lẽ nổi tiếng nhất vì đã phát triển
**_Áo giáp vàng_** là bộ truyện manga có tên gốc là _Saint Seiya_ và _Knights of the Zodiac_ của tác giả Kurumada Masami người Nhật. Bộ truyện tranh giành giải Animage Anime Grand Prix tại
Trong lập trình máy tính, **Hợp ngữ** (hay **assembly**) thường được viết tắt là **asm** là bất kỳ ngôn ngữ lập trình cấp thấp nào có sự tương ứng rất mạnh giữa các tập lệnh
Trong ngành khoa học máy tính, **các phương pháp hình thức** là các kỹ thuật toán học cho việc đặc tả, phát triển và kiểm định các hệ thống phần mềm và phần cứng. Cách
nhỏ|Intel A80386DX-20 CPU die image **Intel 80386** (ban đầu là **80386** và sau này còn gọi là **i386**) là bộ vi xử lý 32-bit được giới thiệu năm 1985. Nó có 275 000 transistor và
Trong thiên văn học, **sao đôi quang học** là trường hợp khi hai ngôi sao (hay tổng quát là hai thiên thể) có vẻ nằm gần nhau khi được quan sát từ Trái Đất. Có
**Semaphore** là một biến được bảo vệ (hay là một kiểu dữ liệu trừu tượng), tạo thành một phương pháp để hạn chế truy nhập tới tài nguyên dùng chung trong môi trường đa chương
**Danh sách trang thiết bị quân sự sử dụng trong Chiến tranh Vùng Vịnh** là bảng tổng hợp các loại vũ khí và các trang bị quân sự được sử dụng bởi các quốc gia
**Song Tử** (双子) (tiếng Latinh: Gemini, biểu tượng: ♊︎) là một trong những chòm sao của Đai Hoàng Đạo và nằm ở bán cầu bắc. Nó là một trong 48 chòm sao được mô tả
**Anh Tiên** (英仙) (tiếng Latinh: **Perseus**) là một chòm sao trên bầu trời phía bắc, được đặt tên theo vị anh hùng trong thần thoại Hy Lạp Perseus. Đây là một trong số 48 chòm
thumb|**[[Phép tính lambda** là một hệ thống hình thức để định nghĩa hàm, ứng dụng hàm và đệ quy được Alonzo Church đề xuất vào những năm 193x.]] **Lý thuyết ngôn ngữ lập trình** (thường
Trong khoa học máy tính, **đèn báo** là một biến được bảo vệ hoặc một kiểu dữ liệu trừu tượng tạo ra sự trừu tượng hoá đơn giản nhưng hữu dụng để kiểm soát truy
Trong khoa học máy tính, **tìm kiếm nhị phân** (), còn gọi là **tìm kiếm nửa khoảng** (_half-interval search_), **tìm kiếm logarit** (_logarithmic search_), hay **chặt nhị phân** (_binary chop_), là một thuật toán tìm
Các hệ điều hành máy tính cung cấp một tập chức năng cần thiết và được dùng ở hầu hết các chương trình trên máy tính, và các liên kết cần để kiểm soát và
**John Goodricke** (1764-1786) là nhà thiên văn học người Anh. Năm 1782, Goodricke quan sát thấy độ sáng của sao Algol thăng giáng với một chu kỳ tuần hoàn và đề xuất nó đang bị