Evolution of programming languages (Was Об отсечениях внутри блока.


Subject: Evolution of programming languages (Was Об отсечениях внутри блока.
From: Andrei Klimov (Andrei.Klimov@supercompilers.com)
Date: Mon Nov 27 2000 - 21:50:44 MSK


Добрый день!

[Я переношу эту линию дискуссии из списка refal-plus@botik.ru в refal@botik.ru,
так как меня "понесло" на обобщения, выходящие за рамки Рефала Плюс.;-)
Можете посмотреть архив по адресам:
http://www.botik.ru/mail-archive/refal/
http://www.botik.ru/mail-archive/refal-plus/
соответственно.]

...Очень приятно, что дискуссия, обозначила разные и интересные
точки зрения. Но занятно, что я хотел бы дальше выступать с позиции
"большего католика, чем папа Римский" и готов продолжать защищать
решения Рефала Плюс от его автора -- Сергея Романенко --
http://www.botik.ru/mail-archive/refal-plus/0137.html
-- в том числе включение в язык механизма возвратов.

Причем, часть моих аргументов в защиту нынешнего
Рефала Плюс совпадет с теми, которыми он объяснил
преимущества SML-я, -- "богатство языка".
Также соглашусь с ним в вопросе, что SML более богатый язык,
чем Рефал Плюс (по числу понятий, считаемых штуками или
попугаями -- кто как хочет;-) -- именно поэтому я сейчас
делаю большой проект на SML-е, а не на Рефале.
Но, заметим, и Рефал Плюс становится "богаче" от включения в него возвратов.

Однако, "богатство" языка надо считать, конечно, не "попугаями",
а сопоставляя языковые механизмы и понятия с *целями языка*.

Но проблема здесь в том, что целей у языков всегда *много*.
(В частности, у авторов и пользователей они часто не совпадают. ;-)
Если бы была одна цель, то не было бы никаких трудностей решить: "это нужно, а это нет".

Углубляясь в эту проблему по-хорошему, надо бы:
  - во-первых, сделать цели явными, выразив их словами
    (насколько это удастся нашему слабому интеллекту),
  - во-вторых, раскидать решения по целям:
    "это для этого, а то -- для того, а это для того и другого".

Пункт "во-первых" -- самый трудный, так как по жизни все время
наблюдается такая картина, что идет страстная дискуссия, а
один имеет в виду одну цель, а другой другую.
(И самое занятное, что люди не любят эксплицировать цели... --
но это уже из области психологии).

Я не берусь сейчас сразу копнуть этот вопрос на подобающую глубину,
а ограничусь лишь первой конкретизацией "с птичьего полета".

Цели создания формальных языков -- как математических, так и программирования --
грубо можно подразделить на два класса:
  - Внешние:
        для каких видов деятельности предназначен язык?
        как он их удовлетворяет?
        какая у языка парадигма (=методы решения задач)? и т.п.;
  - Внутренние:
        как состыкованы "колесики" языка?
        насколько его понятия ортогонализированы?
        каким формальным свойствам удовлетворяют?
        как их "крутить"? -- в смысле делать *формальные* преобразования и т.п.

Зададим провокационный вопрос:

  - А могут ли у этих целей быть приоритеты по отношению друг к другу?

С одной стороны, мне кажется, что

    авторы языков заметно разделяются на приверженцев
    либо "внешних", либо "внутренних" целей
    (по крайней мере в момент создания языка, а потом,
    как любые нормальные люди, могут менять точку зрения).
    (Первые -- это как бы "физики-лирики", а вторые -- "математики".;-)
    И это отражается на их созданиях!

С другой стороны, я все больше укрепляюсь в уверенности, что

    (искусственные) языки в процессе своей эволюции
    должны переходить от стадии приоритетности внешних целей
    к стадии приоритетности внутренних целей:
    - сначала создаем язык, подгоняя под некоторые основные виды
      деятельности, для которых мы (считаем, что) его придумываем;
    - а потом шлифуем колесики языка, чтобы они образовывали
      стройную формальную систему.

Замечание 1:
    Второе -- это не блажь, а способ *расширения числа целей*,
    для которых можно использовать язык. А это всегда благо!
    В частности: язык становится объектом *формального* анализа,
    преобразований и т.п.

Замечание 2:
    Сразу перейти от одной стадии к другой пока еще никому не удавалось.
    Такая эволюция наблюдается у *всех* (формальных) языков.
    (Это не трудно объяснить: возрастает число целей, ради которых
    используется язык. Автор не в силах предусмотреть сразу все --
    да и не нужно это ему.;-)

Замечание 3:
    Первая стадия создания языка -- это "искусство", "акт прозрения", вторая -- "ремесло".
    В нынешние времена (после 40 лет активного творчества языков
    программирования) уже, пожалуй, можно говорить о "профессионализме"
    в области языкотворчества и задавать такие вопросы:
    "Профессионально ли (=достаточно ли 'ремесленно') сделан данный язык?"
    Еще лет через 40 методики "ремесленного" создания формальных
    языков войдут в "классические" университетские курсы.

    Это уже наблюдается, но еще должны пройти процессы
    "естественного отбора" между ними и "матерения".
    Пока еще не созданы ни "общая теория методов создания языков",
    ни "общая теория объединения языковых парадигм",
    (как и в физике нет "общей теории объединения элементарных частиц";-).
    Это не случайно: в частности, языки должны еще пройти
    испытание на прочность метавычислениями, которые
    сами далеки от "матерого состояния".

Теперь мне пора спуститься "с небес" и высказаться "поименно":

  - От ранний Рефалов к Рефалу-5 -- это линия развития,
    когда, как мне кажется, внешние цели имеют приоритет над внутренними.

    Лакмусова бумажка определения этой стадии:
    Часто ли приходится слышать такие аргументы:
    "Это не будем включать в язык, так как это 'никому не нужно'".
    "Поставим 'запятую' здесь, так как это 'удобнее для человека'".

  - Рефал Плюс -- как мне кажется -- это язык, находящийся
    на стадии развития, когда уже шлифуются внутренние понятия.

    Наша последняя дискуссия, проходящее через 10 лет после
    его создания, очередное тому подтверждение:
    Мы обсуждаем не вопрос "удобно ли 'для человека' то, что
    по формальной семантике 'уровень отсечения источника равен 0'?"
    -- понятно, что "простым пользователям" на это наплевать, --
    а вопросы: "как это согласуется с другими понятиями?"
    "какие *формальные* свойства при этом сохраняются или нарушаются?"
    "какие *формальные* преобразования удобно или неудобно делать?"
    и т.п.

Упражнения:
  - На какой из указанных стадий развития находятся SML, Haskell, XSLT, C#?
  - Попытайтесь угадать "из общих соображений" про C#,
    не читая его описания, а только зная, какие лозунги произносит Билл Гейтс,
    а также историю фирмы Майкрософт.
  - Добавьте в этот список свои любимые языки и определите их стадию.

Успехов!

Андрей.

PS. А частный вопрос, который заварил эту дискуссию:
"Быть или не быть в 'функциональном языке' механизму возвратов?" --
пусть останется на другой раз. Он достаточно интересен и сам по себе. ;-)



This archive was generated by hypermail 2b25 : Mon Oct 25 2004 - 21:24:58 MSD