Сергей! «Сам Рефал Плюс - тот же самый. Но, правда, кое-какие косметические "подкрутки" во входном языке сделали.»
Т.е. в принципе, пролистать начало всё же стоит. А на счёт <"+" …> → <Add …>, запись через "+" не даёт экономии даже в символах. Это в Рефале-5 получается короче — <+…>. «А когда "люди" исчезли, то стало хорошо!» Понимаю. Сам разрабатываю Рефалы, используемые только в раскрутке и самоприменении своих компиляторов. Василий Стеллецкий, я думаю, тоже с нами согласится. :-) А если не жалко своих собственных старых программ, то можно невозбранно ломать и обратную совместимость. «Поэтому многие вещи и Рефале Плюс и выглядят как "искусство для искусства". Ставятся некоторые формалистические задачи - и успешно решаются. А что язык получился при этом слишком сложный, с точки зрения "простого народа", так ведь тут по принципу: "нет народа - нет проблем".» Ну, есть нюанс. Может получиться в итоге и так: «нет народа — и не будет». Поэтому я сделал из «Простого Рефала» Рефал-5λ полностью обратно совместимый с Рефалом-5. Хотя толку от этого… «С точки зрения "чистого искусства" можно считать, что решалась задача: "Что можно втащить в Рефал из Пролога, не слишком разваливая функциональность Рефала.» На Прологе я не программировал, поэтому задача мне несколько чужда. «А более антифункциональная вещь в Рефале Плюс - это то, что неуспехи могут вылезать за пределы функции. Тут уже явной прологовщиной припахивает.» На мой взгляд, вызовы чистых функций, функций, возвращающих неуспех и функций «ввода-вывода» (недетерминированных/с побочными эффектами) должны различаться синтаксически. Например, имена последних двух категорий должны начинаться/заканчиваться соответственно на ? и !. Т.е. это не соглашение, а требование синтаксиса языка. И функция ввода-вывода не может возвращать неуспех. Да, и функции ввода-вывода не могут вызываться в условиях Рефала-5 (или эквивалентных им конструкциях других диалектов). Соображения — в первую очередь стилистические. Второстепенное — возможность оптимизации и более эффективной кодогенерации (в том числе включая и распараллеливание). «А "правильный" (с "религиозной" точки зрения) способ работы с переборными алгоритмами был описан вот в этой "культовой статье":» Надо будет почитать. «Что же касается Рефала Плюс, то до изготовления, скажем, суперкомпилятора для него - дело так и не дошло.» Значит, всё впереди. Хотя, казалось бы, с препринтов 30 лет прошло. Спасибо за ответ, Александр Коновалов From: sergei.romane...@gmail.com [mailto:sergei.romane...@gmail.com] On Behalf Of Sergei Romanenko Sent: Tuesday, February 13, 2018 1:22 AM To: Refal Botik <refal@botik.ru> Subject: Re: Прогонка для Рефала-4 (Плюс) и $iter 2018-02-13 0:49 GMT+03:00 Александр Коновалов <a.v.konovalo...@mail.ru <mailto: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-м веке. Что же касается Рефала Плюс, то до изготовления, скажем, суперкомпилятора для него - дело так и не дошло. СР