Алгол 68
Материал из Википедии — свободной энциклопедии
Алго́л 68 (англ. Algol 68 от англ. algorithmic — алгоритмический и англ. language — язык), усовершенствован в 1964-68 (Алгол-68). Алгол относится к языкам высокого уровня (high-level language) и позволяет легко переводить алгебраические формулы в программные команды.
Алгол-68 обладает широким спектром возможностей, от свободы переопределения синтаксиса и операторов, до матричных операций. операций со структурами, до организации параллельных вычислений. Идеей языка Алгол-68 являлось достижение максимальной выразительности средств программирования и возможности запрограммирования максимально абстрактных алгоритмов.
Несмотря на схожесть названия с языком Алгол-60, Алгол-68 представляет собой существенно другой язык с другими принципами программирования, и мало похожим синтаксисом.
Обилие возможностей вызвало критику многих ведущих учёных и программистов, в частности Хоар отмечал, что, отойдя от простоты языка Алгол-60, этот язык совершенно не облегчает разработку программ. Критика Алгола-68 привела к тому, что НАТО предпочло другие принципы, и признало лучшим язык Ада. В СССР существовали рабочие группы по разработкам на Алголе-68, но широкого распространения язык также не получил.
Причиной неудач являлась не столько сложность конструкций, сколько провокация разработчика к свободному неструктурному программированию с активным использованием собственных абстрактных категорий и обозначений. От этого код программы становился неудобочитаемым, что затрудняло разработки группы и сопровождения. Кроме того, обилие возможностей языка делало затруднительным полноценную реализацию компилятора.
Несмотря на неудачу, этот язык серьёзно повлиял на разработчиков более поздних объектно-ориентированных языков, и в частности C++, хотя многие возможности были отброшены, а многие — существенно переделаны.
Детально об этом языке можно почитать на английском языке здесь: Programming Algol 68 Made Easy.
Содержание |
[править] Пример кода
Эта программа реализует классический алгоритм «Решето Эратосфена» для поиска всех простых чисел меньше 100. nil означает null pointer в других языках. Нотация x of y означает доступ к x как к элементу struct или union y.
begin # Algol-68 prime number sieve, functional style # proc error = (string s) void: (print(( newline, " error: ", s, newline)); goto stop); proc one to = (int n) list: (proc f = (int m,n) list: (m>n | nil | cons(m, f(m+1,n))); f(1,n)); mode list = ref node; mode node = struct (int h, list t); proc cons = (int n, list l) list: heap node := (n,l); proc hd = (list l) int: ( l is nil | error("hd nil"); skip | h of l ); proc tl = (list l) list: ( l is nil | error("tl nil"); skip | t of l ); proc show = (list l) void: ( l isnt nil | print((" ",whole(hd(l),0))); show(tl(l))); proc filter = (proc (int) bool p, list l) list: if l is nil then nil elif p(hd(l)) then cons(hd(l), filter(p,tl(l))) else filter(p, tl(l)) fi; proc sieve = (list l) list: if l is nil then nil else proc not multiple = (int n) bool: n mod hd(l) ≠ 0; cons(hd(l), sieve( filter( not multiple, tl(l) ))) fi; proc primes = (int n) list: sieve( tl( one to(n) )); show( primes(100) ) end
[править] Сравнение с языком C++
Ниже следует функциональное сопоставление языка Алгол-68 и языка С++:
C++ не обладает:
- вложенными функциями,
- возможностью описывать символ оператора и приоритет,
- «сборкой мусора» (garbage collection),
- использованием объектов до их определения,
- formatted transput — сложным определением формата,
- массивами (и встроенными операциями с ними),
- автоматическими конструкциями UNION,
- выражениями CASE,
- далёкой адресацией GOTO за пределы процедуры (разумеется, не самая лучшая идея),
- интуитивное определение собственного синтаксиса.
Алгол-68 не обладает:
- защитой доступа public/private,
- перегруженными процедурами (в отличие от операторов),
- явной аллокацией и удалением памяти,
- декларациями внешних ссылок,
- препроцессором и включаемыми заголовками,
- путаницей в стилях указателей & и *,
- комментариями (разрешаются только заключённые в скобки),
- иерархией классов.
[править] Ссылки
[править] на русском языке
- Из истории создания компилятора с Алгол 68
- Система программ динамической поддержки для транслятора с Алгола 68
[править] на английском языке
- Revised Report on the Algorithmic Language ALGOL 68 The official reference for users and implementors of the language
- Revised Report on the Algorithmic Language ALGOL 68 HTML version of the above
- Charles Lindsey's paper on the development of ALGOL 68 for the 2nd History of Programming Languages conference proceedings
- Algol 68 Genie — a GNU GPL Algol 68 interpreter
- Algol68 Standard Hardware representation (.pdf)
[править] Литература на английском языке
- Brailsford, D.F. and Walker, A.N., Introductory ALGOL 68 Programming, Ellis Horwood/Wiley, 1979
- McGettrick, A.D., ALGOL 68, A First and Second Course, Cambridge Univ. Press, 1978
- Peck, J.E.L., An ALGOL 68 Companion, Univ. of British Columbia, October 1971
- Tanenbaum, A.S., A Tutorial on ALGOL 68, Computing Surveys 8, 155—190, June 1976 and 9, 255—256, September 1977, http://vestein.arb-phys.uni-dortmund.de/~wb/RR/tanenbaum.pdf
Используемые в разработке: ABAP/4 | Ада | Ассемблеры | Awk | BASIC | Си | КОБОЛ | C++ | C# | ColdFusion | D | Delphi | Forth | FoxPro | DataFlex | Фортран | Java | JavaScript | J++ | J# | Icon | Limbo | Лисп | Lua | Objective-C | Оберон | Oz | Паскаль | Perl | PHP | PL/I | Пролог | Руби | Python | Tcl | Smalltalk | SQL | Visual DataFlex | Visual Basic | VB.NET
|