2018-02-13 0:49 GMT+03:00 Александр Коновалов <a.v.konovalo...@mail.ru>:

*«Вот, во втором издании книги … есть глава, в которой подробно описан
> виртуальный код, и как в него Рефал Плюс компилируется.»*
>
> Новая глава во втором издании — это «Принципы реализации Рефала Плюс»?
> Т.е. для экономии времени можно начать с неё?
>

Да. Сам Рефал Плюс - тот же самый. Но, правда, кое-какие косметические
"подкрутки" во входном языке сделали. Например, заменили имена функций,
вроде, "+"  на текстовые идентификаторы. Это сделали, чтобы "улучшить"
интерфейс с Явой. Но, может быть, лучше было бы строго придерживаться того
входного языка, что был в первом издании.


> *«А другой мотив был - сделать выразимым на Рефале Плюс то, что было
> выразимо на уровне виртуального кода (= языке сборки).»*
>
> На первый взгляд это воспринимается как «хвост виляет собакой». Но надо
> почитать соответствующую главу, вероятно, станет понятнее.
>

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

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


> Сначала наличие оператора цикла в функциональном языке мне (как ценителю
> функционального программирования) немного рвало шаблон. А после прогонки я
> стал воспринимать его более спокойно. Довольно интересная и в чём-то даже
> красивая конструкция, вполне в духе Рефала Плюс. Правда в синтаксисе
> немного странно воспринимается источник, в котором используются переменные,
> присваиваемые дальше по тексту.
>

С точки зрения "чистого искусства" можно считать, что решалась задача: "Что
можно втащить в Рефал из Пролога, не слишком разваливая функциональность
Рефала.


> С другой стороны, наличие такого оператора цикла не мешает функции быть
> чистой снаружи. Я, как ценитель функционального программирования,
> предпочитаю функции, не зависящие от глобального состояния (статических
> ящиков, копилок) — всё, чем она оперирует, известно из входного и выходного
> формата.
>

Да, это верно. Сам по себе $iter функциональность подрывает только
стилистически, но не по существу. Ибо фактически он является просто формой
записи хвостовой рекурсии.

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

А "правильный" (с "религиозной" точки зрения) способ работы с переборными
алгоритмами был описан вот в этой "культовой статье":

   - Philip Wadler. 1985. How to replace failure by a list of
successes. In *Proc.
   of a conference on Functional programming languages and computer
   architecture*, Jean-Pierre Jouannaud (Ed.). Springer-Verlag New York,
   Inc., New York, NY, USA, 113-128.
   https://rkrishnan.org/files/wadler-1985.pdf

А ещё, красиво получилось в примере — функция с повторными переменными
> полностью прогналась, и операция анализа (причём чисто анализа) оказалась
> описана циклом. Но вот все написанные выкладки довольно сложно
> алгоритмизировать (по крайней мере я пока не знаю, как это делается).
> Сергей! Уж не поэтому ли Вы в препринте написали, что преобразования
> прогонки на Рефале-4 есть исчисление, а не алгоритм?
>

Да, прогонка у Турчина - это "исчисление", а не алгоритм. А на её основе
можно уже делать что-то более сложное. Например, УРА или суперкомпиляцию. А
при превращении исчисления в алгоритм появляются всякие "эвристики" и
"стратегии".

Поэтому, для начала, надо было придумать хотя бы исчисление. Кстати,
Лейбниц когда-то придумал именно "исчисление бесконечно малых", которое
состояло из правил. А как применять правила - это уже человек должен был
решать. Хотя, при этом, Лейбниц мечтал о том, чтобы "заменить размышления
вычислениями". Т.е. - реально он мечтал об алгоритмах. Но программы
аналитического интегрирования, например, появились только в 20-м веке.

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

СР

Ответить