Каким должен быть язык программирования? Анализ и критика Описание языка Компилятор
Отечественные разработки Cтатьи на компьютерные темы Компьютерный юмор Прочее

Некоторые «вкусности» Алгол-68

Элегантный синтаксис

        В Алгол-68 (прошу обратить внимание, что Алгол-68 и Алгол-60 — это совершенно разные языки!) есть весьма элегантные конструкции вида «if» — «fi». Очень доходчиво!
if — fi
do — od
case — esac

         Симпатично, но ... А что если нам необходимо закончить некий блок, начинающийся словом «function»? Ему, вероятно, должно соответствовать «noitcnuf»? А пару «operation» должно составить «noitarepo». Это уже похоже на шаманские заклинания. Здесь Алгол-68 и его идея повернулась к нам некрасивым местом. Поэтому от такого стиля лучше отказаться.

         История, сделав виток по спирали, возвратила нам идеи Алгола-68, воплощённые в HTML:
<title> — </title>
<table> — </table>
<p> — </p> и т.д.

         Очень логично. Но громоздко. Языку разметки текста, наверное, простительна такая расточительность в символах. Но языку програмирования лишнее не к лицу. Действительно, если убрать «<» и «>», то смотрится лучше:

if — /if
switch — /switch
for — /for
do — /do
while — /while
class — /class
function — /function

Это смотрится симпатичнее, чем вариант с «end»:

if — end if
do — end do
function — end function

Условный оператор

         В Алгол-68 возможно такое:
a := if a = 0 then b else c fi;
На C это записывается так:
a = (a==0)? b : c;
или:
if (a == 0) a = b; else a = c;
Сейчас такими трюками никого не удивишь. Но они включают фантазию тем, кто придумывает языки. Не знаю, возможно ли такое на Алгол-68 (а это очень даже вероятно — это очень мощный язык), оператор «if» может, по идее, возвращать не только какой-то объект и какое-то значение, но и операции!
a := b if b > 0 then * else + fi c;            // выбор операции * или + в зависимости от b > 0
То же, но на C:
if (a == 0) a = b * c; else a = b + c;
Не правда ли, красивое решение? Хотя и бесполезное: всё тоже самое можно сделать без пижонства.

Уроки провала Алгол-68

         Комитет, занимавшийся выработкой языка, создал язык, чрезвычайно богатый выразительными возможностями. Он же оказался чрезвычайно сложен в реализации. Первые компиляторы появились спустя годы после описания языка. При этом они охватывали лишь часть возможностей языка. Полностью соответствующий стандарту языка компилятор появился лишь десятилетие спустя. О чём это говорит и какие выводы из этого можно сделать?
  • Чем сложнее язык, тем сложнее компилятор. Тем дольше этот компилятор разрабатывается. Тем больших усилий это требует.
  • Сложный язык затрудняет не только написание компилятора, но и изучение самого языка программистами. Чем проще язык, тем больше будет желающих изучить его «за один вечер».
  • Если хотим иметь обозримые сроки создания компилятора, невысокую сложность языка, то нужно уметь выделить главное, от чего нельзя отказаться. Не надо в язык впихивать «невпихуемое».

Что ещё почитать на эту тему

Последняя правка: 2015-01-23    06:23

ОценитеОценки посетителей
   ████████████████████████████ 16 (66.6%)
   █████████ 5 (20.8%)
   ██ 1 (4.16%)
   ████ 2 (8.33%)

Отзывы

     2015/04/04 08:27, rst256

Все же ключевым фактором стоит считать именно сложность языка.
Вот сайт проекта, новая версия вышла в январе 2015 г.: http://algol68.sourceforge.net/
размер исходников (преимущественно код на С) ~ 3Mb

Написать отзыв

Написать автору можно на электронную почту mail(аt)compiler.su

Авторизация

Регистрация

Выслать пароль

Карта сайта


Каким должен быть язык программирования?

Анализ и критика

Устарел ли текст как форма представления программы

Русский язык и программирование

Многоязыковое программирование

Синтаксис языков программирования

Синтаксический сахар

Некоторые «вкусности» Алгол-68

«Двухмерный» синтаксис Python

Почему языки с синтаксисом Си популярнее языков с синтаксисом Паскаля?

Должна ли программа быть удобочитаемой?

Стиль языка программирования

Тексто-графическое представление программы

●  Разделители

●  Строки программы

●  Слева направо или справа налево?

Комментарии

●  Длинные комментарии

●  Короткие комментарии

●  Комментарии автоматической генерации документации

●  Нерабочий код

●  Помеченные комментарии

Нужны ли беззнаковые целые?

Шестнадцатиричные и двоичные константы

Условные операторы

Переключатель

Циклы

●  Продолжение цикла и выход из него

Некошерный «goto»

Изменение приоритетов операций

Операции присвоения и проверки на равенство. Возможно ли однаковое обозначение?

Так ли нужны операции «&&», «||» и «^^»?

Постфиксные инкремент и декремент

Почему в PHP для конкатенации строк используется «.»?

Указатели и ссылки в C++

Использование памяти

Почему динамическое распределение памяти — это плохо

Как обеспечить возврат функциями объектов переменной длины?

●  Типы переменного размера (dynamically sized types, DST) в языке Rust

●  Массивы переменной длины в C/C++

●  Размещение объектов в стеке, традиционный подход

●  Размещение объектов переменной длины с использованием множества стеков

●  Размещение объектов переменной длины с использованием двух стеков

●  Реализация двухстековой модели размещения данных

●  Двухстековая модель: тесты на скорость

●  Изменение длины объекта в стеке во время исполнения

●  Размещение объектов переменной длины с использованием одного стека

Можно ли забыть о «куче», если объекты переменной длины хранить в стеке

Безопасность и размещение объектов переменной длины в стеке

Массивы, структуры, типы, классы переменной длины

О хранении данных в стеке, вместо заключения

Описание языка

Компилятор

Отечественные разработки

Cтатьи на компьютерные темы

Компьютерный юмор

Прочее

Последние комментарии

2018/12/08 23:03 ••• Попов Михаил
✎ Программирование без программистов — это медицина без врачей

2018/12/07 08:57 ••• Автор сайта
✎ Почему обречён язык Форт

2018/12/07 08:36 ••• Автор сайта
✎ Нужны ли беззнаковые целые?

2018/12/03 13:51 ••• kt
✎ Экстракоды при синтезе программ

2018/11/30 17:56 ••• Freeman
✎ Изменение приоритетов операций

2018/11/30 17:20 ••• Автор сайта
✎ Почему языки с синтаксисом Си популярнее языков с синтаксисом Паскаля?

2018/11/26 14:23 ••• Автор сайта
✎ Так ли нужны операции «&&», «||» и «^^»?

2018/11/18 15:21 ••• Freeman
✎ Устарел ли текст как форма представления программы

2018/11/17 03:28 ••• Comdiv
✎ Изменение длины объекта в стеке во время исполнения

2018/11/16 12:53 ••• Автор сайта
✎ Помеченные комментарии

2018/11/11 14:01 ••• Александр Коновалов aka Маздайщик
✎ Нерабочий код

2018/11/11 13:39 ••• Александр Коновалов aka Маздайщик
✎ О русском языке в программировании