Буду отвечать по тексту, и прошу прощения за задержку:

26 июля 2017 г., 21:24 пользователь Александр Коновалов <
a.v.konovalo...@mail.ru> написал:

> Добрый день, Аркадий!
>
>
>
> Большое спасибо за развёрнутый ответ. Сейчас я задам несколько развёрнутых
> вопросов. Заранее прощу прощения у подписчиков за многабукаф.
>
>
>
> *… **а именно, с включением вложенных анонимных функций -- аналога
> лямбда-абстракции.…*
>
>
>
> Эта идея не моя, впервые она была предложена Сергеем Скоробогатовым
> в диалекте Refal-7 в 2006 году:
> https://waybackmachine.org/web/20070813011422/http://iu9.bms
> tu.ru/science/refal.pdf
> <https://waybackmachine.org/web/20070813011422/http:/iu9.bmstu.ru/science/refal.pdf>
> (даю ссылку на Wayback Machine, поскольку с сайта кафедры этот файл
> удалили). Вероятно, вы знакомы с ним (и со Скоробогатовым, и с диалектом),
> но ссылку я даю для всех читателей рассылки.
>
Да, конечно, Сергея я хорошо знаю, также немного знаком с проектом Рефал-7.
Насколько я понял, там у него вложенные именованные функции, а у Вас только
анонимные, да? И отсутствие именованных для случая рекурсивных функций вы
компенсируете использованием комбинатора Y. Это действительно очень круто и
интересно.

