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-м веке. Что же касается Рефала Плюс, то до изготовления, скажем, суперкомпилятора для него - дело так и не дошло. СР