Добрый день, Аркадий!

 

Большое спасибо за развёрнутый ответ. Сейчас я задам несколько развёрнутых 
вопросов. Заранее прощу прощения у подписчиков за многабукаф.

 

… а именно, с включением вложенных анонимных функций -- аналога 
лямбда-абстракции.…

 

Эта идея не моя, впервые она была предложена Сергеем Скоробогатовым в диалекте 
Refal-7 в 2006 году:
https://waybackmachine.org/web/20070813011422/http://iu9.bmstu.ru/science/refal.pdf
 
<https://waybackmachine.org/web/20070813011422/http:/iu9.bmstu.ru/science/refal.pdf>
 
(даю ссылку на Wayback Machine, поскольку с сайта кафедры этот файл удалили). 
Вероятно, вы знакомы с ним (и со Скоробогатовым, и с диалектом), но ссылку я 
даю для всех читателей рассылки. 

 

…(только поверхностно посмотрел доки)…

 

Основная дока (manul 
<https://github.com/bmstu-iu9/simple-refal/blob/master/doc/manul.pdf> .pdf), к 
сожалению, (а) недописана, (б) частично неактуальна. Основной массив знаний 
(если углубляться) скрывается тут: 
https://github.com/bmstu-iu9/simple-refal/issues (включая закрытые задачи). Но 
на беглый просмотр там слишком много.

 

…было бы интересно и важно наработать множество примеров и техник с 
использованием этих новых средств, демонстрирующих их удобство и преимущество.

 

Пользуюсь вложенными функциями уже с 2009 года, мне нравится. Когда добавил их 
в язык, почувствовал прирост своей производительности, по сравнению с 
подмножеством Базисного Рефала. Пример их использования (несколько извращённый) 
вот:
https://github.com/bmstu-iu9/simple-refal/tree/master/doc/examples/inifile
Более нормальные примеры использования есть в исходных текстах самого 
компилятора.

 

Есть основания полагать, что Рефал создавался Турчиным именно как язык первого 
порядка, и в этом была интенция автора. … Рефал-5 -- это максимум того, что он 
был готов допустить.

 

Есть у меня идеи по статической типизации Рефала (но о них сейчас пока рано, 
через несколько месяцев будет в самый раз), и обдумывая их, я понял гений 
Турчина. РЕФАЛ-5 — это довольно компактное и выразительное подмножество, 
которое разрабатывалось не только и не столько для промышленного 
программирования (хотя писать большие программы на нём можно — SCP4), сколько 
для автоматического анализа. Поэтому и язык первого порядка, и нет неуспехов 
(но есть условия), и замкнутый набор встроенных функций. Мои идеи по выводу и 
проверке типов хорошо ложатся на РЕФАЛ-5, в то время как с функциями высшего 
порядка, неуспехами и сторонними функциями всё не так очевидно.

 

А в чём согласование с интенцией первого порядка таких особенностей, как 
выражения с двусторонним доступом, концепция поля зрения и динамическая 
типизация? Мне это немного не очевидно. И что подразумевается под явной 
активацией (мне не знаком этот термин)?

 

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

 

Функциональные объекты этим условиям не удовлетворяют, они эктенсиональны: 
функцию можно вызвать, но нельзя препарировать, рассмотреть ее устройство.

 

Да, кстати. У меня (и у Скоробогатова в Refal’е-7) функциональные объекты 
сопоставляются с s-переменными.

 

Но конечно, это не значит, что последователи не вправе делать по-своему, с 
опорой на новые знания и опыт. И может быть, особенности Рефала дадут 
возможность по новому увидеть и понять функциональные объекты.

 

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

 

Что касается меня, как приложившего руку к созданию Рефала-6, могу только 
сказать, что в последние годы, уже лет 15, выступаю только как пользователь 
"своего" диалекта и пока вполне им доволен. Но это, конечно, не промышленное 
использование. Есть у Рефала-6 еще по-меньшей мере один активный пользователь - 
Игорь Щенков, и он время от времени высказывает претензии. Но к сожалению сил 
на них активно откликаться сейчас у меня очень мало. Се ля ви.

 

Когда я начинал программировать на Рефале, я начал с РЕФАЛа-5, пару программ 
написал на Рефале-6, а потом начал писать свой диалект :). Поэтому с идеями 
Рефала-6 знаком, программы читать могу, но программировать навыка нет, 
извините, что не стал вашей пользовательской базой. Кстати, завидую вам. Ваша 
пользовательская база по-меньшей мере в два раза больше моей :).

 

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 <mailto:a.v.konovalo...@mail.ru> > написал:

В начале 2000-х годов язык Рефал ещё как-то развивался, выходили новые версии 
компиляторов: РЕФАЛ-5, Рефал-6, была некоторая активность на сайте 
http://wiki.botik.ru/Refaldevel/, был написан компилятор SCP4. Я читал старый 
архив рассылки refal <mailto:refal@botik.ru> @botik.ru, в нём тоже были 
обсуждения Рефала и не только (например, сравнивали его с Си++). Потом, 
практически синхронно со смертью Турчина, активность спала практически до нуля 
(архива рассылки refal-devel в сети не нашёл, судить не могу).

 

В текущей рассылке (судя по новому архиву) в основном рекламируются конференции 
по метавычислениям, выкладываются сканы старых архивных материалов и Сергей 
Михайлович Абрамов поздравляет с Новым Годом.

 

Я правильно понимаю ситуацию, что Рефал появился не от хорошей жизни: Турчину 
нужен был инструмент (формальный язык) для выражения идей метавычислений, 
суперкомпиляции, существовавшие тогда Фортран и Алгол для этого не подходили, а 
о Лиспе в СССР никто тогда не знал? И теперь, когда появились новые, 
современные функциональные языки программирования, для реализации идей 
суперкомпиляции стали применять уже их? Те же Юрий Климов и Илья Ключников свои 
суперкомпиляторы писали отнюдь не на Рефале. А язык Рефал остался в прошлом.

 

И то, чем я занимаюсь (https://github.com/bmstu-iu9/simple-refal (смотреть 
ветку refal-5-lambda), https://github.com/Mazdaywik/mrefal) уже в проекте 
устарело на десятилетия? Не, своим хобби я заниматься продолжу, мне это 
интересно. Хоть и бесперспективно.

 

--

Коновалов Александр Владимирович, преподаватель

кафедра ИУ9 «Теоретическая информатика и компьютерные технологии»

МГТУ имени Н. Э. Баумана, Москва





 

Ответить