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


Subject: Re: Evolution of programming languages Was: Об отсечениях внутри блока.
From: Andrei Klimov (Andrei.Klimov@supercompilers.com)
Date: Thu Nov 30 2000 - 16:18:04 MSK


Добрый день!

Хочу лишь усилить последнюю ремарку Аркадия.
Процитирую ее сюда, оставив его письмо ниже без изменения:

> Теперь было бы интересно узнать, как обстоят дела с отсечениями в АС и его реализации?
> Нет ли там ограничения, исходящего от Рефала Плюс: что нет переходов по отсечениям изнутри
> блока в роли источника. Надеюсь, что нет, иначе о перспективе перевода с Рефала-6
> в АС можно будет забыть.

А это забывать нельзя! -- Ну, точнее говоря: "можно", но лишь
посчитав, что Рефал-6 *неправильно* ухватывает логику Рефалов.

Обобщение Рефалов -- это одна из основных цель разработки AC!

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

А абстрактный синтаксис Рефалов -- АС --
это по определению логика чистой воды.
Никаких дизайновых ограничений для него не существует!
Поэтому если он не выполнить роль *Рефал-логики*, то
-- извините за пафос -- грош ему цена! ;-)

Кстати, пожалуй, правильнее было бы называть:
АСС -- абстрактный синтаксис и *семантика*,
ибо нам нужна формальная система, в которой
был бы определен не только синтаксис, но и все.

Успехов!

Андрей.

----- Original Message -----
From: "Arkady Klimov" <klark@bagirra.net>
To: "Andrei Klimov" <Andrei.Klimov@supercompilers.com>; "refal" <refal@botik.ru>
Cc: "Fedor Romanenko" <fedor@blues.ru>
Sent: Thursday, November 30, 2000 07:52
Subject: Re: Evolution of programming languages (Was: Об отсечениях внутри блока.)