>
>
> *…(только поверхностно посмотрел доки)…*
>
>
>
> Основная дока (manul.pdf
> <https://github.com/bmstu-iu9/simple-refal/blob/master/doc/manul.pdf>),
> к сожалению, (а) недописана, (б) частично неактуальна. Основной массив
> знаний (если углубляться) скрывается тут: https://github.com/bmstu-iu9/s
> imple-refal/issues (включая закрытые задачи). Но на беглый просмотр там
> слишком много.
>
>
>
> *…было бы интересно и важно наработать множество примеров и техник с
> использованием этих новых средств, демонстрирующих их удобство и
> преимущество.*
>
>
>
> Пользуюсь вложенными функциями уже с 2009 года, мне нравится. Когда
> добавил их в язык, почувствовал прирост своей производительности,
> по сравнению с подмножеством Базисного Рефала. Пример их использования
> (несколько извращённый) вот:
> https://github.com/bmstu-iu9/simple-refal/tree/master/doc/examples/inifile
> Более нормальные примеры использования есть в исходных текстах самого
> компилятора.
>
>
>
> *Есть основания полагать, что Рефал создавался Турчиным именно как язык
> первого порядка, и в этом была интенция автора. … Рефал-5 -- это максимум
> того, что он был готов допустить.*
>
>
>
> Есть у меня идеи по статической типизации Рефала (но о них сейчас пока
> рано, через несколько месяцев будет в самый раз), и обдумывая их, я понял
> гений Турчина. РЕФАЛ-5 — это довольно компактное и выразительное
> подмножество, которое разрабатывалось не только и не столько для
> промышленного программирования (хотя писать большие программы на нём
> можно — SCP4), сколько для автоматического анализа. Поэтому и язык
> первого порядка, и нет неуспехов (но есть условия), и замкнутый набор
> встроенных функций. Мои идеи по выводу и проверке типов хорошо ложатся
> на РЕФАЛ-5, в то время как с функциями высшего порядка, неуспехами и
> сторонними функциями всё не так очевидно.
>
Это интересно. Когда-то я тоже думал о выводе статитческих типов типов, но
до реализации руки не дошли.

>
>
> А в чём согласование с интенцией первого порядка таких особенностей, как
> выражения с двусторонним доступом, концепция поля зрения и динамическая
> типизация? Мне это немного не очевидно. И что подразумевается под явной
> активацией (мне не знаком этот термин)?
>
Да, это неочевидная, может даже спорная мысль.  Я имел в виду, что в
соответствие с интенцией первого порядка хорошо, когда все объекты могут
иметь образы на бумаге, а еще лучше, когда объект можно отождествить с его
образом. А на бумаге мы обычно пишем тексты, которые имеют начало и конец,
могут содержать вложенные структуры, то есть быть деревом. И обрабатывать
такие структуры уместно с любого конца. А когда всякий объект тождествен
своему текстовому структурному образу, естественно говорить о динамической
типизации, а не о статической (статический тип это что-то дополнительное к
объекту, а динамический он тут же в образе представлен). Концепция поля
зрения - это полный образ всей переменной части состояния рефал машины, для
обычных языков это стек фреймов или даже что-то более сложное и не имеющее
явного "бумажного" образа.

Явная активация это такая нотация, при которой вызов функции синтаксически
отличается от терма, содержащего символ функции и параметры, и который
можно активировать позже. Насколько я понимаю, этим рефал отличается от
лиспа, где терм (F x y) в одном контексте интерпретируется как вызов
функции F, а в другом (под Quote) как пассивный список из трех элементов.
Явная активация в каком-то смысле тоже "вытекает" из принципа
тождественности объекта его образу (что вижу, то и имею, ничего лишнего или
подразумеваемого).



> Вообще, я недавно начал смотреть лекции Абрамова по метавычислениям и
> задумался: а каким должен быть промышленный инструмент программиста для
> выполнения метавычислений? Подумалось, что это должен быть язык
> программирования и компилятор к нему, с хорошей поддержкой рефлексии
> (возможность как разобрать в рантайме AST любой функции, так и наоборот,
> её построить из AST и тут же вызвать), с возможностью интерпретации
> во время компиляции (как в C++14 constexpr), с возможностью сдампить
> набор функций в готовый для выполнения модуль. И если в такой среде
> реализовать специализатор как обычную библиотечную функцию, то вполне
> реализуются все три проекции Футамуры-Турчина. А потом вспомнил «пятикнижие
> Турчина» — описанный там язык и описанная там среда вполне подходят под это
> описание, разве что constexpr там нету.
>
 Да, надо "всего лишь" уметь извлекать функции из поля памяти в метакоде и
класть обратно. Между прочим, в рефале-6 для этого почти все есть, надо
только чуток модифицировать (и перекомпилировать) компилятор (чтобы
представление в метакоде оставалось где-то в конце выражения, являющегося
кодом языка сборки). Проблема лишь в том, чтобы договориться о формате
метакода, а на это не хватило духу.

>
>
> *Функциональные объекты этим условиям не удовлетворяют, они
> эктенсиональны: функцию можно вызвать, но нельзя препарировать, рассмотреть
> ее устройство.*
>
>
>
> Да, кстати. У меня (и у Скоробогатова в Refal’е-7) функциональные объекты
> сопоставляются с s-переменными.
>
Да, наверно это правильно. А функция TYPE их как-то выделяет?
А замыкание, это наверно уже не символ, а скобочный терм, да?

>
>
> *Но конечно, это не значит, что последователи не вправе делать по-своему,
> с опорой на новые знания и опыт. И может быть, особенности Рефала дадут
> возможность по новому увидеть и понять функциональные объекты.*
>
>
>
> Я разрабатывал (и разрабатываю) диалект Рефал-5λ (который сначала
> назывался Простой Рефал), ориентированный на промышленное программирование.
> Вложенные функции повышают продуктивность программиста — они есть.
> Необходимо расширение возможностей языка — библиотека функций не закрыта,
> можно написать свою функцию на Си++. Даже больше. Есть удобный синтаксис
> для написания таких функций — вставки кода на Си++ (
> https://github.com/bmstu-iu9/simple-refal/issues/11,
> https://github.com/bmstu-iu9/simple-refal/blob/master/src/sr
> lib/Library.sref). Т.е. не надо править и менять интерпретатор для
> написания ещё одной примитивной функции. Сейчас я работаю над унификацией
> с РЕФАЛом-5 (планирую сделать точное надмножество).
>
>
>
> *Что касается меня, как приложившего руку к созданию Рефала-6, могу только
> сказать, что в последние годы, уже лет 15, выступаю только как пользователь
> "своего" диалекта и пока вполне им доволен. Но это, конечно, не
> промышленное использование. Есть у Рефала-6 еще по-меньшей мере один
> активный пользователь - Игорь Щенков, и он время от времени высказывает
> претензии. Но к сожалению сил на них активно откликаться сейчас у меня
> очень мало. Се ля ви.*
>
>
>
> Когда я начинал программировать на Рефале, я начал с РЕФАЛа-5, пару
> программ написал на Рефале-6, а потом начал писать свой диалект J.
> Поэтому с идеями Рефала-6 знаком, программы читать могу, но программировать
> навыка нет, извините, что не стал вашей пользовательской базой. Кстати,
> завидую вам. Ваша пользовательская база по-меньшей мере в два раза больше
> моей J.
>

Пока я писал, в ветке произошла дискуссия о стилях написания кода. И хотя я
не хотел встревать, все-таки это дело вкуса во многом, но захотелось
высказаться по поводу длины имен переменных. Мне самому часто приходится
колебаться между длинным значимыми и однобуквенными (кстати поэтому я в
рефале-6 сохраняю бесточечную запись: e1, sA, ...). И в пользу коротких
есть следующий аргумент: Рефал, в отличии от классических императивных
языков является двумерным: предложение естественно пишется в строку, а
группа предложений в столбец. Но в предложении есть много чего: левая
часть, правая часть, доп.условия, и если имена длинные, то уж очень длинно
получается. А ломать строку в столбец - значит терять выразительные
возможности горизонтального измерения. Поэтому с однобуквенными именами
получатся нагляднее. Причем это особенно важно, когда левых частей много,
они длинные и мало отличаются. Тогда при записи их непосредственно друг под
другом лучше видны все отличия. Проиллюстрирую Вашим примером
https://github.com/bmstu-iu9/simple-refal/blob/master/doc/examples/inifile/inifile.sref
Там в конце есть вызов Reducе, в котором вложен функциональный блок с
шестью предложениями. Если бы их записать в шесть строк, с выравниванием,
думаю, стало бы легче понимать. Но тогда лучше сильно сократить имена.

Кроме того, имена нужны по семантике для того, чтобы сразу видеть, где
имена одинаковые, а где разные. С короткими (однобуквенными) это легче.

А для понимания смысла, я обычно предваряю комментарием, где поясняется
смысл каждой переменной.

Аркадий.


>
> *From**:* Arkady Klimov [mailto:arkady.kli...@gmail.com]
> *Sent**:* Wednesday, July 26, 2017 2:23 PM
> *To**:* refal@botik.ru
> *Subject:* Re: FW: Рефал умер?
>
>
>
> Здравствуйте, Александр!
>
>
>
> Рефал жив людьми, которые им занимаются, пользуются и т.п., и вы своей
> деятельностью вносите свой вклад. Причем я считаю ваш проект в этом смысле
> очень ценным, поскольку в нем делается попытка привнести в Рефал функции
> высших порядков на более продвинутом уровне, чем это делается Рефалами
> прежними, а именно, с включением вложенных анонимных функций -- аналога
> лямбда-абстракции. Можно спорить, надо ли это, какой в этом
> "практический"смысл, но в любом случае такое исследование и ценно и
> поучительно. Я еще плохо знаю о ваших достижениях (только поверхностно
> посмотрел доки), но думаю, что на этом этапе было бы интересно и важно
> наработать множество примеров и техник с использованием этих новых средств,
> демонстрирующих их удобство и преимущество.
>
>
>
> Правда, уже сейчас можно высказать и возражение. Есть основания полагать,
> что Рефал создавался Турчиным именно как язык первого порядка, и в этом
> была интенция автора. И другие особенности языка также были с этой
> интенцией согласованы, как-то: выражения с двусторонним доступом, явная
> активация, концепция "поля зрения", динамическая типизация (отсутствие
> статической типизации). Смысл в том, что любой объект, значение переменной,
> может быть рассмотрено во всех деталях, записано на бумаге, и при этом все,
> что будет видно, и только оно, может использоваться в вычислениях.
> Функциональные объекты этим условиям не удовлетворяют, они эктенсиональны:
> функцию можно вызвать, но нельзя препарировать, рассмотреть ее устройство.
> Это надлежит делать на метауровне, когда одной программе доступен код
> другой. И насколько я понимаю, попытки вводить абстракции, функции высших
> порядков и т.п. в базовый язык встречали сопротивление Турчина. Рефал-5 --
> это максимум того, что он был готов допустить. Многие дополнительные
> возможности Рефала Плюс он уже считал излишними, кажется, даже динамические
> ящики.
>
>
>
> Но конечно, это не значит, что последователи не вправе делать по-своему, с
> опорой на новые знания и опыт. И может быть, особенности Рефала дадут
> возможность по новому увидеть и понять функциональные объекты.
>
>
>
> Что касается меня, как приложившего руку к созданию Рефала-6, могу только
> сказать, что в последние годы, уже лет 15, выступаю только как пользователь
> "своего" диалекта и пока вполне им доволен. Но это, конечно, не
> промышленное использование. Есть у Рефала-6 еще по-меньшей мере один
> активный пользователь - Игорь Щенков, и он время от времени высказывает
> претензии. Но к сожалению сил на них активно откликаться сейчас у меня
> очень мало. Се ля ви.
>
>
>
> С уважением,
>
> Аркадий Климов,
>
> *с.н.с. ИППМ РАН,*
>
> *+7(499)135-32-95*
> *+7(916)072-81-48*
>
>
>
> 25 июля 2017 г., 15:33 пользователь Александр Коновалов <
> a.v.konovalo...@mail.ru> написал:
>
> В начале 2000-х годов язык Рефал ещё как-то развивался, выходили новые
> версии компиляторов: РЕФАЛ-5, Рефал-6, была некоторая активность на сайте
> http://wiki.botik.ru/Refaldevel/, был написан компилятор SCP4. Я читал
> старый архив рассылки refal@botik.ru, в нём тоже были обсуждения Рефала
> и не только (например, сравнивали его с Си++). Потом, практически синхронно
> со смертью Турчина, активность спала практически до нуля (архива рассылки
> refal-devel в сети не нашёл, судить не могу).
>
>
>
> В текущей рассылке (судя по новому архиву) в основном рекламируются
> конференции по метавычислениям, выкладываются сканы старых архивных
> материалов и Сергей Михайлович Абрамов поздравляет с Новым Годом.
>
>
>
> Я правильно понимаю ситуацию, что Рефал появился не от хорошей жизни:
> Турчину нужен был инструмент (формальный язык) для выражения идей
> метавычислений, суперкомпиляции, существовавшие тогда Фортран и Алгол для
> этого не подходили, а о Лиспе в СССР никто тогда не знал? И теперь, когда
> появились новые, современные функциональные языки программирования, для
> реализации идей суперкомпиляции стали применять уже их? Те же Юрий Климов
> и Илья Ключников свои суперкомпиляторы писали отнюдь не на Рефале. А язык
> Рефал остался в прошлом.
>
>
>
> И то, чем я занимаюсь (https://github.com/bmstu-iu9/simple-refal
> (смотреть ветку refal-5-lambda), https://github.com/Mazdaywik/mrefal) уже
> в проекте устарело на десятилетия? Не, своим хобби я заниматься продолжу,
> мне это интересно. Хоть и бесперспективно.
>
>
>
> --
>
> Коновалов Александр Владимирович, преподаватель
>
> кафедра ИУ9 «Теоретическая информатика и компьютерные технологии»
>
> МГТУ имени Н. Э. Баумана, Москва
>
>
>
>
>

Ответить