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