> Привет всем.
>
> Возможно, я в своем письме "погорячился" с сомнениями в ценности откатов,
> на самом деле они (сомнения) касались ТОЛЬКО особенных средств
> УПРАВЛЕНИЯ откатами (отсечений и заборов), сами же откаты
> (откатные функции, прозрачные блоки) я, напротив, очень ценю.
>
> В связи с этим хочу высказаться по поводу дизайна откатности в Рефале-Плюс и Рефале-6.
> Пожалуй, тут самая большая разница между ними.
> Основные понятия, связанные с откатностью - это понятие откатной/безоткатной
> функции, прозрачного/непрозрачного блоков, и семантика
> знака равенства. (К отсечениям и заборам
> вернемся позже). По этим понятием сравнение выглядит так:
>
> В Р+ - по умолчанию функции безоткатные, по специальному указанию - откатные,
> аналогично блоки: по умолчанию непрозрачные, по специальному указанию - прозрачные.
> В Р6 - все функции откатные (потенциально), все блоки прозрачные.
> Согласно моим представлениям, автор Р+ отказался от решения считать функции и
> обычные блоки {...} прозрачными по умолчанию только из соображений
> преемственности с Рефалом-5, где все блоки непрозрачные,
> при этом как бы "наступая на горло" своим представлениям
> о логичности дизайна (возможно я чересчур категоричен).
> Но, к сожалению, жизнь показала, что эта "совместимость"
> так и осталась невостребованной: если по-мелкому, то
> общее подмножество, можно сказать, есть и при альтернативном решении
> (если говорить о программах, которые не завершаются аварийно),
> а если по-крупному, так все равно приходится строить конверторы.
> И, опять же к сожалению (но это моя субъективная эмоция),
> Рефалу Плюс теперь приходится и дальше оставаться
> в рамках этого же дизайна, уже для совместимости с самим собой.
> В этом смысле Рефал-6 имеет альтернативный дизайн,
> который внутренне я считаю более логичным и потому не видел
> целесообразности отказываться от него в движении к Рефалу Плюс.
>
> Теперь о равенстве. Нагрузка на этот знак тоже разная, причем и тут и там его семантика
> является обобщением его семантики в Рефале-5, но разными обобщениями. Напомню:
> В Р+ равенство означает откат на уровень функции (с точки зрения заборов и отсечений оно
> равносильно запятой, перед которой стоит достаточное количество отсечений).
> В Р6 равенство означает абсолютную преграду для откатов, в силу чего в случае неуспеха
> справа от него просто происходит авария (unexpected Fail или "отождествление невозможно",
> в нынешнем рефале-6 аварии не перехватываются, в Рефале Плюс есть перехваты аварий).
> В связи с этим уместно заметить, что если рассмотреть Базисный подмножества
> Рефала-5 и Рефала-6, то семантики будут совпадать полностью даже с точки зрения аварий,
> несмотря на откатность функций рефала-6: этот откат всегда будет пойман равенством
> перед правой частью, породившей этот вызов. Даже локализация аварии будет такой же,
> благодаря тому, что после равенства все вызовы метятся компилятором как безоткатные.
>
> Теперь вернемся к вопросу о блоках: в рефале-6 все блоки прозрачные. А как сделать блок
> непрозрачным? Очень просто - поставить перед ним равенство вместо запятой. Это если
> он был результатным, то есть каждая его ветвь начинается с результатного выражения.
> А если он был образцовым, то можно поставить равенство чуть раньше, а если это
> неадекватно (например из источника тоже могут быть откаты), то можно,
> используя новую е-переменную ez, заменить :{ на :ez = ez:{. (Есть еще возможность просто
> заменить одиночное двоеточие на двойное). Также можно обойтись и с
> телом функции, начав его с ez = ez: . И получается, что практическая надобность
> в безоткатности как специальном средстве языка отпадает.
> Таким образом, иная семантика равенства в рефале-6 и отсутствие явного указания
> о безоткатности - очень связанные аспекты. Аналогично с функциями: можно сказать,
> что откатность функции в Рефале+ управляется декларацией функции, в рефале-6 -
> вызовом (точнее, контекстом вызова).
>
> А насчет той роли, которую равенство играет в Рефале Плюс - так она и там выразима через
> отсечения, как уже было замечено. При переводе в рефал-6 именно так и нужно будет его выражать.
>
> Теперь перейдем к отсечениям и заборам. В целом это решено примерно одинаково,
> различия есть в обозначениях и в том, что было замечено в предыдущих письмах:
> в Р+ из блока в роли источника не может выйти усиленный отсечением неуспех, в Р6 может.
> Конечно, было бы интересно проанализировать и понять, с чем это связано. Возможная
> гипотеза - блок в роли источника Р+ трактует как результат раскрытия вызова функции.
>
> Вообще, думаю, прав Андрей К, что нужно "поверить алгеброй гармонию":
> испытать колесики дизайна на оселке метавычислений. Раскрытие вызова - это
> как раз элемент метавычислений. С этой точки зрения, например, семантика равенства
> в рефале Плюс может оказаться не вполне адекватной, если, конечно,
> его не заменить на точное число отсечений еще при вводе.
>
> Осмелюсь высказать такую гипотезу, которая видимо, верна как для Р+ так и для Р6:
> если заборы и отсечения "правильно сбалансированы (неформально: для каждого
> отсечения соответствующий забор поставлен явно), то (при условии замены = на
> отсечения в Р+) можно будет выполнять раскрытие вызовов (на верхнем уровне
> выражения) в блоки, просто вставляя тело функции (сохряняя откатность как
> прозрачность блока в Р+) через двоеточие после аргумента.
> Обратную свертку блока в фукцию можно делать только с блоками-источниками Рефала Плюс,
> а с завершающими блоками, и с любыми блоками Рефала-6 этого, вообще говоря, делать нельзя
> (из-за возможных избыточных отсечений внутри блока).
>
> Теперь было бы интересно узнать, как обстоят дела с отсечениями в АС и его реализации?
> Нет ли там ограничения, исходящего от рефала Плюс: что нет переходов по отсечениям изнутри
> блока в роли источника. Надеюсь, что нет, иначе о перспективе переводе с Рефала-6
> в АС можно будет забыть.
>
> Аркадий
>
> ----- Original Message -----
> From: Andrei Klimov <Andrei.Klimov@supercompilers.com>
> To: <refal@botik.ru>
> Cc: Fedor Romanenko <fedor@blues.ru>
> Sent: Tuesday, November 28, 2000 2:20 AM
> Subject: Re: Evolution of programming languages (Was: Об отсечениях внутри блока.)
>
>
> | Сергей, добрый день!
> |
> | > Добрый день!
> | >
> | > > AнК:
> | > > Также соглашусь с ним в вопросе, что SML более богатый язык,
> | > > чем Рефал Плюс (по числу понятий, считаемых штуками или
> | > > попугаями -- кто как хочет;-) -- именно поэтому я сейчас
> | > > делаю большой проект на SML-е, а не на Рефале.
> | > > ...
> | > > Однако, "богатство" языка надо считать, конечно, не "попугаями",
> | > > а сопоставляя языковые механизмы и понятия с *целями языка*.
> | >
> | > СР:
> | > Понятное дело... Но ведь я и не сказал, что SML - "хороший" язык, потому что
> | > в нем много всего! Наоборот, я похвалил его как раз за то, чего в нем нет. И
> | > рассуждал с точки зрения пользователя определенного типа: а именно, такого,
> | > который хочет строить свой мир из конструктора (поскольку мне самому это
> | > нравится). Но ведь такой способ работы устраивает не всех!
> | >
> | > Сергей
> |
> | АнК:
> | Согласен, "конструктность" -- очень хорошая цель для языка!
> | (В скобках заметим: *одна из* целей).
> |
> | С этой точки зрения введение откатов и откатных функций
> | в Рефал повышает его "конструктность".
> |
> | (Хочу подчеркнуть, что я сейчас говорю только о сравнении
> | разных версий Рефала между собой, а не о Рефалах и SML-ях.
> | Последние слишком различаются по устройству и удовлетворяют
> | слишком разным целям.)
> |
> | Однако, откатность -- это лишь одно из колесиков Рефала Плюс.
> | Если откатность не нравится, надо ставить вопрос всерьез и по крупному:
> |
> | Достичь *тех же целей* без откатности!
> |
> | Если кто-то сможет это сделать, это будет прекрасным
> | продолжением эволюции Рефала во "второй стадии".
> |
> | Но сначала надо сформулировать хотя бы часть целей.
> | Это нетрудно, поскольку Сергей Романенко сделал это сам
> | 10-15 лет тому назад (см. его препринт "Рефал-4..."):
> |
> | Сделать выразимым на самом языке те преобразования
> | (разные оптимизации, прогонку и т.п.),
> | которые до этого формулировались на других языках:
> | "языке сборки", Рефал-графах и т.д.
> |
> | И надо заметить, что эта "сумасбродная" цель была достигнута
> | в Рефале Плюс без разрушения многих других свойств Рефала!
> | "Язык сборки" и Рефал-графы тоже удовлетворяют этой цели,
> | но это (мягко говоря) уж очень другие языки.
> |
> | А для чего это нужно? -- Назову 2 "мелочи" и одну "крупную цель".
> |
> | "Мелочи", уже использованные на практике:
> |
> | - основные оптимизации делаются (в новой реализации Рефала Плюс --
> | не так ли? -- обращаюсь к трем А: Абрамову, Андрею и Антону)
> | в независимом как от входного языка, так и от выходного
> | отображения виде -- на AS по терминологии Абрамова;
> | (не говорю уж о том, что их можно разрабатывать, преподавать,
> | строить теорию -- и все это в человеческом виде).
> |
> | - нет проблемы естественного преобразования выхода
> | суперкомпилятора(Рефал-графов) в Рефал (Плюс):
> | понятий достаточно, не нужно порождать вспомогательные функции и т.п.;
> | (это использовалось 2 раза: мной в 90-м году для суперкомпилятора
> | Турчина 90-го года и в этом году Антоном О. и Юрой К. для Scp4).
> |
> | Крупная цель:
> |
> | Ребята, ну, мы ж все время говорим о метасистемном переходе
> | и метавычислениях -- о том, что тексты на языке должны
> | стать объектом преобразований! -- и чем легче, проще и
> | выразимее это будет, тем...
> |
> | Андрей.



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