Re: Совместное совещание по Рефалу 17 июня

2023-06-21 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Всем добрый день!
  Когда-то, еще в 80-е и даже 90-е "в воздухе висела" как бы задача
строить, улучшать, развивать реализации рефала, последний всплеск пришелся
на нулевые - Refal Plus, Refal-Java. Сейчас этого вроде бы нет, возможно
поэтому и возникает ощущение, что Рефал умер... Но: в том же МГТУ уже много
лет движется студенческий проект Refal5\! Развивается, обрастает разными
примочками. Разве это не жизнь?
Что касается практического использования - тут я добавлю свои шесть копеек.
Еще в конце 80х написали мы (просто так) в ИППИ солвер для поля комплексных
чисел. В 0-х и 10х из него вырос (в ИППМ РАН) весьма  специфический
решатель для линейной теории целых чисел (LIA), на базе которого построено
отображение подмножества фортрана в потоковую (полиэдральную) модель. Потом
пауза и в этом году я опять "вспомнил молодость", чтобы сделать обратный
преобразователь из булевых формул в схему из вентилей. (Обычно наоборот -
по схеме строят формулу для SAT-решателя.) Это понадобилось, чтобы понять,
что за SAT-задачи строит верификатор YOSYS. А ведь тут образцы с
блоками-откатами прямо по делу! И все продолжаю его развивать. Конечно, я
не показатель, ибо использую почти "свой" рефал-6, возможно еще и потому,
что мне уже просто тяжело осваивать новые языки вроде Питона или Скалы. А
этот уже к пальцам прилип. На нем я даже не программирую, а просто сочиняю
и записываю алгоритмы.
Теперь - вернемся к семинару. А мне показалось, что рефала было много.
Доклад АПН был об использовании суперкомпилятора Рефала!  Во второй секции
доклады по теории, мотивированной рефалом (строки, образцы, рег.выражения),
тут не обязательно упоминать рефал явно. Третья секция (Коновалов, Яушев)
вся просто по рефалу.
Сайт refal.net я попробовал, он переадресуется на сайт Харькова. Возможно,
он у нас заблокирован: я входил при включенном впн. Самого рефал-сайта там
я не нашел. Возможно, сервер у Леонида Б. отключен. Хотелось бы узнать, что
там.
Думаю, рефал как встроенный язык интернета недооценен. Когда-то, я слышал,
что-то сделал Леонид, но я это плохо понимал, так как не работал в html.
Когда я смотрю, как используется xml, хочется плеваться и мечтать видеть на
этом месте рефал-выражения. Например, для формата типа SVG, с возможностями
писать "макросы" на рефале. Пожалуй, не хватает только чего-то вроде
объектов-структур-таблиц - для записи атрибутов (ассоциативные таблицы типа
имя=значение).
А с новостями на сайте Института Рефала действительно недоработка. Надо,
чтобы там были объявления об этом вот нашем семинаре прошедшем (заранее,
естественно).
С уважением,
Аркадий К.

ср, 21 июн. 2023 г. в 12:50, Стеллецкий Василий sw710_AT_yandex.ru <
refal@botik.ru>:

> Добрый день всем!
> Александр, спасибо за поддержку...
> -- Наверное, самая грустная новость в том, что в отрасли ПО времена
> одиночек прошли.
> Да, уж куда грустнее... (в приложении к рефалу)
>
> Вот после Вашего письма залез на свой сайт, прошелся по ссылкам, и
> обнаружил, что сайт refal.net сдулся, вылетает на тайм-аут...
> а там была странички "Об авторе рефала", "История рефала", с сайтами
> "Рефал-диаспоры", правда, большинство ссылок уже были битыми...
> Там же лежали (как я понимаю) дистрибутивы рефала 2 и 6...
>
> Про 10 копий...
> Может я не всё знаю...
> - Моя реализация в ЦНСХБ (в производстве) едва теплится, вот-вот умрет...
> - 5лямбда в Бауманке (в учебном процессе)
> - какой-то рефал-2 в МГУ (в учебном процессе)
> - какой-то рефал-2 у Эйсымонта (в производстве) но без открытого доступа к
> реализации
> Что я еще забыл?
> В Переяславле? но я не понял, вроде и не в учебном процессе, и не в
> производстве... т.е. у энтузиастов?
> А FLAC считать рефалом?
>
> Дебет с кредитом... Итого 1 - рефал-2 у Эйсымонта ! (учебу не считаем,
> преподавать можно и мертвые языки)
>
> Посмотрел на единственный оставшийся сайт по рефалу "Институт рефала", так
> там последняя новость с лета прошлого года (про *CSR 2022
> *, а предыдущая  про *CSR 202
> 1*)...
>
> а вы говорите "всплески" :(
>
> --
> С уважением,
> Василий
> sw...@yandex.ru
>
>
>
> 21.06.2023, 10:44, "Александр Гусев gusev_aleksandr_AT_mail.ru" <
> refal@botik.ru>:
>
> Добрый день, Василий!
> Не могу не ответить на «всплеск», так как самого этот же вопрос волнует.
> Что нужно для «поддержки на плаву» любой абстрактной идеи?
>
>1. Неубывающее количество сторонников, большее некого критического
>значения. В нашем случае это, наверное около 100, с учётом студентов.
>2. Неубывающее количество точек применения, то есть копий для ПО,
>которое тоже имеет критический минимум. Предполагаю, что это около 10 для
>нас.
>
> Эти два направления независимы, но в сумме определяют всё. И каждый
> заинтересованный может определить для себя что он может тут сделать.
> В 2019 году я включился в сообщество ценителей Рефала с идеей двигаться по
> пункту 2. То есть создать продукт на основе Рефала, который может быть
> использован даже без 

Re: [NON-SUBSCRIBER POST] Fwd: Refal и ChatGPT 4.0

2023-04-09 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Я подумал, что ЧатГПТ будет правильным использовать как источник информации
по каким-то профессиональным темам. Решил начать с динамических частичных
вычислений, которые меня реально интересуют. Результаты меня потрясли. (К
сожалению, форматирование выдачи несколько кривое для вставки в письмо.
Поэтому я пропустил его через простой текст)
-
Do you know what is partial evaluation?

Yes, I do. Partial evaluation is a technique used in computer science and
programming that involves specializing a program with respect to some of
its arguments or inputs, in order to produce a new program that is
optimized for a specific use case.

The resulting program is typically faster and more efficient than the
original program, because it eliminates unnecessary computations by
partially evaluating expressions that depend on the specialized inputs.

Partial evaluation is often used in the context of functional programming,
where functions are first-class citizens that can be passed as arguments to
other functions. It can also be used in optimizing compilers to generate
code that is specific to a particular architecture or target platform.



-
arkady.kli...@gmail.com
Ok. I wonder whether partial evaluation can be used by application program
for specializing its parts dynamically with respect of some of user input

Yes, partial evaluation can be used dynamically in an application program
to specialize its parts with respect to some user input. This is known as
dynamic partial evaluation or runtime specialization.

In this approach, the program takes some input from the user and uses it to
specialize parts of the code that are relevant to the user's input. For
example, a program that performs mathematical calculations might take a
user input specifying the type of operation to perform (addition,
subtraction, multiplication, etc.) and use that input to generate
specialized code that is optimized for that specific operation.

Dynamic partial evaluation can help improve the performance of an
application by generating specialized code on the fly, based on the input
it receives. However, it can also be complex to implement and can require
careful management of the specialized code generated at runtime.



-
arkady.kli...@gmail.com
Do there exist any tools that help to produce application programs with the
capability of dynamic partial evaluation?

Yes, there are tools and frameworks that can help in producing application
programs with the capability of dynamic partial evaluation.

One such tool is the Partial Evaluation Framework (PEF), which is a library
for C and C++ that allows for dynamic partial evaluation of programs at
runtime. The PEF library provides a set of functions for performing partial
evaluation on program fragments, as well as a runtime system for managing
the generated code.

Another tool is the Specializer, which is a tool for automatically
generating specialized code from high-level descriptions of computations.
The Specializer can be used to generate code for a wide range of
programming languages and platforms, and supports dynamic partial
evaluation through a set of APIs.

There are also specialized programming languages, such as RPython and
MetaOCaml, that support partial evaluation natively and can be used to
build application programs with dynamic partial evaluation capabilities.

Overall, while the use of dynamic partial evaluation in application
programs requires careful consideration and management, there are a variety
of tools and frameworks available to help in implementing this approach.



-
arkady.kli...@gmail.com
It is very interesting. Could you please give some references to the
systems or frameworks you mentioned.

Sure, here are some references to the systems and frameworks that I
mentioned:

Partial Evaluation Framework (PEF):
Website: https://github.com/sfu-arch/pef
Paper: "PEF: A Framework for Dynamic Partial Evaluation of C and C++
Programs" by John T. O'Donnell and Arrvindh Shriraman (
https://people.scs.carleton.ca/~arun/papers/pef.pdf)
The Specializer:
Website: http://specializer.info/
Paper: "Automatically Generating Specialized Programs for High-Performance
Computing" by Keshav Pingali, Gianfranco Bilardi, and Bevin Brett (
https://dl.acm.org/doi/10.1145/267660.267670)
RPython:
Website: https://rpython.readthedocs.io/en/latest/
Paper: "The PyPy Approach to Virtual Machine Construction" by Armin Rigo
and Samuele Pedroni (https://dl.acm.org/doi/10.1145/1035292.1035295)
MetaOCaml:
Website: https://okmij.org/ftp/ML/MetaOCaml.html
Paper: "MetaOCaml: Staged metaprogramming in a typed functional language"
by Jacques Garri

Re: [NON-SUBSCRIBER POST] Fwd: Refal и ChatGPT 4.0

2023-04-07 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
А вот chat.openai.com вполне разумный дал ответ на тот же вопрос.
At what time of the year does twilight pass faster?

Twilight is the period of the day when the sun is below the horizon but its
rays illuminate the sky. It is divided into three stages: civil twilight,
nautical twilight, and astronomical twilight. The duration of twilight
varies depending on several factors such as the latitude, the season, and
the altitude of the observer.

In general, twilight passes faster during the equinoxes than during the
solstices. During the equinoxes (around March 20 and September 22), the
length of day and night are approximately equal, which means that the sun
rises and sets more quickly, leading to a faster transition between
daylight and darkness. On the other hand, during the solstices (around June
21 and December 21), the difference between the length of day and night is
at its maximum, which means that the sun rises and sets more slowly,
leading to a longer duration of twilight.

It is important to note that this is a general trend and that the exact
duration of twilight can vary depending on the specific location and time
of observation.
[image: arkady.kli...@gmail.com]
Please explain why the speed of sun rising or setting is larger when the
difference between the length of the day and night is minimal.

The speed of the sun rising or setting is not actually larger when the
difference between the length of the day and night is minimal. Rather, it
appears to be faster because the rate of change of the sun's position in
the sky is greater during the equinoxes when the day and night are
approximately equal in length.

During the equinoxes, the sun is rising and setting almost perpendicular to
the horizon, which means that its path through the sky is more vertical
than during the solstices. As a result, the sun appears to be rising and
setting more quickly because it is covering more vertical distance in a
shorter period of time.

During the solstices, the sun rises and sets at a shallower angle to the
horizon, which means that its path through the sky is more horizontal. This
makes the rate of change of the sun's position in the sky slower, leading
to a longer duration of twilight.

It's important to note that the duration of twilight is affected by many
factors, such as the observer's location, the altitude of the observer, and
the presence of atmospheric conditions such as haze or clouds. Therefore,
while the equinoxes generally have shorter durations of twilight, the exact
duration of twilight can vary based on these and other factors
Особенно меня восхитил справедливый пассаж про "более перпендикулярное
движение солнца по отношению к горизонту" во время равноденствия. Правда,
еще следовало отметить, что при равноденствии солнце идет по большому
кругу, в отличии от солнцестояний, то есть та же радианная скорость
означает и большую линейную скорость по небосводу. И actual speed of the
sun по небосводу (безотносительно угла на пересечении с горизонтом)
все-таки не одна и та же, как он пишет (is not actually larger), а
весной-осенью больше, чем зимой-летом.
И еще небольшой ляп - altitude (высота) вместо latitude (широта).


Re: [NON-SUBSCRIBER POST] Fwd: Refal и ChatGPT 4.0

2023-04-07 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Еще я задал вопрос по школьной астрономии
Вот ответы от gpt-chat-bot.ru/ . По-моему, полная чушь.
В какое время года сумерки протекают быстрее?
Сумерки протекают быстрее весной и осенью, когда день и ночь примерно равны
по продолжительности. В летние месяцы сумерки длительнее из-за более
длительного дня, а зимой - короче из-за более длительной ночи.
Однако мне непонятно, почему при долгом дне сумерке дольше, а при долгой
ночи - короче. Поясните, пожалуйста.
Это связано с тем, что день и ночь относительно Солнца. Когда Земля
находится ближе к Солнцу, день становится длиннее, а ночь - короче. Когда
Земля находится дальше от Солнца, день становится короче, а ночь - длиннее.
Это происходит из-за того, что Земля вращается вокруг своей оси и
одновременно движется по орбите вокруг Солнца. Таким образом, длина дня и
ночи зависит от угла, под которым Солнце освещает поверхность Земли в
разное время года.
*С уважением, *
*Аркадий Климов,*
*с.н.с. ИППМ РАН,*
*+7(499)135-32-95*
*+7(916)072-81-48*


пт, 7 апр. 2023 г. в 18:02, Arkady Klimov :

> А ты какую модель использовал: GPT-3.5(turbo) или GPT-4? Пишут, что первая
> в 20 раз дешевле и втрое быстрее, но менее точная.
> Я пользовался https://chat.openai.com/chat, там не пишут про модель,
> надеюсь четвертая, только за деньги  (20$ в месяц) будет лучше с
> приоритетом исполнения.
> Только пришлось за телефон временный отдать 130р (это в Германии, дешевле
> не нашел).
>
> пт, 7 апр. 2023 г. в 17:37, Arkady Klimov :
>
>> Даже чуть раньше - еще на словах
>>
>> Так как диагональ ромба является диаметром окружности, то она равна 2R.
>>
>> Тут ОНО перепутало ромб с прямоугольником (диагональ ромба с диагональю
>> прямоугольника).
>>
>> пт, 7 апр. 2023 г. в 17:29, Andrei Klimov andrei_AT_klimov.net <
>> refal@botik.ru>:
>>
>>> On Fri, 7 Apr 2023 at 17:09, Arkady Klimov arkady.klimov_AT_gmail.com <
>>> refal@botik.ru> wrote:
>>>
 А вот еще задачка, теперь по школьной геометрии:
 A rectangle is inscribed in a circle of radius R. The midpoints of the
 sides of the rectangle are vertices of a rhombus. What is the side of the
 rhombus?

>>>
>>> По-русски (на сайте https://gpt-chat-bot.ru) оно споткнулось в другом
>>> месте: во втором абзаце в предложении «Тогда по теореме Пифагора» описало
>>> несуществующий прямоугольный треугольник. Условие переведено
>>> Яндекс-переводчиком:
>>> Прямоугольник вписан в окружность радиуса R. Середины сторон
>>> прямоугольника являются вершинами ромба. Какова сторона ромба?
>>> Пусть стороны прямоугольника равны a и b. Тогда диагональ прямоугольника
>>> равна √(a²+b²), а радиус окружности равен R. Так как диагональ ромба
>>> является диаметром окружности, то она равна 2R. Пусть сторона ромба равна
>>> d. Тогда по теореме Пифагора дляеугольника, образованного половиной
>>> диагонали прямоугольника, стороной ромба и радиусом окружности, получаем:
>>> (d/2)² + (a²+b²)/4 = R² Также заметим, что диагональ ромба равна √(d²+d²) =
>>> d√2. Используя свойство ромба, что диагонали перпендикулярны и делятся
>>> пополам, получаем: d²/2 + d²/2 = (a/2)² + (b/2)² d² = (a²+b²)/2 Теперь мы
>>> можем выразить d через R: (d/2)² + (a²+b²)/4 = R² d²/4 + (a²+b²)/4 = R²
>>> d²/2 = 2R² - (a²+b²) d² = 4R² - 2(a²+b²) d² = 2(2R² - (a²+b²)) d = √(2(2R²
>>> - (a²+b²))) Таким образом, сторона ромба равна: d = √(2(2R² - (a²+b²)))
>>>



Re: [NON-SUBSCRIBER POST] Fwd: Refal и ChatGPT 4.0

2023-04-07 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
А ты какую модель использовал: GPT-3.5(turbo) или GPT-4? Пишут, что первая
в 20 раз дешевле и втрое быстрее, но менее точная.
Я пользовался https://chat.openai.com/chat, там не пишут про модель,
надеюсь четвертая, только за деньги  (20$ в месяц) будет лучше с
приоритетом исполнения.
Только пришлось за телефон временный отдать 130р (это в Германии, дешевле
не нашел).

пт, 7 апр. 2023 г. в 17:37, Arkady Klimov :

> Даже чуть раньше - еще на словах
>
> Так как диагональ ромба является диаметром окружности, то она равна 2R.
>
> Тут ОНО перепутало ромб с прямоугольником (диагональ ромба с диагональю
> прямоугольника).
>
> пт, 7 апр. 2023 г. в 17:29, Andrei Klimov andrei_AT_klimov.net <
> refal@botik.ru>:
>
>> On Fri, 7 Apr 2023 at 17:09, Arkady Klimov arkady.klimov_AT_gmail.com <
>> refal@botik.ru> wrote:
>>
>>> А вот еще задачка, теперь по школьной геометрии:
>>> A rectangle is inscribed in a circle of radius R. The midpoints of the
>>> sides of the rectangle are vertices of a rhombus. What is the side of the
>>> rhombus?
>>>
>>
>> По-русски (на сайте https://gpt-chat-bot.ru) оно споткнулось в другом
>> месте: во втором абзаце в предложении «Тогда по теореме Пифагора» описало
>> несуществующий прямоугольный треугольник. Условие переведено
>> Яндекс-переводчиком:
>> Прямоугольник вписан в окружность радиуса R. Середины сторон
>> прямоугольника являются вершинами ромба. Какова сторона ромба?
>> Пусть стороны прямоугольника равны a и b. Тогда диагональ прямоугольника
>> равна √(a²+b²), а радиус окружности равен R. Так как диагональ ромба
>> является диаметром окружности, то она равна 2R. Пусть сторона ромба равна
>> d. Тогда по теореме Пифагора дляеугольника, образованного половиной
>> диагонали прямоугольника, стороной ромба и радиусом окружности, получаем:
>> (d/2)² + (a²+b²)/4 = R² Также заметим, что диагональ ромба равна √(d²+d²) =
>> d√2. Используя свойство ромба, что диагонали перпендикулярны и делятся
>> пополам, получаем: d²/2 + d²/2 = (a/2)² + (b/2)² d² = (a²+b²)/2 Теперь мы
>> можем выразить d через R: (d/2)² + (a²+b²)/4 = R² d²/4 + (a²+b²)/4 = R²
>> d²/2 = 2R² - (a²+b²) d² = 4R² - 2(a²+b²) d² = 2(2R² - (a²+b²)) d = √(2(2R²
>> - (a²+b²))) Таким образом, сторона ромба равна: d = √(2(2R² - (a²+b²)))
>>
>>>


Re: [NON-SUBSCRIBER POST] Fwd: Refal и ChatGPT 4.0

2023-04-07 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Даже чуть раньше - еще на словах

Так как диагональ ромба является диаметром окружности, то она равна 2R.

Тут ОНО перепутало ромб с прямоугольником (диагональ ромба с диагональю
прямоугольника).

пт, 7 апр. 2023 г. в 17:29, Andrei Klimov andrei_AT_klimov.net <
refal@botik.ru>:

> On Fri, 7 Apr 2023 at 17:09, Arkady Klimov arkady.klimov_AT_gmail.com <
> refal@botik.ru> wrote:
>
>> А вот еще задачка, теперь по школьной геометрии:
>> A rectangle is inscribed in a circle of radius R. The midpoints of the
>> sides of the rectangle are vertices of a rhombus. What is the side of the
>> rhombus?
>>
>
> По-русски (на сайте https://gpt-chat-bot.ru) оно споткнулось в другом
> месте: во втором абзаце в предложении «Тогда по теореме Пифагора» описало
> несуществующий прямоугольный треугольник. Условие переведено
> Яндекс-переводчиком:
> Прямоугольник вписан в окружность радиуса R. Середины сторон
> прямоугольника являются вершинами ромба. Какова сторона ромба?
> Пусть стороны прямоугольника равны a и b. Тогда диагональ прямоугольника
> равна √(a²+b²), а радиус окружности равен R. Так как диагональ ромба
> является диаметром окружности, то она равна 2R. Пусть сторона ромба равна
> d. Тогда по теореме Пифагора дляеугольника, образованного половиной
> диагонали прямоугольника, стороной ромба и радиусом окружности, получаем:
> (d/2)² + (a²+b²)/4 = R² Также заметим, что диагональ ромба равна √(d²+d²) =
> d√2. Используя свойство ромба, что диагонали перпендикулярны и делятся
> пополам, получаем: d²/2 + d²/2 = (a/2)² + (b/2)² d² = (a²+b²)/2 Теперь мы
> можем выразить d через R: (d/2)² + (a²+b²)/4 = R² d²/4 + (a²+b²)/4 = R²
> d²/2 = 2R² - (a²+b²) d² = 4R² - 2(a²+b²) d² = 2(2R² - (a²+b²)) d = √(2(2R²
> - (a²+b²))) Таким образом, сторона ромба равна: d = √(2(2R² - (a²+b²)))
>
>>


Re: [NON-SUBSCRIBER POST] Fwd: Refal и ChatGPT 4.0

2023-04-07 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
А вот еще задачка, теперь по школьной геометрии:
A rectangle is inscribed in a circle of radius R. The midpoints of the
sides of the rectangle are vertices of a rhombus. What is the side of the
rhombus?
-

Let ABCD be the rectangle inscribed in a circle of radius R, where AB and
BC are adjacent sides of the rectangle, and let E, F, G, and H be the
midpoints of the sides AB, BC, CD, and DA, respectively. We want to find
the length of the side of the rhombus EFGH.

First, we note that since ABCD is inscribed in a circle of radius R, the
diagonal AC of the rectangle is a diameter of the circle. Therefore, AC =
2R.

We also note that the diagonals of a rhombus are perpendicular bisectors of
each other. Therefore, EF is perpendicular to GH, and EG is equal in length
to FH.

Now, let x be the length of EF (and GH). Then, since the diagonals of a
rectangle are equal in length, we have EH = FG = sqrt(2)AC/2 = sqrt(2)R.

Using the Pythagorean theorem in triangles EGH and EFH, we have:

EG^2 + GH^2 = EH^2 x^2 + (2x)^2 = (sqrt(2)R)^2 x^2 + 4x^2 = 2R^2 5x^2 = 2R^2

Therefore, the side of the rhombus is:

x = sqrt(2/5) R

Можете не вникать, путаница началась со слов Therefore, EF is perpendicular
to GH,
до этого было все ок, значит задача была понята правильно.
А правильный ответ R.
Думаю, проблема этого ИИ в том, что он в основе своей вероятностный, и
запросто может в какой-то момент перепутать буквы (или какие-то другие
детали) с какой-то вероятностью.

Помню, в 5м или 6м классе я эту задачку в уме решил, но тогда еще не умел
свое решение грамотно объяснять.


Re: [NON-SUBSCRIBER POST] Fwd: Refal и ChatGPT 4.0

2023-04-07 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Мне кажется, было бы интересно задать ЕМУ вопрос, который когда-то самого
интересовал и до ответа на который когда-то с трудом докопался. Насколько
ОНО могло бы тогда помочь? Вот я вспомнил одну свою задачку.
Будем играть в такую игру (сам с собой). Перед нами 5 лунок, в которых
могут лежать камешки. И есть неограниченный запас камешков. Одним ходом
можно сделать следующее:
1) взять новый камешек и добавить его в одну из лунок, после чего
2) переложить любое число камешков из одних лунок в другие.
Ход допустимый, если новое состояние не может быть получено ни из одного из
старых посредством добавления какого-то числа камешков (без перекладываний
других камешков).
Пусть изначально в первой лунке один камешек, в остальных ничего нет.
Вопросы:
1. Возможна ли бесконечная последовательность допустимых шагов?
2. Если нет, то существует ли сколь угодно длинная последовательность
допустимых шагов?
3. Если нет, то какое максимальное число допустимых шагов можно выполнить
из данной начальной позиции?
--
Во-первых, надо, чтобы оно вопрос поняло. Это уже требует определенного
интеллекта. Ну, а далее интересно, что оно ответит.

Let's consider such a situation. Before us are 4 holes in which pebbles can
lie. And there is an unlimited supply of pebbles. In one step, one can do
the following: 1) take a new pebble and add it to one of the holes, after
which 2) transfer any number of pebbles from one hole to another. A step is
admissible if a new state cannot be obtained from any of the old ones by
adding a certain number of pebbles (without rearranging other pebbles).
Suppose initially there is one pebble in the first hole, and there is
nothing in the rest. Questions: 1. Is an infinite sequence of admissible
steps possible? 2. If not, is there an arbitrarily long sequence of
admissible steps? 3. If not, what is the maximum number of steps that can
be taken from a given starting position? 4. Is there a 100-step sequence of
admissible steps?

Вот первый ответ:
<<<

   1. Yes, an infinite sequence of admissible steps is possible.

One possible strategy is to repeatedly transfer one pebble from the first
hole to the second hole, then add a new pebble to the first hole. This
generates an infinite sequence of distinct states, as no state can be
reached by adding a certain number of pebbles to a previous state.

For example, the first few steps would look like:

   - Step 1: 1 0 0 0 (initial state)
   - Step 2: 0 1 0 0
   - Step 3: 1 1 0 0
   - Step 4: 0 2 0 0
   - Step 5: 1 2 0 0
   - Step 6: 0 3 0 0
   - Step 7: 1 3 0 0
   - ...


   1. Yes, there is an arbitrarily long sequence of admissible steps.

This can be achieved by repeatedly transferring pebbles from the first hole
to the other holes, then adding a new pebble to the first hole. At each
step, the number of pebbles in the first hole will increase by one, while
the other holes will have a varying number of pebbles. Since there are an
unlimited number of pebbles, this process can continue indefinitely.

   1. The maximum number of steps that can be taken from a given starting
   position is 4.

There are only 4 distinct states that can be reached from the initial
state, which are:

   - 1 0 0 0 (initial state)
   - 0 1 0 0
   - 0 0 1 0
   - 0 0 0 1

After reaching any of these states, no more admissible steps are possible,
as any further addition or transfer of pebbles will result in a state that
can be obtained by adding a certain number of pebbles to a previous state.

   1. No, there is no 100-step sequence of admissible steps.

Since the maximum number of steps from the initial state is 4, it is not
possible to reach a state that requires more than 4 steps to reach.
Therefore, it is not possible to have a 100-step sequence of admissible
steps.

Меня восхитило, что ОНО само изобрело языковую модель ситуации в форме
вектора из 4х целых неотрицательных чисел. В остальном все очень тупо. Я
долго вдалбливал, что один шаг состоит (сразу) из добавления одного камешка
и перекладывания некоторых камешков. ОНО упорно делило их на 2 шага.
Результат перекладываний почти всегда показывался неверно. До понимания
условия допустимости вообще речь не доходит, хотя ОНО и пыталось им
"жонглировать". Но ситуация, по-моему, интересна как тест, поскольку
показывает ее (не)способность строить и манипулировать простыми моделями,
не требующими специальных познаний. До математического содержания вопросов
ЕМУ, конечно, еще очень далеко (отрицательный ответ на вопрос 1 дает Лемма
Хигмана). Задав число лунок 4 вместо 5, я все же надеялся, что поняв
задачу, оно сможет ее решить тупым перебором (правильный ответ на третий
вопрос - 12). А для 5 перебор "посадил" бы все сервера.

PS. Заметил свою неточность в английской постановке: во 2-м полушаге
допустимо перекладывать любое число камешков из любого числа лунок в другие
лунки (а не из одной в одну другую). Но вроде это не отразилось бы на
результатах.

PPS. Исправленная версия постановки:

Let's consider such a 

Re: Refal и ChatGPT 4.0

2023-03-31 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Мое первое впечатление было от этого примера, что этого ИИ как "студента"
или "научного сотрудника" можно охарактеризовать словами "наглый профан".
Наверно преподаватели сталкивались с такими типажами студентов и это
довольно неприятно. Они готовы нести всякую правдоподобную
наукообразную ахинею, затыкая ею те лакуны, где они что-то не знают или не
понимают. При этом ты не можешь сходу отличить, где идет четкое знание, а
где "замазанное". Понятно, что преподаватель, понимая свой предмет, сам
домысливает до верных утверждений, и на это, собственно, и расчет такого
наглеца. Пока мы тут в роли такого препода, который радуется, что слышит
нечто правдоподобное, и выуживает смыслы. Допускаю, что создатели этого ИИ
как раз на такое и целились, и это им, похоже, удалось. Что, конечно, тоже
есть значительное достижение, несомненно.


пт, 31 мар. 2023 г. в 00:05, Sergei Skorobogatov
s.yu.skorobogatov_AT_gmail.com :

> Да, впечатляет! Сам я еще не научился пользоваться ChatGPT-ом (может,
>> Сергей научит?), а с интересом изучаю диалоги, что выставили другие на
>> просторах интернета.
>
>
> Если что, для доступа к ChatGPT я использую сервис https://gpt-chat-bot.ru.
> Он позволяет одновременно вести несколько диалогов, которые создаются при
> нажатии на кнопку "Создать тему" в верхнем левом углу страницы. Важно при
> создании темы в качестве модели выбрать gpt-4 и обязательно поставить
> галочку "Использовать контекст".
>
> чт, 30 мар. 2023 г. в 21:11, Andrei Klimov andrei_AT_klimov.net <
> refal@botik.ru>:
>
>> Да, впечатляет! Сам я еще не научился пользоваться ChatGPT-ом (может,
>> Сергей научит?), а с интересом изучаю диалоги, что выставили другие на
>> просторах интернета.
>>
>> То, что некий «ИИ» может писать связный текст, хорошо структурированный
>> по теме запроса (как здесь четко воспроизводится структура описания языка),
>> — это, в принципе, может быть: на то он и содержит «базу знаний» как «базу
>> шаблонов». Что удивительно — то, что он (она, оно) понимает задания,
>> сформулированные короткими запросами.
>>
>> В связи с этим вопрос: Сергей, с какой попытки удалось сформулировать
>> запрос, чтобы получить осмысленный ответ? Сколько «бреда» пришлось
>> забраковать?
>>
>> Спрашиваю потому, что подозреваю, что всё выставляют удачные варианты
>> беседы с ChatGPT, а муки поиска не показывают. Мои подозрения имеют смысл?
>>
>> Андрей
>>
>>
>> On Thu, 30 Mar 2023 at 14:57, Sergei Skorobogatov
>> s.yu.skorobogatov_AT_gmail.com  wrote:
>>
>>> Всем привет!
>>>
>>> Я тут поразвлекался с четвёртой версией ChatGPT, выдав ей следующее
>>> задание:
>>>
 Please, write a short specification for a new functional programming
 language. The language should preserve the syntax and semantics of Refal
 language as much as possible, but every function declaration in it must be
 typed.
>>>
>>>
>>> Результат получился довольно забавный, и мне захотелось им поделиться:
>>>
>>> Title: TypedRefal - A Typed Functional Programming Language Based on
>>> Refal
>>>
>>>
>>>


Re: Re[2]: рефал всё же скорее умер :(

2023-02-20 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
А, понятно, спасибо. Я не знал такой аббревиатуры. С таким режимом знаком,
да, это удобно (python, sml, matlab). И в Рефале-6 я этим пользуюсь.
Функция ask его вызывает. Из командной строки: ri i+*ask. И дальше можно
набирать вызовы функций, скажем, . Однако тут можно только
вызывать только функции, уже имеющиеся в поле зрения, то есть либо
стандартные, либо заранее скомпилированные и загруженные (ri i+file+*ask).
Проблема тут вот в чем. Рефал не является языком, в котором легально писать
определения вроде varname=expression. И определения функций не имеют вида
f=... . Приходится изгаляться, типа >. А чтобы можно было
в диалоге новые функции вводить, надо иметь функцию вроде  . А чтобы вводить длинные функции, надо чтобы было удобно
ошибки править.
 Поэтому надо б еще как-то определиться с желательным интерфейсом. Сделать
- не проблема.


пн, 20 февр. 2023 г. в 14:20, Александр Гусев gusev_aleksandr_AT_mail.ru <
refal@botik.ru>:

> Аркадий, это аббревиатура «read-eval-print» - основной интерфейс исходного
> basic. Набрал выражение, нажал ввод - увидел ответ, как было на Консуле,
> если не забыл. То есть без команд компиляции, сборки и т.п., доставшихся от
> эпохи перфокарт и os360, малопонятных для рядового пользователя вещей.
>
>
>
> Отправлено из мобильной Почты Mail.ru
>
>
> понедельник, 20 февраля 2023 г. в 13:46 +0300 от refal :
>
> Спасибо, Бойко, это очень дельно.
> Хочу только уточняюще спросить: что такое REPL?
>
>
> пн, 20 февр. 2023 г. в 11:55, Boyko Bantchev boykobb_AT_gmail.com <
> refal@botik.ru 
> >:
>
> На теме живучести Рефала позволю себе вставить свои 2 копейки (или
> 2 стотинки).
>
> Живучесть языка зависит от привлечения к его использованию новых людей.
> А какие факторы, помимо самого языка, могут этому способствовать?
>
> 1) По-моему, необходимым условием для того, чтобы язык производил
> благоприятное впечатление, является наличие документации в удобном
> и современном виде.
> Под словом «документация» имею ввиду классическую троицу:
> • исчерпывающий справочник по языку;
> • руководство по программированию на языке (вместе с кратким
>   справочником по языку);
> • справочник пользователя (компилятора и пр. составляющих
>   конкретной системы программирования на данном языке).
>
> Удобный для пользования и современный вид документации очень важен.
> Его нетрудно постичь, но основные реализации Рефала такой
> документацией не располагают. Файлы *.txt или архаичный HTML внимания
> не привлекут, они скорее отталкивают пользователей. Нужен LaTeX или
> хорошо стилизованный HTML, а лучше всего иметь и то, и другое.
> Тем более, что их можно получать из одного исходника, записанного в
> простом формате разметки. Из моего опыта, asciidoc
> (https://docs.asciidoctor.org/asciidoc/latest) без соперников с точки
> зрения богатства возможностей оформления текста при простоте разметки.
>
> 2) Привлекает пользователей также наличие классического REPL. Тому
> примеров много, причём для языков самого разного вида.
>
> 3) Возможность выполнения программ онлайн – например, как на сайтах
> https://tio.run
> https://ideone.com
> или в виде онлайн консоли (опять-таки REPL, но в браузере, как здесь
> для JavaScript):
> https://jsconsole.com
> Студентам, например, такие возможности очень нравятся. Заметил, что
> они их однозначно предпочтут даже когда установить на компе компилятор
> или интерпретатор и пользоваться им совсем нетрудно.
>
> Точки 1)-3), по-моему, нетрудно обеспечить. Следующие две требуют
> более существенную работу, но если речь идёт о выживании языка, то
> следует думать и о развитии сферы его применения, поэтому, как мне
> кажется, их тоже хорошо иметь ввиду.
>
> 4) Продвижению языка очень помогает существование написанных на нём
> прикладных библиотек. Есть немало примеров языков программирования,
> успех которых обусловлен именно наличием таких библиотек.
> Язык Python, например – яркий пример весьма заурядного по существу
> языка, получившего огромное распространение благодаря оснащённости
> прикладными библиотеками в самых разных областях. Причём создание
> библиотек шло лавинообразно: наличие одних библиотек способствовало
> применению языка и созданию новых библиотек.
> Да и Fortran не умер как раз благодаря написанным на нём библиотекам.
>
> 5) Если язык транслируется в JavaScript или WebAssembly – это сразу
> открывает возможности его применения в веб среде, и не только.
> Не говоря уже, что таким образом и сам язык обогащается за счёт
> использования уже развитой инфраструктуры.
>
>


Re: рефал всё же скорее умер :(

2023-02-20 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Спасибо, Бойко, это очень дельно.
Хочу только уточняюще спросить: что такое REPL?


пн, 20 февр. 2023 г. в 11:55, Boyko Bantchev boykobb_AT_gmail.com <
refal@botik.ru>:

> На теме живучести Рефала позволю себе вставить свои 2 копейки (или
> 2 стотинки).
>
> Живучесть языка зависит от привлечения к его использованию новых людей.
> А какие факторы, помимо самого языка, могут этому способствовать?
>
> 1) По-моему, необходимым условием для того, чтобы язык производил
> благоприятное впечатление, является наличие документации в удобном
> и современном виде.
> Под словом «документация» имею ввиду классическую троицу:
> • исчерпывающий справочник по языку;
> • руководство по программированию на языке (вместе с кратким
>   справочником по языку);
> • справочник пользователя (компилятора и пр. составляющих
>   конкретной системы программирования на данном языке).
>
> Удобный для пользования и современный вид документации очень важен.
> Его нетрудно постичь, но основные реализации Рефала такой
> документацией не располагают. Файлы *.txt или архаичный HTML внимания
> не привлекут, они скорее отталкивают пользователей. Нужен LaTeX или
> хорошо стилизованный HTML, а лучше всего иметь и то, и другое.
> Тем более, что их можно получать из одного исходника, записанного в
> простом формате разметки. Из моего опыта, asciidoc
> (https://docs.asciidoctor.org/asciidoc/latest) без соперников с точки
> зрения богатства возможностей оформления текста при простоте разметки.
>
> 2) Привлекает пользователей также наличие классического REPL. Тому
> примеров много, причём для языков самого разного вида.
>
> 3) Возможность выполнения программ онлайн – например, как на сайтах
> https://tio.run
> https://ideone.com
> или в виде онлайн консоли (опять-таки REPL, но в браузере, как здесь
> для JavaScript):
> https://jsconsole.com
> Студентам, например, такие возможности очень нравятся. Заметил, что
> они их однозначно предпочтут даже когда установить на компе компилятор
> или интерпретатор и пользоваться им совсем нетрудно.
>
> Точки 1)-3), по-моему, нетрудно обеспечить. Следующие две требуют
> более существенную работу, но если речь идёт о выживании языка, то
> следует думать и о развитии сферы его применения, поэтому, как мне
> кажется, их тоже хорошо иметь ввиду.
>
> 4) Продвижению языка очень помогает существование написанных на нём
> прикладных библиотек. Есть немало примеров языков программирования,
> успех которых обусловлен именно наличием таких библиотек.
> Язык Python, например – яркий пример весьма заурядного по существу
> языка, получившего огромное распространение благодаря оснащённости
> прикладными библиотеками в самых разных областях. Причём создание
> библиотек шло лавинообразно: наличие одних библиотек способствовало
> применению языка и созданию новых библиотек.
> Да и Fortran не умер как раз благодаря написанным на нём библиотекам.
>
> 5) Если язык транслируется в JavaScript или WebAssembly – это сразу
> открывает возможности его применения в веб среде, и не только.
> Не говоря уже, что таким образом и сам язык обогащается за счёт
> использования уже развитой инфраструктуры.
>


Re: рефал всё же скорее умер :(

2023-02-17 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Это видимо о том, что котик Шредингера может быть и жив и мертв
одновременно. Зависит от наблюдателя.


пт, 17 февр. 2023 г. в 18:21, Стеллецкий Василий sw710_AT_yandex.ru <
refal@botik.ru>:

> > И ничему-то нас Шредингер не научил...
> Виноват, Сергей Михайлович, не понял.
> А чему нас не научил Шредингер?
>
> --
> С уважением,
> Василий
> sw...@yandex.ru
>
>
>
> 17.02.2023, 15:39, "Sergei M. Abramov abram_AT_botik.ru" :
>
>  По ощущениям от прошлого года, «пациент скорее жив».
>
>
> И ничему-то нас Шредингер не научил...
>
> С.
>
>


Re: Музейная ссылочка

2021-08-11 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Да, написано с уважением, но без понимания (типа слышал звон ...). Написал
бы я коммент, да не нашел как.
А автор там указан - Антон Семин (справа вверху).
Аркадий

пн, 2 авг. 2021 г. в 10:29, Александр Гусев gusev_aleksandr_AT_mail.ru <
refal@botik.ru>:

> Добрый день, коллеги!
>
> Интересную ссылку подбросил Инстаграм. Написано с должным уважением, жаль,
> что без указания авторства.
>
>
> https://skillbox.ru/media/code/kuda-propali-sovetskie-yazyki-programmirovaniya/
>
> С уважением,
> Александр Гусев
> gusev_aleksa...@mail.ru
>
>


Re: Рефал "мертв"? Да здравствует Рефал.

2021-06-23 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Не, не противоречит. Может я неточно выразился: "минимализм" тут как бы
относительный, это как "цена" в соотношении "цена-качество", где "качество"
- это богатство выразительных средств. Цена чуть больше, но качество много
больше. Но конечно, возникает вопрос: а что, собственно, мы получаем взамен
- из возможности откусывать и приклеивать с обеих сторон. К ответу Сергея
(после "Зато") добавлю: более полно используется наша
материально-пространственная интуиция.

ср, 23 июн. 2021 г. в 15:34, Sergei M. Abramov abram_AT_botik.ru <
refal@botik.ru>:

> День добрый,
>
> > 3.  А еще хочется отметить неявную конкатенацию - хотя почему она
> > лучше явного конструктора, сказать трудно.
>
> Ой, это я всегда понимал: два больше одного.  Вот и все.
>
> В Лиспе все пораждается из атомов (один из которых Nil) одним
> конструктором (Cons _ _), причем он жесткий:
>
> (Cons A1 B1) == (Cons A2 B2) <==> A1==A2 && B1==B2
>
> В Рефале два конструктора (_) и _ _
> При этом второй не жесткий.
>
> Это противоречит лозунгу минимализма из п.4 письма Аркадия.  Зато
> делает предметную область языка гораздо богаче, а жизнь программиста
> гораздо веселее.  А метапрограммиста -- метавеселее.
>
> С уважением,
>
> Абрамов С.М.
> ab...@botik.ru
> мобильный: +7(903)2928308
>
>
>
>
>

-- 
___
*С уважением, *
*Аркадий Климов,*
*с.н.с. ИППМ РАН,*
*+7(499)135-32-95*
*+7(916)072-81-48*


Re: Re[2]: Рефал "мертв"? Да здравствует Рефал.

2021-06-23 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Попытаюсь тоже конкретизировать свое представление о рефал-мышлении.
1. Рекурсивный функциональный стиль - да, но это есть и в Лиспе (и многих
других языках).
2. А прежде всего - представление об элементарном шаге как о дереве
решений, причем не обязательно двоичном, где на ветвях - предикаты,
выраженные, в частности, образцами, но не только.
Именно поэтому условия и блоки (в том числе прозрачные, с запятыми и
откатами) считаю необходимыми (indispensable). А тонкое управление откатами
(заборы, отсечение) - уже, пожалуй, лишнее.
3. А еще хочется отметить неявную конкатенацию - хотя почему она лучше
явного конструктора, сказать трудно.
Возможно, дает ощущение какой-то свободы (?) - от необходимости все
загонять в предопределенные типы.
4. Наконец, Рефал - это непревзойденный пример того, как можно минимальными
языковыми средствами выразить все богатство идей и потребностей.
Соответственно, воспитывает тот же минимализм в конструировании.

ср, 23 июн. 2021 г. в 12:41, nikolai.kondratiev_AT_gmail.com :

> Это, вероятно, функциональный стиль программирования вообще. Возможно, что
> Erlang, например, тоже требует похожего мышления.
>
> Немного о другом.
> Я весьма скептически отношусь к понятию IQ и к тестам соответственно, но
> вроде бы этот показатель стабилен для различных тестов и почти не
> тренируется. Инвариантность IQ говорит в его пользу.
>
> Мне где-то попадалась информация о том, что изучение нового языка
> (естественного), сильно отличающегося от уже освоенных, увеличивает IQ на
> 2-3 единицы.
>
> Когда я об этом узнал, то подумал, что мое знание Рефала добавило что-то к
> моему "программистскому IQ".
>
> Такая вот лже-ученая мысль (смайлик).
>
> Коля
>
> -Ursprüngliche Nachricht-
> Von: Boyko Bantchev boykobb_AT_gmail.com 
> Gesendet: Montag, 21. Juni 2021 14:27
> An: refal@botik.ru
> Betreff: Re: Re[2]: Рефал "мертв"? Да здравствует Рефал.
>
> Здравствуйте все!
>
> Несколько человек высказалось в поддержку существования специфического для
> Рефала мышления в решении задач. Однако при этом никто не указывает, в чём
> эта специфика состоит.
> А вопрос интересен даже только ввиду того, что, по-видимому, и среди
> рефальщиков не все разделяют данную точку зрения.
>
> Тем более важно уточнить, в чём состоит связанная с Рефалом специфика,
> если говорить об (согласно Александру Гусеву) «обучении Рефалу не как
> языку, а как методу мышления». Имеется ли, например, порождённая Рефалом
> методология программирования, которую можно излагать и которой можно
> следовать, необязательно прибегая к собственно программированию на Рефале,
> и которая вместе с тем достаточно чётко отличается от других существующих
> методологий?
>


-- 
___
*С уважением, *
*Аркадий Климов,*
*с.н.с. ИППМ РАН,*
*+7(499)135-32-95*
*+7(916)072-81-48*


Re: Re[2]: Рефал "мертв"? Да здравствует Рефал.

2021-06-21 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Добрый день, Василий!
Не знаю за других, но я сидел неделю в отпуске на даче и комп не включал.
Поэтому и молчал.
Я поддерживаю мысль о специфическом рефал-мышлении. Когда-то, не имея
рефала под рукой, приходилось писать на С алгоритмы логического вывода -
так я их просто записывал на рефале на бумаге, а потом в комп вводил код на
С. А сначала пытался писать сразу на С - и ничего не получалось!
Правильно ли я вас понял, что вы имеете опыт использования рефала-6? Мне
было бы интересно узнать подробности.
Мне кстати, тоже приходилось "расшифровывать" свои старые программы, но в
этом, конечно, виноват был не язык, а автор программ.
Когда-то еще в 80-х и я писал на рефале-2, мне нравилась реализация на
Бэсм-6, где был замечательный интерфейс с фортраном, можно было легко
писать свои новые "машинные операции".
Но сейчас я соглашусь с Александром (Г), что это архаика.
Перспективной считаю многодиалектную многоплатформенную реализацию,
потенциал который заложен в последней реализации рефала+, но увы, пока
только потенциал.
Там продвинутые пользователи имели бы полную свободу экспериментировать
собственными синтаксисами, встраивать анализаторы, преобразователи, свои
представления данных и т.п.
Но поднять это на чистом энтузиазме наверно сложно. Пока остается только
мечтать.
Для примера хочу поделиться, как я экспериментировал с синтаксисом в рамках
рефала-6:
переменные терма - просто идентификаторы (со строчной буквы), переменные
символа имеют префикс ".", выражения - "_" (после которых может сразу
стоять цифра). Не предлагаю считать это чем-то эталонным. Просто для
любопытства.
Это перевод чисел в десятичное представление (в список цифр).
(Для очень больших чисел (из 1 цифр и более) он работает заметно
быстрее, чем встроенная функция SYMB. Встроенные функции LENCONT и GETS
специфичны для (моей версии) рефала-6.)
Файл CVD.rf6 (из дистрибутива рефала-6):
-- Fast Convert numbers to Decimal

-- Note: d0=10^29 > 2^96 ; lencont(d0^2)==224
$ENTRY CVD n =  224 n 10>;

Cvd1 l ld n _1 d,  : {
 '<' = ; -- n < d^2
 .   =  32> n _1 d <* d d>>;
 };
Cvd2 {
   n d = ;
   n _1 d ,  : {
0  n2 = ;
n1 n2 =  ;
   };   };
Cvd3 {
   n = ) -30 29>;
   n _1 d ,  : n1 n2 =  ;
   };

С уважением,
Аркадий Климов

пн, 21 июн. 2021 г. в 11:39, Александр Гусев gusev_aleksandr_AT_mail.ru <
refal@botik.ru>:

> Добрый день, Василий!
>
> Активность в сообществе действительно невысока нынче. Всем нужно как-то
> выживать, а выживать только на Рефале не получается у всех. ))
>
> «Есть две новости: плохая и хорошая»
>
> «Плохая» в том, что Рефал-2 в существующем виде очень архаичен и по этой
> причине не может стать популярным. Публика пугается самого простого —
> синтаксиса. Цитировать не буду. Нужно иметь готовые задачи и, желательно,
> достаточный опыт в данном диалекте, чтобы продолжать им пользоваться на
> новой платформе.
>
> «Хорошая» в том, я интересуюсь развитием Базисного Рефала, который
> достаточно близок к Рефал-2, как я понимаю. Т.е. несложно для желающих
> синтаксис Рефала-2 привести препроцессированием кода «к общему знаменателю».
>
> И ещё две новости в том же духе, начну с хорошей:
> В моём Рефале-С есть достаточно современных «фишек» естественным путём:
>
>1. Многоплатформенность в основе (интерпретатор на Golang);
>2. UTF-8 в основе (тот же Golang с этим отлично справляется);
>3. Отсутствие серьёзных ограничений по размерам программ и данных;
>4. Программу можно модернизировать в процессе выполнения;
>5. Встроен пошаговый отладчик.
>
>
> И «плохая»: с апреля вступил в «творческий кризис», сломал версию и пока
> не починил её. Надеюсь в течении лета как-то выправить ситуацию.
>
> Вступать в споры по поводу платформы не намерен. Но есть ряд соображений,
> почему сделано так так сделано. Никакой «чужой» код не был использован при
> этом.
>
> Суббота, 19 июня 2021, 23:55 +03:00 от Василий Стеллецкий swi_AT_cnshb.ru <
> refal@botik.ru>:
>
> Доброго времени суток всем!
> Итак, благодарю вас всех за такое ... трехдневное молчание.
> Считаю предложение Василия Стеллецкого считать "базовой" версией рефала
> для реального программирования версию рефал-2 молчаливым большинством
> принятой!
> Дальше осталась техника реализации этой задачи...
> Моя версия рефал-2 не годится - слишком много ограничений, нет возможности
> создать очень большую программу.
> Предлагаю как вариант, версию (я правда, с ней не знакомился, но верю, что
> всё в ней хорошо, если что - сообщество подправит ;) ):
> [
> Ура! Сегодня, 30.05.2005, наконец появилась адаптированная к современным
> платформам Windows-(95/98/ME/NT/2000/XP) и UNIX (FreeBSD, Linux) реализация
> языка Рефал-2. Работа выполнена по открытой лицензии и свободно доступна
> для любых применений, включая коммерческое использование.
> Подробности на рефал-сайте http://www.refal.net/~belous/refal2-r.htm
>  (зеркало http://www.refal.org/~belous/refal2-r.htm ) .]
>
> Желаю успехов [молчаливому] сообществу в реализации [молчаливо] 

Re: Re[2]: Рефал "мертв"? Да здравствует Рефал.

2021-06-21 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Добрый день, Василий!
Не знаю за других, но я сидел неделю в отпуске на даче и комп не включал.
Поэтому и молчал.
Я поддерживаю мысль о специфическом рефал-мышлении. Когда-то, не имея
рефала под рукой, приходилось писать на С алгоритмы логического вывода -
так я их просто записывал на рефале на бумаге, а потом в комп вводил код на
С. А сначала пытался писать сразу на С - и ничего не получалось!
Правильно ли я вас понял, что вы имеете опыт использования рефала-6? Мне
было бы интересно узнать подробности.
Когда-то еще в 80-х и я писал на рефале-2, мне нравилась реализация на
Бэсм-6, где был замечательны


пн, 21 июн. 2021 г. в 11:39, Александр Гусев gusev_aleksandr_AT_mail.ru <
refal@botik.ru>:

> Добрый день, Василий!
>
> Активность в сообществе действительно невысока нынче. Всем нужно как-то
> выживать, а выживать только на Рефале не получается у всех. ))
>
> «Есть две новости: плохая и хорошая»
>
> «Плохая» в том, что Рефал-2 в существующем виде очень архаичен и по этой
> причине не может стать популярным. Публика пугается самого простого —
> синтаксиса. Цитировать не буду. Нужно иметь готовые задачи и, желательно,
> достаточный опыт в данном диалекте, чтобы продолжать им пользоваться на
> новой платформе.
>
> «Хорошая» в том, я интересуюсь развитием Базисного Рефала, который
> достаточно близок к Рефал-2, как я понимаю. Т.е. несложно для желающих
> синтаксис Рефала-2 привести препроцессированием кода «к общему знаменателю».
>
> И ещё две новости в том же духе, начну с хорошей:
> В моём Рефале-С есть достаточно современных «фишек» естественным путём:
>
>1. Многоплатформенность в основе (интерпретатор на Golang);
>2. UTF-8 в основе (тот же Golang с этим отлично справляется);
>3. Отсутствие серьёзных ограничений по размерам программ и данных;
>4. Программу можно модернизировать в процессе выполнения;
>5. Встроен пошаговый отладчик.
>
>
> И «плохая»: с апреля вступил в «творческий кризис», сломал версию и пока
> не починил её. Надеюсь в течении лета как-то выправить ситуацию.
>
> Вступать в споры по поводу платформы не намерен. Но есть ряд соображений,
> почему сделано так так сделано. Никакой «чужой» код не был использован при
> этом.
>
> Суббота, 19 июня 2021, 23:55 +03:00 от Василий Стеллецкий swi_AT_cnshb.ru <
> refal@botik.ru>:
>
> Доброго времени суток всем!
> Итак, благодарю вас всех за такое ... трехдневное молчание.
> Считаю предложение Василия Стеллецкого считать "базовой" версией рефала
> для реального программирования версию рефал-2 молчаливым большинством
> принятой!
> Дальше осталась техника реализации этой задачи...
> Моя версия рефал-2 не годится - слишком много ограничений, нет возможности
> создать очень большую программу.
> Предлагаю как вариант, версию (я правда, с ней не знакомился, но верю, что
> всё в ней хорошо, если что - сообщество подправит ;) ):
> [
> Ура! Сегодня, 30.05.2005, наконец появилась адаптированная к современным
> платформам Windows-(95/98/ME/NT/2000/XP) и UNIX (FreeBSD, Linux) реализация
> языка Рефал-2. Работа выполнена по открытой лицензии и свободно доступна
> для любых применений, включая коммерческое использование.
> Подробности на рефал-сайте http://www.refal.net/~belous/refal2-r.htm
>  (зеркало http://www.refal.org/~belous/refal2-r.htm ) .]
>
> Желаю успехов [молчаливому] сообществу в реализации [молчаливо] принятой
> им программы!
>
> --
> С уважением,
> --
> Василий Стеллецкий
> mailto:s...@cnshb.ru 
> mailto:sw...@narod.ru
> 
>
>
>
> 17.06.2021, 00:12, "Василий Стеллецкий swi_AT_cnshb.ru"  >:
>
> Господа! Извините, что решился ввязаться в вашу дискуссию...
> 1) специфическое мышление при программировании на рефале всё-таки есть.
> Когда меня, студента в конце 1970-х (я к этому времени уже знал фортран),
> В.Л.Топунов познакомил с рефалом, я вроде всё понимал, но писать на рефале
> смог только примерно через полгода...
> Мне не удалось обучить рефалу ни сына ни кого-либо из сотрудников...
> Правда, я над ними по полгода не висел ;)
> 2) Я не теоретик - скорее практик.
> Когда в 90-х возникли задачи текстовых преобразований данных, мне так и
> хотелось их решить на рефале...
> Но! Рефала я тогда на персоналках не нашел...
> Сначала я в Turbo-C написал "рефальское отождествление", а потом в мае
> 1998-го - свою реализацию рефала/2.
> Т.к. мне было важно именно применение "инструмента", - я реализовал только
> то подмножество возможностей, в которых нуждался...
> 3) мне кажется, что рефал губит множество версий: и базовый, и 2, и 5, и
> 6, и +, и 5lambda, не говоря уж о D и что-то там еще...
> Когда в начале 2000-х проявилось рефальское сообщество, я познакомился с
> версиями 5, 6, +...
> Почему-то я выбрал для использования - 6. Там была развитая работа с
> файлами, а в моей тогдашней версии этого еще не было.
> Если входных или выходных файлов было более одного, для моего тогдашнего
> рефала - это была проблема.
> Мне сейчас приходится не читать, а расшифровывать те программы, которые я
> тогда написал на р

Харитоновские Научные Чтения - 2021

2021-05-25 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Завтра, в среду, 26.5, мы с Андреем выступаем с докладами на XXII
Международной конференции Харитоновские Тематические Научные Чтения
"Суперкомпьютерное моделирование и искусственный интеллект", которая
проходит в регулярно в Сарове. Секция 2:

9.10 – 9.30 ДЕТЕРМИНИРОВАННОЕ ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ И
РАСПРЕДЕЛЕННЫЕ ВЫЧИСЛЕНИЯ: ПРОЦЕСС КОНВЕРГЕНЦИИ
Климов А.В.1 , Адамович А.И.2
1 Институт прикладной математики им. М.В. Келдыша РАН, Москва
2 Институт программных систем им. А.К. Айламазяна РАН, Переславль-Залесский

9.50 – 10.10 ОСОБЕННОСТИ РЕАЛИЗАЦИИ ТЕСТА HPCG ДЛЯ ППВС «БУРАН»
Змеев Д.Н., Климов А.В., Окунев А.С., Левченко Н.Н.
Институт проблем проектирования в микроэлектронике РАН, Москва
В качестве аннотации (в оправдание за как бы оффтопик) скажу, что для меня
наш язык UPL, в котором выражается представляемый алгоритм - это как бы
"рефал в области супервычислений". Почему - требует отдельного разговора.

Вот ссылка гостевая для подключения (для секции 2):
https://conf.rosatom.ru/#join:t93916cdc-2656-45c6-a7a5-ede35e7b06d0
Там надо представиться (фамилия имя, организация), в графе "о себе" можно
написать "гость".
Полную программу можно посмотреть по ссылке:
https://www.sphti.ru/wp-content/uploads/2021/05/%D0%9F%D0%A0%D0%9E%D0%93%D0%A0%D0%90%D0%9C%D0%9C%D0%90-%D0%A5%D0%9D%D0%A7-2021.pdf
Поскольку время может сбиваться (в любую сторону), лучше войти заранее и
следить по докладам.

С уважением,
Аркадий Климов


Re: Вопрос к выпускникам физматшкол или математикам/программистам

2021-05-12 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Первая задача мне показалась весьма сложной, а вторая - наоборот, столь
простой, что я даже сначала подумал, нет ли какого подвоха, вроде не нашел
и успокоился. О первой думал долго (больше 5 минут, наверно), нашел простой
вариант с нарушением непрерывности в одной точке, и долго не мог понять,
как от него избавиться, пока не увидел, что Антон сделал обе за две минуты,
тогда понял, что надо действовать по-простому и быстро доделал (как старый
олимпиадник, я похоже умею решать только задачи, про которые знаю, что
решение есть и не очень сложное).
Полагаю, тут главная фишка была в том, чтобы понять, что куски функций с
этими свойствами (непрерывность и сохранение [ир]рациональности) можно
склеивать (с совмещением концов) и двигать по оси X (на рациональное
смещение) -- при этом данные свойства сохраняются (а я долго пытался
ограничиться одной формулой).
Получается, что первая задача - это двухходовка: (1) взять 1/x и (2)
подвигать куски. Вторая - одноходовка: увидеть инвариантность числа кусков
от выбора последовательности разломов. Поэтому первая сложнее.
Хотя, возможно, для кого-то "увидеть инвариантность" - это весьма сложно.
Но не для олимпиадника. Поскольку в любой олимпиадной задаче приходится
устанавливать инвариантность чего-то относительно какого-то произвола,
имеющегося в условии (что даже можно считать определением понятия
"олимпиадная задача"). Здесь еще трудность в том, что просят найти
минимальный вариант, а не доказать, что как ни ломай, будет одинаково. То
есть до постановки вопроса об инвариантности еще надо дойти. В этом смысле
вторая задача - тоже двухходовка: (1) поставить вопрос, что число разломов
не зависит от выбора пути, и (2) суметь это доказать. Но это как бы две
части одного хода. Поэтому все-таки вторая проще.

Аркадий

PS. А мне в связи с этим вспомнилась такая задача (говорят, ее любил давать
Колмогоров): Есть 4 одинаковых бутылки, можно ли их расположить на столе
так, чтобы расстояния между горлышками любых двух были одинаковыми.


ср, 12 мая 2021 г. в 04:47, Anton Orlov orlovan_AT_gmail.com :

> Добрый день!
>
> Мне показалось, что задачки примерно одинаковые по сложности (над обоими
> пришлось сосредоточенно поразмышлять минуту-две).
>
> Не смотрел видео, но вижу в заголовке "профессора не справились" --
> видимо, речь про вторую задачку, и это меня не удивляет.
> Мне она напомнила другую задачку, про которую тоже утверждалось, что
> академик в здравом уме решить её не в состоянии, при этом дети, не
> испорченные ещё всякими иррациональностями, решают её на ура (это я сам
> наблюдал):
>
> Есть таблица, в которой написаны числа. Сумма чисел в каждой строке равна
> 42. И сумма чисел в каждом столбце тоже равна 42. Надо доказать, что
> таблица квадратная.
>
> Антон
>
> On Tue, May 11, 2021 at 2:22 PM Sergei M. Abramov abram_AT_botik.ru <
> refal@botik.ru> wrote:
>
>> Не бейте сильно за офф-топик!
>>
>> https://www.facebook.com/sergei.abramov.96/posts/10225409374317673
>>
>> Вопрос к выпускникам физматшкол или математикам/программистам
>>
>> Вот внизу есть две задачи.  И еще ссылка на видео про историю этих
>> задач (просьба поставить на паузу в 6:30).
>>
>> Автор ролика (да и я сам) интересуется, для какой доли выпускников
>> физматшкол (или просто математиков, программистов) первая задача проще
>> второй задачи.
>>
>> Буду благодарен за Ваши мысли и репосты (для более широкого опроса).
>> Мне история (про чаепитье академиков с этой парой задач) показалась
>> удивительной.
>>
>> PS.  В видео есть мой комментарий на эту тему...  Но его стоит читать
>> когда для Вас все закончится ;-)
>>
>> ==
>>
>> Задача 1.  Придумайте непрерывную функцию, которая была бы определена
>> на всей действительной оси, принимала рациональные значения в
>> рациональных точках, иррациональные значения в иррациональных точках,
>> и при этом не являлась бы линейной ни на каком промежутке.
>>
>> Задача 2.  Шоколадка имеет размер 6×10 клеток.  За один ход
>> разрешается разломать один из уже имеющихся кусков на два по
>> какой-нибудь ложбинке.  За какое наименьшее число ходов можно разбить
>> всю шоколадку на единичные клетки?
>>
>> https://youtu.be/GyruSwKAro0
>>
>> С уважением,
>>
>> Абрамов С.М.
>> ab...@botik.ru
>> мобильный: +7(903)2928308
>>
>>

-- 
___
*С уважением, *
*Аркадий Климов,*
*с.н.с. ИППМ РАН,*
*+7(499)135-32-95*
*+7(916)072-81-48*


Re: О разделении логики и дизайна

2021-05-11 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Да тоже плохо помню, могу сказать только вообще, что непрозрачность это как
бы дополнительная фишка, о которой надо еще позаботиться, а без нее все
проходит через стек переходов (вроде бы), который и так уже есть для
образцов со многими е-переменными.

К слову, хотел бы заметить про неортогональность (непрозрачности блоков) с
позиций программиста. Когда мне надо уточнить предложение условием, я
просто вставляю условие через запятую, но если условий окажется несколько,
с разными последствиями для каждого (или одинаковыми, но условия не удается
просто совместить в одном), приходится вводить варианты в виде блока. Но
поскольку это просто сложное условие, то блок, конечно, должен быть
прозрачным, чтобы в оставшихся случаях пошел откат, как и для одиночного
условия. Иначе придется вводить вспомогательную функцию. Простейший пример:
...,  s.N : { 0;1 } , ... . Тут, кстати, еще и продолжение после блока
подразумевается.

пн, 10 мая 2021 г. в 14:52, nikolai.kondratiev_AT_gmail.com :

> Уже точно не помню, может быть Аркадий что-нибудь сможет добавить
>
>
>
> *Von:* Александр Коновалов a.v.konovalov87_AT_mail.ru 
> *Gesendet:* Sonntag, 9. Mai 2021 12:50
> *An:* refal@botik.ru
> *Betreff:* RE: О разделении логики и дизайна
>
>
>
> Добрый день, Николай!
>
> *«Когда я писал компилятор в язык сборки, то обнаружил, что непрозрачность
> блоков для неуспехов неудобна для реализации.»*
>
> А чем неудобна?
>
>
>
> С уважением,
> Александр Коновалов
>
>
>
> *From:* nikolai.kondratiev_AT_gmail.com 
> *Sent:* Sunday, March 28, 2021 11:42 PM
> *To:* refal@botik.ru
> *Subject:* AW: О разделении логики и дизайна
>
>
>
> Николай Кондратьев высказал следующий тезис (возможно прочитанный в
> каком-то труде, а может сам красиво сформулировал – помнит ли он сейчас?):
>
> Надо тщательно различать логику и дизайн языка программирования. Плохо,
> когда они путаются и решения принимаются то в пользу одного, то другого
> (типичная ситуация в комитетах по стандартизации языков).
>
> Андрей, спасибо, что вспомнил. Я этого не помню, хотя это утверждение мне
> близко.
>
> Когда я писал компилятор в язык сборки, то обнаружил, что непрозрачность
> блоков для неуспехов неудобна для реализации. А кроме того, мне пришла в
> голову мысль, что после результата замены можно поставить двоеточие и
> продолжить цепочку. В общем что-то похожее на то, что реализовал Аркадий в
> РЕФАЛЕ 6.
>
> Я обсуждал это с Турчиным по телефону, но ему это не понравилось.
>
> После некоторых размышления я пришел к выводу, что Рефал-5 очень хорошо
> сбалансирован. В нем нет избыточных конструкций и осталось то, что делает
> Рефал рефалом.
>
> По поводу регулярных выражений в Рефале.
>
> Мне кажется нужно идти по другому пути, который начат Аркадием в Рефал-Ява
> и по-моему в Рефале+ - создавать интерфейсы с другими языками. Важно, чтобы
> они получались органичными.
>
>
>
> Например, когда мы используем Рефал для синтаксического анализа, то ясно,
> что это не очень эффективно, поскольку тратится два-три вызова функций, на
> одну литеру входного текста.
>
> По-видимому обогнать по скорости конечный автомат, а следовательно Lex/
> Yacc очень трудно.
>
>
>
> Интеграция Рефала с Явой могла бы сильно помочь.
>
> К сожалению я в свое время не нашел хорошую реализацию Lex/Yacc на Яве.
> Они есть, но похоже с ошибками.
>
>
>
> Но есть на C# - это пакет NuGet под названием YaccLexTools.
>
>
>
> У меня есть желание написать компилятор Рефал-C# так, чтобы можно было бы
> интегрировать вместе Рефал, C# и Lex/Yacc.
>
>
>
> Так можно объединить три технологии, каждая из которых возможно лучшая в
> своем классе.
>
>
>
> Вот так вот как-то.
>
>
>
> Николай
>
>
>
> *Von:* Andrei Klimov andrei_AT_klimov.net 
> *Gesendet:* Sonntag, 28. März 2021 21:12
> *An**:* refal@botik.ru
> *Betreff**:* О разделении логики и дизайна
>
>
>
> [Сменил сабж, так как "Остапа понесло".]
>
>
>
> On Sun, Mar 28, 2021 at 8:31 PM Александр Коновалов
> a.v.konovalov87_AT_mail.ru  wrote:
>
> Добрый вечер, Андрей!
>
>
>
> В Рефале-5 запятая для откатов прозрачна. Не прозрачны для откатов только
> фигурные скобки — блоки после двоеточия и сами вызовы функций. Поэтому
> результатное выражение после запятой неуспеха породить не может
> (по определению), а образец после двоеточия — запросто.
>
>
>
> Синтаксис «, выражение : образец» в Рефале-5 есть и он называется 
> «where-конструкция».
> Синтаксис «, выражение : {…}» называется with-конструкцией. Они
> упоминались не только в учебнике, но и в главах обнинской школы
> метавычислений — там вместо запятой используются ключевые слова *where* и
> *with* соответственно.
>
>
>
> Спасибо! Буду иметь в виду. Значит, в нашем разговоре Турчин имел в виду
> первое, а я не до конца ухватил и перенес на второе тоже. Значит, логика
> такая:
>
>- «{...}» – это подставленное тело функции,
>- «, выражение :» – это синтаксис для ее вызова,
>- «, выражение : образец ...» – это отдельная конструкция со своей
>семантикой, отличающейся от  «, выражение : { образец ...}».
>
> 

Re: Refal6-basic

2021-03-27 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
*"Данный суперкомпилятор умел повышать местность функций и распознавал
«параметры-призраки» — параметры, при передаче значений в которые не нужно
инкрементировать счётчики ссылок."*


Хочу уточнить, чтобы не было недоразумений, что "полусуперкомпилятор" из
Рефала в С состоял из двух отдельных частей: собственно
(полу)суперкомпилятор, написанный Н.Кондратьевым, вырабатывающий граф
конфигураций, и отображение графа в С, mapping, как назвал его Турчин еще в
70х гг., которое было "поручено" сделать мне. Повышение местности
производил первый компонент, а "призраки", actual/ghost variables (это
термин Турчина) возникали уже при отображении, на уровне графа они еще не
имеют смысла. На самом деле, и в mapping-е это работа была недоделана: этот
аспект еще как-то проработан в пределах одной C-функции (образа одной
конфигурации), при том, что все входные параметры-выражения конфигураций
считались actual. Хотелось иметь глобальную оптимизацию этой разметки, было
понятно как, и я даже статью про это написал, когда был у Турчина (в
1990м), и под его "пинками", но ее тогда не приняли, там куда я ее послал,
и на этом все закончилось.
Ох, сейчас хотелось бы все это реанимировать, но нужно время, силы... К
большому сожалению сопроводительные отчеты по маппингу утрачены (они
делались в CHI-writer, бумажные копии передавались через посредника в ИПС,
который за эту работу платил, мои же копии потерялись). Сохранились только
коды на рефале, надеюсь работоспособные. Там был введен и использовался
некий промежуточный символьный язык - РАМАЛ (как бы "Refal Assembler
Mapping Language").
Аналог языка сборки, но бесстековый, для прямой трансляции в С.

Что касается кода самого рефала, то да, рефал-6 это модификация рефала-6b,
кодов общих много, даже названия файлов старые. Небольшие модификации
поначалу были мотивированы тем, чтобы сделать более удобным включение новых
отображенных функций. А потом, видимо, я вошел во вкус, и меня "понесло".
Кстати и рефал6 хотелось бы выложить в github с исходниками, но опять
недосуг, а как сделать быстро и правильно, я пока не разбираюсь.
Надо, конечно, найти время, и еще хотя бы на такое же "описание реализации".
Коля, а что это за файл такой большой там на 150 МБ, по ссылке под "Studio
Community 2019 solution ", файл
refal6.zip. У меня после загрузки он выглядит пустым. Судя по названию и
размеру, это, вероятно, сборка проекта (-ов) под MS Visual Studio со всеми
исходниками и (промежуточными) результатами.

Аркадий

сб, 27 мар. 2021 г. в 01:38, nikolai.kondratiev_AT_gmail.com :

> Спасибо за замечания!
>
>
>
> OPEN исправлю.
>
> Имена в system.ref не остаются в таблице имен, насколько я помню, поэтому
> чистить не обязательно, правда память не освобождается.
>
> В dinload.ref может быть было опасно оставлять определения функций кроме
> LOAD и DELETE.
>
>
>
> Должен заметить, что эти тексты программ были написаны в 1988 году и я не
> все помню.
>
> Я не писал диссертации, связанной с Рефалом и не работал в ИПМ.
>
>
>
> >Стало быть, когда-то была реализация Рефала-6, гораздо более близкая к
> Рефалу-5, чем нынешняя реализация Аркадия Климова
>
> > (которая приобрела ряд черт Рефала Плюс и некоторых своих, уникальных
> черт).
>
> >Ваши исходники позволяют получить представление о том, как эта реализация
> могла выглядеть.
>
> Это, собственно, она и есть. Изменения с тех пор незначительны.
>
>
>
> Я не использовал исходных текстов предыдущих реализаций, но использовал
> язык сборки Романенко-Турчина и теоремы об удлинениях Сергея Романенко (не
> все). Тогдашняя реализация Рефала-5 не использовала теоремы об удлинениях.
> На каких-то примерах Рефал-6 сильно выигрывал.
>
>
>
> *Von:* Александр Коновалов 
> *Gesendet:* Freitag, 26. März 2021 22:41
> *An:* nikolai.kondrat...@gmail.com
> *Betreff:* Re: Refal6-basic
>
>
>
> Добрый вечер, Николай Викторович!
>
>
>
> *«Все замечания приветствуются»*
>
>
>
> В функции OPEN не поддерживается режим 'a'. В функции rb_open()
> допускаются только «r» и «w» в обоих регистрах.
>
>
>
> В файле dinload.ref не чистится функция Resort в Null. В system.ref
> вообще ничего не чистится.
>
>
>
>
>
> Андрей Валентинович рассказывал, что в ИПМ кто-то писал диссертацию про
> проверку типов Рефала с использованием регулярных выражений, а потом уехал
> в Германию. Это не Вы были?
>
>
>
>
>
> С уважением,
> Александр Коновалов
>
>
>
>
>
> *From**:* nikolai.kondratiev_AT_gmail.com 
>
> *Sent:* Friday, March 26, 2021 3:22 PM
>
> *To:* refal@botik.ru
>
> *Cc:* 'Andrei Klimov' 
>
> *Subject:* Refal6-basic
>
>
>
> Уважаемые коллеги!
>
>
>
> После того, как Рефал-6 был передан Аркадию Климову для дальнейшей с ним
> работы, язык довольно сильно изменился, что не всегда мне нравилось. В
> своей работе я использовал имеющуюся у меня реализацию, в которой тоже
> понемногу происходили изменения, наиболее важным из которых была длинная
> арифметика. Я считал, что в реализации Рефала неограниченное целое число
> должно быть одним символом с точки зр

Re: Re[2]: 90-летие Валентина Федоровича Турчина (14.2.1931–7.4.2010)

2021-02-16 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Мы ведь обычно проводим в начале апреля семинар памяти Турчина. Если в этот
раз получится (по Zoom), можем обкатать и рекомендовать что-то и на PSSV.
Надеюсь, еще не поздно будет?
Аркадий

вт, 16 февр. 2021 г. в 17:09, 'Shilov Nikolay' via Метавычисления и
специализация программ :

> (1) Вот ссылка на Трахтенброт-100:
> https://persons.iis.nsk.su/en/Trakhtenbrot100 — Милости просим!
>
> (2) На PSSV есть секция для коротких (студенческих) работ и постеров, так
> что студенты-дипломники из бауманки — добро пожпловать!
>
>
>
> Вторник, 16 февраля 2021, 16:15 +03:00 от Andrei Klimov  >:
>
> Николай, добрый день!
>
> Спасибо! Хорошая идея. Я бы с удовольствием подготовил презентацию о
> научном наследии Турчина. Благо, я уже делал подобные доклады и некоторый
> материал уже накоплен.
>
> А получится ли секция по метавычислениям – зависит от того, подадут ли
> достаточно докладов, в частности, участники этой гугл-группы. Но можно
> попихать народ: вдруг получится?
>
> Традиционный июньский Рефал-семинар в Бауманке имеет специфически
> студенческий стиль и формат. Поэтому я не уверен, что какое-либо
> присоединение его к "высоколобому" научному workshop'у оправданно. Боюсь,
> такое действие может испортить сложившийся стиль каждого из мероприятий. Но
> может, я неправ и не настаиваю: просто у меня нет идей, как это может
> выглядеть.
>
> Кстати, а указанные вами онлайн-семинары памяти Тратенброта и Подловченако
> открытые? Если да, нельзя ли дать ссылки на место, где можно
> зарегистрироваться и потом послушать?
>
> Всего наилучшего,
> Андрей Климов
>
>
> On Tue, Feb 16, 2021 at 11:23 AM Shilov Nikolay  > wrote:
>
> Андрей Валентинович,
>
> В этом году — много памятных дат. Вот, например, группа учеников (и
> учеников учеников Б.А. Трахтенброта) в предстоящую субботу 20 февраля (в
> День Рождения Бориса Абрамовича) проводи однодневный онлайн семинар,
> посвященный его 100-летию, в следующую субботу 27 февраля Владимир
> Анатольевич Захаров проводит семинар, посвященный 90-летию Риммы Ивановны
> Подловченко, 19 апреля в Новосибирске пройдут две Ершовские лекции,
> посвященные 90-летию Андрея Петровича…
>
> У меня вопрос-предложение: может быть, Вы (как член Программного Комитета
> предстоящей PSSV-2021) организуете специальную сессию на PSSV-2021 по
> метавычислениям, суперкомпиляции и т.д. с одним приглашенным докладом, 2-3
> отобранными докладами (из поданных на PSSV-2021) и мемориальным докладом о
> Валентине Федоровиче? — Такую сессию можно организовать совместно с
> ежегодным Рефал-семинаром (если Александр Коновалов и другие организаторы
> семинара не будут возражать).
>
> PSSV-2021 пока не объявлена, но, по-видимому, она пройдет в Москве (в ИСП,
> ВШЭ или ВМК МГУ) в 10-ых числах июня (между между школой и конференцией
> Logic Perspective http://lp2020.mi-ras.ru/ перенесенной на 2021), но
> предварительно на PSSV02021 предварительно запланирована одна специальная
> сессия, посвященная работам Отдела технологий программирования ИСП РАН
> (приглашенный докладчик — А.К. Петренко).
>
> Николай Вячеславович Шилов
>
>
> Понедельник, 15 февраля 2021, 2:37 +03:00 от Andrei Klimov <
> and...@klimov.net 
> >:
>
>
> Дорогие друзья!
>
> Исполнилось 90 лет со дня рождения Валентина Федоровича Турчина.
>
> Он мог бы дожить до этого возраста с сохранением ясности ума, как бывает у
> творческих людей. Но и за свои годы он сделал так много и с таким
> заглядыванием в будущее, что нам еще осваивать и осваивать его наследие.
> Надо издавать и переиздавать его труды. Это еще за нами, его учениками.
>
> Только представить, что к 40 годам он уже успел покинуть теорфизику,
> защитив докторскую, создать язык Рефал и собрать группу молодых
> рефальщиков, развить новую эволюционную концепцию метасистемного перехода и
> написать о ней книгу "Феномен науки"! Верность представленным в ней
> философским взглядам и своему мировоззрению привела его к общественной и
> правозащитной деятельности.
>
> А дальше было создание и развитие суперкомпиляции, как крупномасштабного
> метасистемного перехода над алгоритмами и программами, причем не только ее
> базового уровня, который к нынешним временам уже "обсосан" в работах
> последователей, а и предложил по крайней мере два круга идей, как совершить
> второй метасистемный переход от вычислений к метавычислениям (для спецов
> отмечу, что имею в виду окрестностный анализ и исчисление грамматик путей).
> Концепция МСП показывает, что метасистемные переходы не являются чудом и "не
> ходят по одному", и совершив один, сразу ищи, как сделать следующий. Вот
> такую установку он нам дал своим примером!
>
> Затем последовала разработка философии развития общества в книге "Инерция
> страха" и в других философских работах по кибернетической эпистемологии и
> онтологии. Он говорил, что новую философию невозможно "внедрить" в умы,
> убедить, не продемонстрировав ее работу на конкретных результатах.
>
> И следующим таким результатом стали новые конструктивные основания
> математики, названные им Cybernetic Foun

Re: Конференция МЭС - 2020

2021-02-04 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Александр, добрый день!
Очень интересная идея, спасибо!
Мне она не приходила в голову.
Аркадий

чт, 4 февр. 2021 г. в 11:23, Александр Коновалов a.v.konovalov87_AT_mail.ru
:

> Доброе утро, Аркадий!
>
> *«Есть и другой вариант — использовать модель стека в форме слова
> в некотором алфавите. Мощность алфавита должна быть не меньше наибольшего
> числа „параллельных“ (рекурсивных) вызовов в рамках одной функции.
> Слово-стек легко кодировать целым числом, только длина его в битах будет
> расти линейно с глубиной рекурсии. Как-то так.»*
>
> В прошлом году Станислав Санталов (мой ученик) читал в ИПМ доклад
> о попытке распараллелить вычисления в Рефале. В обсуждаемой реализации
> распараллеливанию подвергались только чистые функции.
>
> Вы тогда заметили, что на практике широко распространены «почти чистые»
> функции — функции, которые могли быть чистыми, но используют единственную
> недетерминированную функцию — генератор «свежих» имён/индексов. Например,
> если программа является компилятором и ей нужно порождать в ассемблерном
> листинге имена для меток.
>
> Такую программу можно сделать чистой следующим образом. Функции, которым
> нужны свежие индексы, должны будут принимать число, номер очередного
> индекса, и возвращать число. Но тогда между по смыслу независимыми вызовами
> возникнет зависимость по данным и эти вызовы перестанут быть
> «параллельными».
>
> Я об этом думал, и тоже пришёл к предложенной Вами схеме: индексом сделать
> строку в некотором алфавите и наращивать её разными символами при передаче
> в разные дочерние вызовы:
>
> F {
>   …
>   … (e.ID) … = …  …  …;
>   …
> }
>
> Но, при дополнительном анализе кода и изменении схемы наращения строки
> можно добиться и логарифмической длины во многих практических случаях. Для
> этого нужно один из вызовов функции в правой части назначить «циклическим».
> При передаче строки-идентификатора в циклический вызов, к строке
> приписывается число, либо, если число уже приписано, оно инкрементируется.
> В остальные вызовы к строке будет приписываться символ-нечисло. Очевидно,
> циклическим вызовом должен быть рекурсивный вызов (если таковых в правой
> части несколько — то только один из них):
>
> *F* {
>   …
>   … (e.ID) … = …  … *) …*>* …;
>   …
> }
>
> Inc {
>   e.Str '0' = e.Str '1';
>  e.Str '1' =  '0';
>   e.Str = e.Str '0';
> }
>
> Для нескольких рекурсивных вызовов в правой части циклический можно
> назначить либо произвольно, либо с учётом алгоритма — тот, по которому
> рекурсия ожидается глубже. В качестве эвристики можно различать хвостовые
> и нехвостовые вызовы.
>
>
>
> *«…вся память „ассоциативная“, или „content-addressаble“.»*
>
> Вопрос только в производительности этой памяти и скорости обмена с ней.
>
>
>
> С уважением,
> Александр Коновалов
>
>
>
>
>
> *From:* Arkady Klimov arkady.klimov_AT_gmail.com [mailto:refal@botik.ru]
> *Sent:* Tuesday, February 2, 2021 8:32 PM
> *To:* refal@botik.ru
> *Subject:* Re: Конференция МЭС - 2020
>
>
>
> Александр, добрый день!
>
> Тоже извиняюсь за задержку, затерялось Ваше письмо.
>
> Вопрос хороший, я постоянно (время от времени) подумываю насчет реализации
> Рефала в этой модели. Да, видимо тут нельзя предложить какой-то общей
> интерпретации индексов. В обычных задачах у нас индексы имеют
> содержательный прикладной смысл. Здесь же, видимо, это будет, как в обычных
> реализациях рефала и функц. языков, некий "свежий указатель", разница лишь
> в том, что тут не нужна какая-то память, с ним связанная, просто в силу
> того, что вся память "ассоциативная", или "content-addressаble". И если в
> обычных системах для порождения "свежего указателя" мы используем реальный
> пул свободных ячеек с адресами, то здесь нужны только сами "адреса". А для
> их порождения (и освобождения) можно вполне использовать такой же реальный
> пул ячеек (звеньев), размер которых должен быть достаточен лишь для
> размещения ссылок для организации списка свободных ячеек (адресов).
>
> Есть и другой вариант - использовать модель стека в форме слова в
> некотором алфавите. Мощность алфавита должна быть не меньше наибольшего
> числа "параллельных" (рекурсивных) вызовов в рамках одной функции.
> Слово-стек легко кодировать целым числом, только длина его в битах будет
> расти линейно с глубиной рекурсии. Как-то так.
>
> Аркадий
>
>
>
> чт, 21 янв. 2021 г. в 12:25, Александр Коновалов
> a.v.konovalov87_AT_mail.ru :
>
> Добрый день, Аркадий!
>
> Прошу прощения за поздний ответ, только сейчас я наконец добрался до этого
> письма.
>
> Вы написали в рассылку refal@botik.ru, и поэтому у меня к Вам вопрос:
> а можно ли применить этот подход к распараллеливанию программ на Рефале?
> Или он применим только к массивам однородных вычислений вроде
> рассмотренного перемножения матриц?
>
> Если брать Рефал Плюс, то у конкретизаций есть несколько входных
> и выходных аргументов, которые тоже можно представлять токенами в этой
> модели. Но проблема будет в том, что множество конкретизаций во время
> выполнения не известно заранее и назначить им индекс

Re: Re[2]: Сравнение веток Рефала

2021-02-02 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Александр, спасибо,
однако я пока не уверен, что понимаю, что это за штука такая. Не могли бы
Вы еще добавить в Ваш док небольшое описание возможных сценариев
использования, от начинающих изучать рефал до каких-то продвинутых
приложений. И немного подробнее по взаимодействию между задачами и
пользователями.
С уважением,
Аркадий Климов

вт, 19 янв. 2021 г. в 11:33, Александр Гусев gusev_aleksandr_AT_mail.ru <
refal@botik.ru>:

> Добрый день, коллеги!
>
> Высылаю обещанную аннотацию моей разработки по Рефалу.
> По требованию — дополню.
> С уважением,
> Александр Гусев
> gusev_aleksa...@mail.ru
>
>


Re: Конференция МЭС - 2020

2021-02-02 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Александр, добрый день!
Тоже извиняюсь за задержку, затерялось Ваше письмо.
Вопрос хороший, я постоянно (время от времени) подумываю насчет реализации
Рефала в этой модели. Да, видимо тут нельзя предложить какой-то общей
интерпретации индексов. В обычных задачах у нас индексы имеют
содержательный прикладной смысл. Здесь же, видимо, это будет, как в обычных
реализациях рефала и функц. языков, некий "свежий указатель", разница лишь
в том, что тут не нужна какая-то память, с ним связанная, просто в силу
того, что вся память "ассоциативная", или "content-addressаble". И если в
обычных системах для порождения "свежего указателя" мы используем реальный
пул свободных ячеек с адресами, то здесь нужны только сами "адреса". А для
их порождения (и освобождения) можно вполне использовать такой же реальный
пул ячеек (звеньев), размер которых должен быть достаточен лишь для
размещения ссылок для организации списка свободных ячеек (адресов).
Есть и другой вариант - использовать модель стека в форме слова в некотором
алфавите. Мощность алфавита должна быть не меньше наибольшего числа
"параллельных" (рекурсивных) вызовов в рамках одной функции. Слово-стек
легко кодировать целым числом, только длина его в битах будет расти линейно
с глубиной рекурсии. Как-то так.
Аркадий

чт, 21 янв. 2021 г. в 12:25, Александр Коновалов a.v.konovalov87_AT_mail.ru
:

> Добрый день, Аркадий!
>
> Прошу прощения за поздний ответ, только сейчас я наконец добрался до этого
> письма.
>
> Вы написали в рассылку refal@botik.ru, и поэтому у меня к Вам вопрос:
> а можно ли применить этот подход к распараллеливанию программ на Рефале?
> Или он применим только к массивам однородных вычислений вроде
> рассмотренного перемножения матриц?
>
> Если брать Рефал Плюс, то у конкретизаций есть несколько входных
> и выходных аргументов, которые тоже можно представлять токенами в этой
> модели. Но проблема будет в том, что множество конкретизаций во время
> выполнения не известно заранее и назначить им индекс статически невозможно.
> Или всё-таки можно что-то придумать?
>
>
>
> С уважением,
> Александр Коновалов
>
>
>
> *From:* Arkady Klimov arkady.klimov_AT_gmail.com [mailto:refal@botik.ru]
> *Sent:* Wednesday, September 16, 2020 11:44 PM
> *To:* refal@botik.ru; metacomputation...@googlegroups.com
> *Subject:* Re: Конференция МЭС - 2020
>
>
>
> Сообщаю интересующимся, что наконец залил презентацию своего доклада (в
> формате pptx).
>
> Надеюсь теперь будет понятнее, а то статья получилась сумбурная и потому
> трудно читаемая.
>
> Ее, как и статью, можно найти среди докладов (скажем, по фамилии автора) в
> разделе *Доклады* сайта конференции
>
> http://www.mes-conference.ru/
>
> Туда же можно попасть по прямой ссылке
>
> http://www.mes-conference.ru/index.php?page=reportsV3
>
>
>
> Название моего доклада:
>
> *Средства верификации распределения вычислений в потоковой архитектуре
> ППВС «Буран»*
> 
>
> Хотя вопрос довольно частный, но кажется получилось интересно. И относится
> он скорее не к конкретной архитектуре, а к ее абстрактной модели вычислений.
>
> Надеюсь скоро озвучку выставить. (В принципе текст озвучки уже введен в
> виде комментариев к слайдам).
>
> С уважением,
>
> Аркадий
>
>
>
> PS. Просматривать вроде можно и без регистрации (кроме обсуждения), а для
> комментирования (обсуждения) надо зарегистрироваться.
>
> Буду рад комментариям.
>
>
>
>
>
> чт, 16 июл. 2020 г. в 10:14, Arkady Klimov :
>
> Отвечая на просьбу организаторов конференции, сообщаю коллегам о том, что
> проводится в режиме заочного интернет-форума
>
>
>
> Всероссийская с международным участием научно-техническая конференция
> *"Проблемы разработки перспективных микро- и наноэлектронных систем"*
>
> *МЭС-2020*
>
>
>
> Зарегистрировавшись на портале
>
> http://www.mes-conference.ru/  ,
>
> можно читать выставленные статьи (в разделе *Доклады*) и участвовать в их
> обсуждении.
>
> Спасибо за участие!
>
> --
>
> ___
>
>
>
>


Fwd: «Problems’ Day» Wed 30.12.2020 9:00 in Zoom - New Year's Eve meeting of the CS&SE Interlaboratory Seminar Novosibirsk + Innopolis + ...

2020-12-28 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Форвардирую для информации

-- Forwarded message -
От: Arkady Klimov 
Date: пн, 28 дек. 2020 г. в 21:05
Subject: Re: «Problems’ Day» Wed 30.12.2020 9:00 in Zoom - New Year's Eve
meeting of the CS&SE Interlaboratory Seminar Novosibirsk + Innopolis + ...
To: 


Hello, Nikolai.
I wish to contribute the Problems' Day with a problem I encountered (within
my current work) not in 2020, but in the last three years (i.e. in 2018).
If it is ok, the problem is the following.
*Abstract.*
Alice is going to send Bob through Carl a box with p coins, where 1 ⩽ p ⩽
P. However, Bob will not know their exact number p in advance, but only its
lower and upper bounds 1 and P. Alice can mark each coin with one of K
colors: 1 , 2, ..., K. We need to propose a way (which Bob will know about)
to choose the number of coins of each color for each number of transferred
coins p from 1 thru P so that Bob can understand that Carl did not steal
anything. For example, if K⩾P, then Alice can mark all coins with the color
p.
It is necessary for a given number of colors K to determine the maximum P,
depending on K, at which this is possible. Or, given P, determine the
smallest sufficient number of colors K.

It turns out that P(K) is described by a well-known (among SE-CS
specialists) function. More precisely, for such a P(K) it is possible, and
I am sure that it cannot be increased, although this has not yet been
rigorously proven (and this is the problem)..

*Аннотация*
Алиса собирается  послать  Бобу через Карла коробку с p монетами, где  1 ⩽
p ⩽ P. Но Бобу не будет заранее известно их точное число p, но только его
нижняя и верхняя грани 1 и P. Алиса каждую монету может пометит одной из K
красок: 1,2,...,К. Требуется предложить способ (о котором Боб будет знать)
выбрать число монет каждого цвета для каждого числа передаваемых монет p от
1 до P так, чтобы Боб смог понять, что Карл ничего не украл. Например, если
К⩾Р, то Алиса может все монеты пометить цветом номер р.
Нужно при данном числе красок К определить максимальное P,  зависящее от K,
при котором такое возможно. Или при данном P определить наименьшее
достаточное число красок K.

Оказывается, P(K) описывается хорошо известной (среди SE-CS-специалистов)
функцией. Точнее, для такого P(K) это возможно, и я уверен, что увеличить
его нельзя, хотя строго это еще не доказано (и в этом проблема).

Arkady Klimov

Если будет принято, то было бы неплохо, если бы слушатели получили данную
аннотацию заранее и могли чуток подумать сами - тогда будет лучше
восприниматься результат.

вс, 27 дек. 2020 г. в 06:19, Andrei Klimov :

> Доброе утро!
>
> Форвардирую объявление организатора семинаров CS&SE Николая Шилова о
> мероприятии в среду 30 декабря в 9:00 мск по Zoom'у.
> До завтра (понедельника 28.12.20) приглашаются желающие подать заявку на
> 10-минутный доклад о волнующих ее/его проблемах CS&SE.
>
> Андрей Климов
>
>
> -- Forwarded message -
> From: Shilov Nikolay 
> Date: Fri, Dec 25, 2020 at 10:22 AM
> Subject: «Problems’ Day» - New Year's Eve meeting of the CS&SE
> Interlaboratory Seminar Novosibirsk + Innopolis + ...: Wednesday December
> 30, 2020 at 9:00 am (Moscow time)
>
> Dear All,
>
> Next *Wednesday December 30, 2020, from 9:00 to 11:00+* (Moscow time
> zone) we will have *7th session* of our Inter-Lab seminar on CS&SE. - *Please
> feel free to forward this invitation* to colleagues who may be interested.
>
> *Topic*: Problems’ Day
> *Short description*: Volunteers are invited to present in 10 minutes the
> most challenging/fascinating/interesting/exciting 
> problem/result/research/topics
> in SE/CS/CE/IT/Math/Sci that they encountered/learnt/read/heard/studied
> in 2020. Each short presentation will be followed by a short Q/A
> & discussion. Language of presentations, Q/A & discussion sessions — *English
> *(preferable for slides) and *Russian* (preferable for discussion).
>
> *If you would like to contribute* — please send me back (*just as reply*)
> a short message with a title and a short (3 sentences at most) annotation
> by *Monday December 28* and be ready to present your stuff on *Wednesday
> December 30* in 10 minutes using 3-6 slides (at most).
>
> *Venue*:
>
> (*) Innopolis University room 304
> OR (*) Zoom (
> https://us02web.zoom.us/j/85087216747?pwd=VXB0cVNtQVNTT2xTZFFWRnd4TWcwQT09,
> conf. id 850 8721 6747, password: 063350).
> Nikolay V. Shilov
>
> ===
> Regarding materials of the previous (6th) meeting (on Wednesday December
> 16): video of the talk *The four PEGS of requirements engineering *by 
> *Bertrand
> Meyer* is available at
> https://drive.google.com/file/d/1AsWlL45xLDj4wLVOEbeCcFmXySeDMsU-/view?usp=sharing
> .
>
> *Abstarct*: Bad software requirements can jeopardize projects., but
> requirements as commonly practiced remain a weak link in software
> engineering. What passes for requirements in industry usually consists of a
> few use cases or user stories, which fail to capture many essential aspects

Re: Рефал-5, Рефал Плюс и форматы

2020-12-25 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Александр, Вы же сами пишете, что частью языка Рефал Плюс являются форматы,
- это и есть то решение, которое и предполагалось, и осуществлено в Рефале
Плюс.
Что касается компиляции Рефала-5 в бэкенд Рефала Плюс, то именно
предполагалось, что форматы будут по возможности выявляться динамически, по
крайней мере, так я себе это представлял. А разве не вы с дипломниками эту
проблему уже рассматривали и вроде даже как бы решили в прошлом году? Или
там было что-то другое? Тогда уточните.
В принципе, аналогичная работа производилась в рамках
полусуперкомпилятора Рефала-6 Н.Кондратьевым. А при отображении в С эти
форматы использовались (к сожалению, уже четверть века это лежит без
употребления).
Аркадий

чт, 24 дек. 2020 г. в 22:33, Александр Коновалов a.v.konovalov87_AT_mail.ru
:

> Доброй ночи всем!
>
> В принципе, я разобрался, как надо повышать местность и коместность при
> компиляции Рефала-5 в массивное представление. Могу изложить, как бы я это
> сделал (а может, когда-нибудь и сделаю, через год, через два). Но сначала я
> хотел бы узнать, как это предполагалось в Рефале Плюс.
>
>
>
> С уважением,
> Александр Коновалов
>
>
>
> *From:* Александр Коновалов a.v.konovalov87_AT_mail.ru [mailto:
> refal@botik.ru]
> *Sent:* Wednesday, December 16, 2020 12:07 AM
> *To:* refal@botik.ru
> *Subject:* Рефал-5, Рефал Плюс и форматы
>
>
>
> Добрый вечер всем!
>
> На сколько я знаю, когда-то были планы реализации front-end’а Рефала-5
> в компиляторе Рефала Плюс. Т.е. предполагалось использовать компилятор
> Рефала Плюс для компиляции исходных текстов Рефала-5.
>
> (Дальше пишу подробно, поскольку не все подписчики знакомы
> с рассматриваемой проблемой. Те, кто знакомы, могут сразу промотать письмо
> до конца.)
>
> Но есть один нюанс. Рефал Плюс использует массивное представление данных
> с дорогой конкатенацией. А это значит, что традиционный способ передавать
> параметры в функцию, используя N−1 скобок для N e-параметров будет
> приводить к избыточной конкатенации, а значит, и увеличению порядка
> сложности.
>
> Пример, замена символов A на B:
>
> Fab { e.X =  }
>
> Loop {
>   (e.Acc) 'A' e.Rest = ;
>   (e.Acc) s.X e.Rest = ;
>   (e.Acc) /* пусто */ = e.Acc;
> }
>
> Здесь есть две конкатенации, с которыми столкнётся Рефал Плюс.
>
> Первая — конкатенация символа с аккумулятором e.Acc 'B' и e.Acc s.X. Если
> длина аккумулятора N, то потребуется создать новый массив длины N+1,
> скопировать в него содержимое e.Acc и дописать туда символ ('B' или s.X).
> На каждом шаге аккумулятор вырастает на единицу, а значит, затраты времени
> на копирования элементов будут N×(N+1)/2 = O(N²), где N — исходная длина
> строки.
>
> Вторая — конкатенация скобочного терма с остатком строки (…) e.Rest.
> В ней затраты те же: нужно создать массив длины N+1 (где N — длина e.Rest),
> скопировать туда e.Rest и скобочный терм. Тоже сложность будет O(N²).
>
> Первая проблема, проблема роста аккумулятора, решается пустым местом
> вокруг формируемого массива. На большинстве итераций новый символ будет
> дописан в пустое место, а сам массив копировать не потребуется. Затраты
> времени на формирование выражения в аккумуляторе будут амортизированными
> линейными. Детали пересказывать не буду (когда-то их уже обсуждали
> в рассылке). В общем, решение элегантное.
>
> А вот вторую конкатенацию дыры не спасут, т.к. их там нет.
> В массиве-аргументе слева от e.Rest уже находится символ, вписать на его
> место круглую скобку нельзя, т.к. участком массива 'A' e.Rest может
> пользоваться другая часть программы.
>
> Эту проблему создатели языка решили жёстко: форматы функций (которые,
> вообще-то, идиома, рекомендация) сделали частью языка.
>
> Теперь программист вынужден для каждой функции указывать формат, образцы
> всех предложений должны этот формат уточнять, результат работы функции
> в этот формат тоже обязан вкладываться. Аргументы функций также должны
> соответствовать входному формату.
>
> Для функций выше в программе должны быть написаны следующие строчки:
>
> $func Fab e.X = e.X;
> $func Loop (e.Acc) e.X = e.Acc;
>
> Для каждого вызова Loop компилятор проверит, что фактический аргумент
> вкладывается в формат, после чего аккумулятор и остаток строки передаст в
> виде двух отдельных параметров. Конкатенации не будет. Сложность функции
> будет амортизированно линейной.
>
> Теперь написать функцию с несколькими форматами или с необязательными
> параметрами нельзя. Вернее можно, но это будет неэффективно.
>
>
>
> Так вот, к чему я пишу. На Рефале-5 конкатенация дешёвая, форматов
> на уровне синтаксиса нет, встречаются функции с несколькими форматами. Как
> быть с такими программами? Если функциям неявно приписывать формат e.X = e
> .X, то программы для Рефала-5, скомпилированные Рефалом Плюс, будут
> работать заведомо медленно. Причём медленнее не на константу, а на порядок
> алгоритма.
>
> А что же тогда предполагалось делать, чтобы программы для Рефала-5 были
> приемлемо эффективны, будучи скомпилированы Рефалом Плюс?
>
>
>
> В соседней ветке мы обсуждаем

Re: Запахи кода и антипаттерны в Рефале

2020-12-14 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Я тоже начал было писать про "настоящее выворачивание", но Александр меня
опередил.
Да, это оно самое. Мне такой стиль не нравится, и сам я так не пишу.
Возможно, потому, что Рефал-6 позволяет не экономить на копированиях, и я
предпочитаю рекурсивный стиль. Но хочу высказаться в защиту этой формы,
которую использовал Турчин. Думаю, тут дело не в экономии копирований, а в
стиле мышления. Как ни странно, Турчин рассматривал работу рефал-программы
как пошаговый процесс с изменяющимся состоянием. Отсюда и понятие поля
зрения. Да, оно моделирует стек, неявно возникающий при рекурсии. Но при
мета-деятельности Турчин предпочитал поле зрения объектной программы
держать как бы целиком перед глазами. В центре - активная конкретизация, а
по краям - окружение. Отсюда и возник такой стиль. Он в каком-то смысле
сближает рефал с машиной Тьюринга, только вместо линейной ленты - дерево.
Когда-то около 90 года я попытался с ним на эту тему заговорить, как бы
предлагая перейти на рекурсивный стиль, но он как-то это сходу отверг, мол
так ему удобнее. Разговора по существу не получилось. Поэтому сейчас я его
так и понимаю, как написал выше.

С уважением,
Аркадий

пн, 14 дек. 2020 г. в 16:08, Александр Коновалов a.v.konovalov87_AT_mail.ru
:

> Василий, не надо пошаговую прокрутку. Я неправильно посчитал скобки.
> Во входной строке их не 4, а 3, поэтому всё сходится: 3+1=4.
>
>
>
> *From:* Василий Стеллецкий swi_AT_cnshb.ru 
> *Sent:* Monday, December 14, 2020 4:58 PM
> *To:* refal@botik.ru
> *Subject:* Re: Запахи кода и антипаттерны в Рефале
>
>
>
> Александр.
> Действительно.
> Еще раз, Большое спасибо.
> PS Если хотите, могу прислать пошаговую прокрутку обоих вариантов...
>
>
>
> --
> С уважением,
>
> --
>
> Василий Стеллецкий
>
> mailto:s...@cnshb.ru   mailto:sw...@narod.ru
> 
>
>
>
>
>
>
>
> 14.12.2020, 16:38, "Александр Коновалов a.v.konovalov87_AT_mail.ru" <
> refal@botik.ru>:
>
> Василий!
>
> Разница тут принципиальная. В первом варианте стек был системный,
> программист писал рекурсивную функцию, явно со стеком не манипулировал.
> Поскольку программист за стек не отвечает, сломаться стек не может.
> Во втором случае — стеком явно управляет программист. И он может ошибиться,
> например, положить состояние на один стек и не положить на другой. Или
> снять состояние только с одного стека. В любом случае стеки
> рассинхронизируются. Или допустить ошибку в формате, перепутав стек
> с обрабатываемыми данными (например, перепутав tL и tR).
>
> a =/0/k/Enum/ 'abc' (('de') 'f' ('gh') 'ij') 'k'.
> Enum e1 = k/EndEnum/k/DoEnum/e1 /1/..
> DoEnum s1 e2 sN = sN k/DoEnum/ e2 k/P1/sN..
>   (e1)e2 sN = k/DoEnum-Wrap/ *(k/DoEnum/ e1 sN.) e2*.
>   sN = sN
> DoEnum-Wrap *(e1 sN) e2* = (e1) k/DoEnum/ e2 sN.
> EndEnum e1 sN = e1
>
> И нету оборачивания скобки в рекурсивном решении.
>
> Один шаг сэкономился на EndEnum, т.к. в последнем предложении мы и стеки
> отбрасываем, и счётчик. Ещё шаги экономятся на обработке скобок.
> Открывающая скобка в обоих вариантах требует одного шага. Закрывающая
> скобка — двух шагов: последнее предложение DoEnum, где она видит аргумент
> с пустой строкой и счётчиком и DoEnum-Wrap, которая выбрасывает вон
> скобку и продолжает цикл DoEnum. Но закрывающих скобок 4, должно
> сэкономиться 4 шага. И один на EndEnum. 4+1≠4, где-то что-то я не учёл.
>
>
>
> С уважением,
> Александр Коновалов
>
>
>
> *From:* Василий Стеллецкий swi_AT_cnshb.ru 
> *Sent:* Monday, December 14, 2020 4:05 PM
> *To:* refal@botik.ru
> *Subject:* Re: Запахи кода и антипаттерны в Рефале
>
>
>
> Александр!
> Большое спасибо за подробный рассказ!
> Но, то что в примере применили Вы - тоже самое: Справа стек.
> Только просмотренную часть Вы не собирали в левой скобке, а сразу выводили
> за пределы функции...
> Точнее стек получался из вызовов DoEnum-Wrap и скобок наизнанку ...
> Еще раз, Большое спасибо!
> P.S. А в этом варианте получился 31 шаг.
> 4 шага где-то сэкономили ;)
>
>
>
> --
> С уважением,
>
> --
>
> Василий Стеллецкий
>
> mailto:s...@cnshb.ru   mailto:sw...@narod.ru
> 
>
>
>
>
>
>
>
> 14.12.2020, 15:23, "Александр Коновалов a.v.konovalov87_AT_mail.ru" <
> refal@botik.ru>:
>
> Василий!
>
> Выворачивание скобок, оно же сквозной просмотр, — это другое. Это
> использование стека для представления незакрытых скобок. Например, так:
>
> Enum e1 = k/DoEnum/ /0/ ('$') e1 '$'.
>
> * Формат: k/DoEnum/ sN (tL eS) eU tR
> *   eS — просканированная часть
> *   eU — непросканированная часть
> *   tL — стек просканированных частей слева
> *   tR — стек непросканированных частей справа
>
> * символ просто переносим
> DoEnum sN (tL eS) s1 eU tR = k/DoEnum/ k/P1/sN. (tL eS sN) eU tR.
> * в скобочный терм спускаемся
>sN (tL eS) (e1) eU tR = k/DoEnum/ sN ((tL eS)) e1 (eU tR).
> * термы кончились, но стек не пустой
>sN ((tL eS) e1) (eU tR) = k/DoEnum/ sN (tL eS (e1)) eU tR.
> * термы кончились и стек тоже пустой — выход из цикла
>sN ('$' eS) '$' = eS
>
> Почему здесь скобки наизнанку? Потому что для частично просмотренного

Re: Конференция МЭС - 2020

2020-09-16 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Сообщаю интересующимся, что наконец залил презентацию своего доклада (в
формате pptx).
Надеюсь теперь будет понятнее, а то статья получилась сумбурная и потому
трудно читаемая.
Ее, как и статью, можно найти среди докладов (скажем, по фамилии автора) в
разделе *Доклады* сайта конференции
http://www.mes-conference.ru/
Туда же можно попасть по прямой ссылке
http://www.mes-conference.ru/index.php?page=reportsV3

Название моего доклада:
Средства верификации распределения вычислений в потоковой архитектуре ППВС
«Буран»

Хотя вопрос довольно частный, но кажется получилось интересно. И относится
он скорее не к конкретной архитектуре, а к ее абстрактной модели вычислений.
Надеюсь скоро озвучку выставить. (В принципе текст озвучки уже введен в
виде комментариев к слайдам).
С уважением,
Аркадий

PS. Просматривать вроде можно и без регистрации (кроме обсуждения), а для
комментирования (обсуждения) надо зарегистрироваться.
Буду рад комментариям.


чт, 16 июл. 2020 г. в 10:14, Arkady Klimov :

> Отвечая на просьбу организаторов конференции, сообщаю коллегам о том, что
> проводится в режиме заочного интернет-форума
>
> Всероссийская с международным участием научно-техническая конференция
> *"Проблемы разработки перспективных микро- и наноэлектронных систем"*
> *МЭС-2020*
>
> Зарегистрировавшись на портале
> http://www.mes-conference.ru/  ,
> можно читать выставленные статьи (в разделе *Доклады*) и участвовать в их
> обсуждении.
> Спасибо за участие!
> --
> ___
>
>


Конференция МЭС - 2020

2020-07-16 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Отвечая на просьбу организаторов конференции, сообщаю коллегам о том, что
проводится в режиме заочного интернет-форума

Всероссийская с международным участием научно-техническая конференция
*"Проблемы разработки перспективных микро- и наноэлектронных систем"*
*МЭС-2020*

Зарегистрировавшись на портале
http://www.mes-conference.ru/  ,
можно читать выставленные статьи (в разделе *Доклады*) и участвовать в их
обсуждении.
Спасибо за участие!
-- 
___
*С уважением, *
*Аркадий Климов,*
*с.н.с. ИППМ РАН,*
*+7(499)135-32-95*
*+7(916)072-81-48*


Об ИЛИ-параллелизме (Re: Re[2]: Семинар по метавычислениям ...)

2020-05-26 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Да, конечно, это непросто. Я обычно предполагал, что при порождении
ИЛИ-группы будет создаваться некий общий объект типа Bool, который
сбрасывается, когда кто-то закончит, и он всем по ссылке передается, чтобы
поглядывали, и если он сброшен, то пора отменяться. Насчет вложенности
особо не думал пока.
Аркадий

вт, 26 мая 2020 г. в 00:07, Александр Коновалов a.v.konovalov87_AT_mail.ru <
refal@botik.ru>:

> Доброй ночи, Аркадий!
>
> В архитектуру Рефала-05, который мы тогда обсуждали на семинаре, добавить
> ИЛИ-параллелизм просто не получится. Т.к. в случае ИЛИ-параллелизма нужно
> будет информацию распространять обратно — от отложенной конкретизации,
> которая была отменена, к вызовам функций, от которых она зависела, чтобы их
> тоже отменить. А как делать это эффективно, я не представляю. Можно,
> конечно, при каждой отмене задачи уведомлять все активные задачи, для
> каждой из них прослеживать цепочку предков — если среди них есть отменённая
> задача, то отмениться и самому. Так себе решение, но других очевидных
> сравнительно эффективных подходов я не вижу. Плюс ещё нужна эффективная
> реализация барьера для параллельных задач — финишную ленточку порвать может
> только один, а остальные должны отмениться.
>
>
>
> С уважением,
> Александр Коновалов
>
>
>
> *From:* Arkady Klimov arkady.klimov_AT_gmail.com [mailto:refal@botik.ru]
> *Sent:* Monday, March 23, 2020 5:38 PM
> *To:* Александр Гусев ; refal@botik.ru
> *Subject:* Re: Re[2]: Семинар по метавычислениям в понедельник 2 марта
> 2020 в ИПМ
>
>
>
> Я бы упомянул еще один вид параллелизма - ИЛИ-параллелизм. В строгом
> смысле в рефале места для него сейчас нет.
>
> Было бы, если бы кроме отождествления "слева" и "справа" добавить "любое"
> - подходит любой вариант
>
> длины открытой е-переменной. Или если ввести "машинную операцию" типа
>  =
>
> применять tF к термам eX в любом порядке или параллельно, и если есть хотя
> бы один,
>
> где результат не неуспех, то его и выбрать (любой), иначе неуспех.
>
> Этот вид встречается в задачах типа поиска доказательств. Также в
> суперкомпиляции.
>
> Он не сводится к обычному И-параллелизму, поскольку в нем нужно убивать
> запущенные подпроцессы,
>
> чего в И-параллелизме не бывает.
>
> Аркадий
>
>
>
>
>


Re: Re[2]: Семинар по метавычислениям в понедельник 2 марта 2020 в ИПМ

2020-03-23 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Я бы упомянул еще один вид параллелизма - ИЛИ-параллелизм. В строгом смысле
в рефале места для него сейчас нет.
Было бы, если бы кроме отождествления "слева" и "справа" добавить "любое" -
подходит любой вариант
длины открытой е-переменной. Или если ввести "машинную операцию" типа
 =
применять tF к термам eX в любом порядке или параллельно, и если есть хотя
бы один,
где результат не неуспех, то его и выбрать (любой), иначе неуспех.
Этот вид встречается в задачах типа поиска доказательств. Также в
суперкомпиляции.
Он не сводится к обычному И-параллелизму, поскольку в нем нужно убивать
запущенные подпроцессы,
чего в И-параллелизме не бывает.
Аркадий

пн, 23 мар. 2020 г. в 14:23, Александр Гусев gusev_aleksandr_AT_mail.ru <
refal@botik.ru>:

> Ответил в личку
>
>
>
> Понедельник, 23 марта 2020, 12:58 +03:00 от Eisymont Leonid
> verger-lk_AT_yandex.ru :
>
> Александр, про уровни распараллеливания в Рефале известно с конца 70-х
> годов.
> Вы правильно это разложили в своих пунктах. Мы сейчас говорим о втором
> пункте. Первый пункт - это, наверное, будет решение на одномерном клеточном
> автомате. Оно также лежит с конца 70-х.
> Пункт 3 - в начале 2000-х ввели в Рефал через машинные операции работу с
> MPI. Эта реализация у нас есть. в середине прошлого десятилетия был
> небольшой опыт использования этого. Мы в Модуле эту реализацию даже
> поставили на один из серверов, но далее пока это направление не развиваем -
> много более неотложных дел, да еще этот короновирус добавился...
> Ваши рассуждения правильны, надо общаться. Как узнать подробнее о том, чем
> Вы занимались?
> Л.Эйсымонт
>
> 23.03.2020, 12:29, "Александр Гусев gusev_aleksandr_AT_mail.ru" <
> refal@botik.ru >:
>
> Добрый день!
>
> Как я понимаю, параллелизм может быть нескольких видов:
>
>1. Распараллеливание внутри одной операции, например, поиска по
>большому массиву. Это может быть сделано вне языковой сущности Рефала — с
>помощью «железа» или СУБД;
>2. Распараллеливание на уровне ветвей при вычислении одного выражения,
>с учётом функций или без;
>3. Распараллеливание на уровне алгоритма — создание параллельных
>потоков, решающих по-сути разные задачи.
>
> Пункт 1 работает хорошо и понятно, только не даёт глобального выигрыша,
> так как применим в ограниченном количестве случаев.
> Пункт 2 представляет наибольший интерес для автоматизации
> распараллеливания, только реализации реальной пока не видно, хотя серьёзные
> исследования были. Почему? Трудоёмко и эффективность непредсказуема. Для
> получения как-нибудь ясной картины я предлагаю опираться на статистику,
> которая должна вырабатываться на предварительно обрабатываемых наборах
> данных. В зависимости от решаемых задач эти наборы могут отличаться. Такого
> рода оптимизация уже делается в серверных решениях для СУБД. Называется
> «план запроса». На эту тему создано достаточное количество практических
> решений, позволяющих этим серверам работать в меняющихся и совсем разных
> условиях. Почему бы не применить эту технологию для Рефала? Требуется
> разработка, конечно.
> Пункт 3 тоже из области серверного мышления: нет необходимости всю большую
> задачу «забивать» в один поток. При наличии возможности межпотокового
> взаимодействия сложная задача обычно выигрывает от такого разбиения.
>
> Это я к чему: если принять Рефал — систему изначально параллельной,
> параллелизм выполнения придёт. Однако, для этого нужно начинать не с
> переделки популярных однопользовательских и однозадачных решений, а «с
> нуля». Тогда всё получится быстрее, чем за 20 лет.
>
> В связи с этим я готов выразить удивление, что мой проект по созданию как
> раз серверного решения не вызвал видимого интереса за прошедшие полгода с
> момента его обнародования. Даже не сам проект, поскольку меня в сообществе
> немногие и знают. Сама идея не находит ожидаемого отражения. Или я этого не
> вижу. А проект продвигается в меру моих возможностей. Не быстро, к
> сожалению. Но будущее как раз за такими решениями — серверными и
> обязательно тиражными, если уж оно есть. Тиражность фактически закончилась
> после завершения эпохи использования у нас «взрослых» компьютеров — БЭСМ-6
> и серии ЕС ЭВМ.
>
> Воскресенье, 22 марта 2020, 12:03 +03:00 от Arkady Klimov
> arkady.klimov_AT_gmail.com  >:
>
> Немного встряну про параллелизм.
> Имхо существенное ускорения получается там и тогда, когда единицы
> распараллеливания достаточно крупны (при том, что их достаточно много).
> Сегодня это не менее 10 мкс или 10 Кфлоп. Собственно, об этом упоминал
> Леонид (проблемы функций с малыми временами, накладные расходы).
> Поэтому что для чистого, что для грязного, все равно надо укрупнять шаги,
> 1мкс это мало.
> Но от компилятора этого ждать трудно. Придется получать эту инфу от
> программиста, ему-то виднее.
> Хотя какое-то рантайм-профилирование может быть полезным (но не по
> операторам отождествления-замены, а по функциям).
> А "умный" компилятор или рантайм пусть использует результаты. Кт

Re: Семинар по метавычислениям в понедельник 2 марта 2020 в ИПМ

2020-03-22 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Немного встряну про параллелизм.
Имхо существенное ускорения получается там и тогда, когда единицы
распараллеливания достаточно крупны (при том, что их достаточно много).
Сегодня это не менее 10 мкс или 10 Кфлоп. Собственно, об этом упоминал
Леонид (проблемы функций с малыми временами, накладные расходы).
Поэтому что для чистого, что для грязного, все равно надо укрупнять шаги,
1мкс это мало.
Но от компилятора этого ждать трудно. Придется получать эту инфу от
программиста, ему-то виднее.
Хотя какое-то рантайм-профилирование может быть полезным (но не по
операторам отождествления-замены, а по функциям).
А "умный" компилятор или рантайм пусть использует результаты. Кто-то
пытался так делать?
Аркадий

сб, 21 мар. 2020 г. в 18:32, Eisymont Leonid verger-lk_AT_yandex.ru <
refal@botik.ru>:

> Автоматическое распараллеливание с учетом побочного эффекта можно и
> оставить, но это не должно повредить основному, о чем я говорил для чистого
> рефала без побочного эффекта. Абзац в ответе по поводу автоматического
> распараллеливания в Вашем письме я не понял. Мы параллелили компиляцию
> (выполняемую компилятором на Рефале) на уровне операторов исходной
> программы, а исходная программа  на фортрано-подобном языке.
> Статистику по основным затратам при выполнении разных рефал-программ
> делали. Затраты на открытые переменные - это миф. Я же пересылал Вам
> материалы, там есть расклад. Измерения были достаточно точные, поскольку
> выполнялись на микропрограммной реализации Рефала. Это была разработка ИПМ
> тех лет.
> Диссертации моей в электронном виде у меня нет, тогда еще этого не было. У
> меня только в оригинале. М.б. есть в сети, кто-то отсканировал.
> Дипломная работа Александра Фролова и статьи уже 2000-х годов у меня есть,
> но я ведь статьи и презентации пересылал. Надо повторить?
> Л.Эйсымонт
>
>
> 21.03.2020, 18:03, "Александр Коновалов a.v.konovalov87_AT_mail.ru" <
> refal@botik.ru>:
>
> Добрый вечер, Леонид!
>
> Текст диссертации, препринт и дипломная работа доступны в электронном
> виде? Я бы почитал.
>
>
>
> *«Оставьте затею с решением побочного эффекта на автомате.»*
>
> Имеем программу для обычного последовательного Рефала.
>
> Если компилятор поддерживает распараллеливание на автомате, то для
> параллельного выполнения в идеале ничего делать не надо: оно само
> распараллелится. Чтобы обеспечить бо́льшую степень параллелизма, нужно
> в программу добавить больше независимых чистых вычислений. Например, если
> это компилятор, то можно сначала загрузить в память несколько исходных
> файлов, потом их всех в памяти откомпилировать в целевой код, потом (если
> не было ошибок) записать скомпилированный код в целевые файлы. Компиляция
> на втором этапе может быть полностью чистой, при этом отдельные исходники
> транслируются независимо. А значит, будут параллелиться. При этом программу
> по-прежнему можно будет откомпилировать и запустить на обычной
> последовательной реализации Рефала.
>
> А если компилятор не поддерживает автоматическое распараллеливание? Что
> тогда делать?
>
>
>
> *«Рекомендую решать проблему распараллеливания только для чистого Рефала,
> там есть чем заняться для минимизации накладных расходов и по балансировке
> параллельных вычислений.»*
>
> Согласен, есть чем заняться. В имеющейся реализации балансировка очень
> примитивная с высокими накладными расходами.
>
>
>
> *«Ещё там есть проблема функций с малыми временами выполнения, их лучше
> последовательно выполнять, но для этого их надо уметь выявлять.»*
>
> Я вообще исходил из предположения, что все функции Рефала имеют малое
> время выполнения. Исходная последовательная версия Рефала-05 компилирует
> себя за 1,9 секунд, при этом делает 2 244 201 шаг. Т.е. 1 шаг занимает
> в среднем 0,85 микросекунд.
>
> Но о том, что разные шаги выполняются разное относительное время, я
> не задумывался. Любопытно это проверить экспериментально. Можно
> предположить, что функции, в которых нет открытых e-переменных, повторных
> и копируемых e- и t-переменных, будут выполняться быстрее. Но это надо
> проверять. Подопытный Рефал-05 имеет классическую списковую реализацию.
>
> Т.е. экспериментально любопытно проверить следующее: есть ли значимое
> отличие между функциями, которые выполняются «быстро», и функциями, которые
> выполняются «медленно». Есть ли вообще такой феномен, как «функция с малым
> временем выполнения».
>
>
>
> С уважением,
> Александр Коновалов
>
>
>
> *From:* Eisymont Leonid verger-lk_AT_yandex.ru 
> *Sent:* Saturday, March 21, 2020 4:05 PM
> *To:* refal@botik.ru; Alexander Frolov 
> *Subject:* Re: Семинар по метавычислениям в понедельник 2 марта 2020 в ИПМ
>
>
>
> Александр, по поводу первого доклада. Эти проблемы с побочными эффектами
> мы исследовали сорок лет назад. Элементы были включены в мою диссертацию,
> которую я защищал в ИПМ в мае 1983 года. Была "спешная" защита, поскольку я
> был включен в группу сотрудников ИПМ для работ по Бурану. И было ясно, что
> к этой тематике мне не вернуться. Еще был препринт ИПМ по
> распарараллел

Re: Умер Леня Проворов

2020-03-09 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Этого не может быть!
Я только что написал в статье по истории рефала для SORUCOM-20 об участии
Лени в создании реализации на Минск-32 в начале 70-х, отметив, что им был
написан собственно интерпретатор языка сборки - "резидентная часть", как мы
ее тогда называли. Причем всего за три дня, а ведь это порядка 1000 строк
кода на ЯСК (язык символического кодирования, по современному ассемблер). И
заработал он почти сразу, без отладки.
Хотел дать ему прочесть, может добавил бы чего, уточнил. Я не мог
вспомнить, где он тогда учился  - уже на физтехе, или еще в 10-м классе
ФМШ, хотел спросить. Но все другие дела отвлекали.
Потом у меня с ним больше не было совместных дел (не считая участия в
семинаре и застольях), а жаль. Он был увлечен разработкой языка для
аналитических выкладок, а я так и нашел времени в этом как следует
разобраться.
Для меня он всегда был и останется - молодым, талантливым, ярким.
Аркадий Климов

пн, 9 мар. 2020 г. в 00:01, Nikolai Kondratiev
nikolai.kondratiev_AT_gmail.com :

> Светлая память!
>
>
> Am 08.03.2020 um 21:56 schrieb Andrei Klimov andrei_AT_klimov.net:
>
> Страшная новость в такой весенний день:
>
> Сегодня 8 марта неожиданно ушел от нас Леня Проворов.
>
> Я только что узнал об этом из его ленты в ФБ:
> https://www.facebook.com/leonid.provorov.5
> Пишут, что инфаркт.
>
> Недавно он вернулся из Италии, провел отпуск на горных лыжах в Альпах.
> Ничего не предвещало...
>
> Для нас с Сергеем Романенко он был как бы "ученик": в ФМШ пришел на наш
> "спецкурс" по Рефалу – наш первый опыт преподавания в 1971/1972 уч.году, –
> и остался единственным рефальщиком из того набора. Потом 3-4 года разницы в
> возрасте перестали что-то значить, и мы стали одним кружком друзей.
>
> ...Сейчас не идут слова. Лишь образ Лени светлый и теплый...
>
> Андрей Климов
>
>

-- 
___
*С уважением, *
*Аркадий Климов,*
*с.н.с. ИППМ РАН,*
*+7(499)135-32-95*
*+7(916)072-81-48*


Re: Статическая типизация в Рефале

2019-12-06 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
чт, 5 дек. 2019 г. в 21:51, Александр Коновалов a.v.konovalov87_AT_mail.ru <
refal@botik.ru>:

> Добрый вечер, Аркадий!
>
> *«Александр, спасибо, что реанимировали старую дискуссию.»*
>
> Некропостинг эпический. Реанимируем дискуссию 20-летней давности. Когда Вы
> писали то письмо, мне было 12 лет. Как Вы там писали: «Хорошо бы кто-то
> из молодых за это взялся.».
>
>
>
> *«Поэтому я даже перенёс тексты писем моего и Михаила в docx-файлы,
> которые прилагаю.»*
>
> Спасибо!
>
>
>
> *«Из своих прежних воззрений я, пожалуй, отверг бы отказ
> от параметрического полиморфизма (ПП). Тогда я ещё очень мало использовал
> функции высших порядков и не придавал им значения. Но без ПП какой-нибудь
> Map всё перечеркнёт. Поэтому сейчас согласен с вами, что ПП нужен.»*
>
> Для начала надо разобраться с типами первого порядка (уровень условного
> «Паскаля»). Потом уже думать о параметрическом полиморфизме языка первого
> порядка (уровень «шаблонов Си++»), а уже потом замахиваться на высший
> порядок с функциями вроде Map. В Рефале Плюс, где есть форматы функций,
> косвенный вызов доступен только для функций формата e = e.
>
Конечно, для начала хорошо бы сделать хоть что-то.


> *«И* *пожалуй, действительно, лучше ввести итератор, а* *тогда можно и* 
> *отказаться
> от** e**-рекурсии на* *верхнем уровне типа.»*
>
> Если у Вашей системы типов убрать требование попарного непересечения,
> то благодаря e-рекурсии система становится даже более мощной, чем система
> Михаила Ковтуна.
>
В данном контексте "мощнее" не значит "лучше" - поскольку сложнее (или
невозможно) будет проверять .
Честно говоря, я не могу сказать, что вполне и до конца понимаю систему
Михаила, ее возможности и ограничения. В самом письме многое неформально,
от формализации автор уклонился.

> Система Михаила описывает типы некоторыми регулярными выражениями. А их
> можно привести к эквивалентной грамматике, где правила имеют вид
>
> e.Type ::= ε
>   | e.Type1 (e.Type1′)
>   | e.Type2 (e.Type2′)
>   | …
>   | e.Type1″ SYM1
>   | e.Type2″ SYM2
>   | …
>
> t.Type ::= SYM1 | SYM2 | … | (e.Type)
>
> Т.е. описывается при помощи L-образцов с e-рекурсией. Но проверить
> попарное непересечение в этой системе трудно (вернее, можно доказать
> «по построению»).
>
> А почему более мощной? Потому что допускаются некоторые
> контекстно-свободные языки вроде
>
> e.Rec ::= ε | L e.Rec R
>
> Язык описывает цепочки вида Ln Rn, где n ≥ 0.
>
> А вот система с итератором и без e-рекурсии как раз наоборот является
> подмножеством системы Михаила.
>
>
>
> *«Возможно, моё ограничение на непересечение образцов из правых частей при
> игнорировании типовых атрибутов можно ослабить»*
>
> Оно вообще, как мне кажется, необязательно — можно проверять корректность
> программ и с типами, имеющими неортогональные альтернативы (далее
> «неортогональные типы» для краткости).
>
> Вообще, система с одним итератором замкнута относительно пересечения, т.е.
> тип-пересечение тоже выражается при помощи той же нотации (могу доказать).
> Причём, если в исходных грамматиках альтернативы были ортогональными,
> то в грамматике типа-пересечения альтернативы тоже будут ортогональными
> (тоже могу доказать).
>
Боюсь, не все будет так просто. А ортогональность, как мне кажется, для
практики не большое ограничение, может даже полезное.

> Поэтому если дана грамматика типов, ортогональность альтернатив можно
> проверить вычислив попарное пересечение всех альтернатив всех типов — если
> оно пустое, то все типы ортогональны. Поскольку грамматика типов является
> контекстно-свободной, то проверка типа на пустоту делается известным
> алгоритмом для КС-грамматик.
>
> Вообще, я для начала рассматриваю ту же задачу, что и была в дипломе: для
> каждой функции заданы её входной и выходной тип, требуется проверить
> корректность. Ограничение «тип для каждой функции», наверное, можно
> ослабить до «типа для каждой нерекурсивной функции».
>
Не понял. Может вы имели в виду "для каждой рекурсивной"?

>
>
> *«…по моему опыту отладка в Рефале на >90% сводится к запускам тестов,
> натыканиям на „Отождествление невозможно“ и правкой ошибок, которые могли
> быть обнаружены на стадии компиляции хорошим типизатором вроде
> обсуждаемого.»*
>
> Статистику не вёл, но охотно верю.
>
>
>
> С уважением,
> Александр Коновалов
>
>
>
> *From:* Arkady Klimov arkady.klimov_AT_gmail.com [mailto:refal@botik.ru]
> *Sent:* Thursday, December 5, 2019 6:55 PM
> *To:* refal@botik.ru
> *Subject:* Re: Статическая типизация в Рефале
>
>
>
> Александр, спасибо, что реанимировали старую дискуссию.
>
> Считаю, эта тема по прежнему трепещет и требует внимания.
>
> Поэтому я даже перенес тексты писем моего и Михаила в docx-файлы, которые
> прилагаю.
>
> Правил только форматирование, содержание сохранил вплоть до стилистики.
> Тему вынес в имена файлов. Теперь их легко напечатать и читать с бумаги.
>
> Из своих прежних воззрений я, пожалуй, отверг бы отказ от параметрического
> полиморфизма (ПП). Тогда я еще очень мало использовал функции высших
> порядков и

Re: Статическая типизация в Рефале

2019-12-05 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Александр, спасибо, что реанимировали старую дискуссию.
Считаю, эта тема по прежнему трепещет и требует внимания.
Поэтому я даже перенес тексты писем моего и Михаила в docx-файлы, которые
прилагаю.
Правил только форматирование, содержание сохранил вплоть до стилистики.
Тему вынес в имена файлов. Теперь их легко напечатать и читать с бумаги.
Из своих прежних воззрений я, пожалуй, отверг бы отказ от параметрического
полиморфизма (ПП). Тогда я еще очень мало использовал функции высших
порядков и не придавал им значения. Но без ПП какой-нибудь Map все
перечеркнет. Поэтому сейчас согласен с вами, что ПП нужен.
И пожалуй, действительно, лучше ввести итератор, а тогда можно и отказаться
от e-рекурсии на верхнем уровне типа.
Возможно, мое ограничение на непересечение образцов из правых частей при
игнорировании типовых атрибутов можно ослабить, чтобы допускались примеры
из диплома: например, таковое непересечение должно возникать после ряда
подстановок (раскрытий) типов в правых частях на некоторую конечную глубину.
Будет время, я хочу прошерстить свои коды на рефале-6, чтоб понять,
достаточно ли будет этого механизма.
Аппелируя к письмам Потанина и Абрамова, хочу вставить, что по моему опыту
отладка в Рефале на >90% сводится к запускам тестов, натыканиям на
"Отождествление невозможно" и правкой ошибок, которые могли быть обнаружены
на стадии компиляции хорошим типизатором вроде обсуждаемого.
Аркадий


ср, 4 дек. 2019 г. в 20:14, Александр Коновалов a.v.konovalov87_AT_mail.ru <
refal@botik.ru>:

> Добрый вечер всем!
>
> Предлагаю продолжить дискуссию 20-летней давности, а именно, обсудить
> статическую типизацию в Рефале. Тема уже поднималась в рассылке как минимум
> 2 раза.
>
> Первый раз Аркадий Климов предложил определять типы вариантом L-выражений
> (11 августа 1999):
>
> https://mazdaywik.github.io/direct-link/refal-botik-ru/refal/0005-utf8.html
>
> Рекомендую прочитать это письмо, прежде чем читать дальше. В нём Аркадий
> описал типизацию как теоретическую проблему, предложил приемлемое
> на практике решение и перечислил задачи, которые требуется решить при
> реализации типизации.
>
> Второй раз Михаил Ковтун предложил использовать древесные автоматы
> (19 августа 2001):
>
> https://mazdaywik.github.io/direct-link/refal-botik-ru/refal/0222-utf8.html
> https://mazdaywik.github.io/direct-link/refal-botik-ru/refal/0223-utf8.html
> https://mazdaywik.github.io/direct-link/refal-botik-ru/refal/0224-utf8.html
> https://mazdaywik.github.io/direct-link/refal-botik-ru/refal/0225-utf8.html
>
> Здесь в первом письме Михаил описывает свой подход в типизации, во втором
> Аркадий комментирует его соображения, в третьем и четвёртом Михаил Потанин
> и Сергей Абрамов дают непринципиальные уточнения. В общем, из этой
> переписки достаточно внимательно прочитать только первые два.
>
> (Эти письма конвертированы в UTF-8, поэтому должны открываться нормально.)
>
>
>
> Я сам как-то пытался реализовать прототип статической типизации — давал
> задачу на ВКР бакалавра (диплом). Но, поскольку эту тему взял
> студент-двоечник, ничего толкового не получилась. Остался проект с путанным
> кодом на Java, в src/main/resources/docs можно найти записку к диплому:
>
> https://github.com/bmstu-iu9/refal-type-verifier
>
> https://github.com/bmstu-iu9/refal-type-verifier/tree/master/src/main/resources/docs
>
> (записка довольно сумбурная)
>
> Мой подход был близок к подходу Аркадия с тем отличием, что рекурсия для 
> e-переменных
> на верхнем уровне запрещена, но допустим итератор (звёздочка) для одного
> терма.
>
> Система типов для Рефала, на мой взгляд, обязательно должна включать
> параметрический полиморфизм. Допустим, есть такая функция:
>
> Rev {
>   t.First e.Mid t.Last = t.Last  t.First;
>   t.One = t.One;
>   /* пусто */ = /* пусто */;
> }
>
> Вот какой у неё тип?
>
>  == t.x*
>
> для любого t.x. Т.е. если функция вызывается со строкой символов — она
> должна возвращать строку. Если последовательность скобочных термов
> с какой-то хитрой структурой — на выходе должны быть они же.
>
> Подход Аркадия, как мне кажется, проще расширить на обобщённые типы,
> нежели подход Михаила. Потому что в случае древесных автоматов нужно
> научиться решать регулярные неравенства, а как их решать, тем более
> эффективно — понятия не имею.
>
>
>
> С уважением,
> Александр Коновалов
>


-- 
___
*С уважением, *
*Аркадий Климов,*
*с.н.с. ИППМ РАН,*
*+7(499)135-32-95*
*+7(916)072-81-48*


О типизации рефальских выражений.docx
Description: MS-Word 2007 document


Refal Weak Typing.docx
Description: MS-Word 2007 document


Re: Нужна ли "Ленинская простота" в Рефале?

2019-12-02 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
О, спасибо! Получилось!

пн, 2 дек. 2019 г. в 21:07, Александр Коновалов a.v.konovalov87_AT_mail.ru <
refal@botik.ru>:

> Добрый вечер, Аркадий!
>
> Его можно читать. Открываете ссылку в Internet Explorer, щёлкаете правой
> кнопкой мыши, «Кодировка» → «Дополнительно» → «Кириллица (KOI8-R)».
>
> В браузерах Edge и Edge Dev (новый на движке Chromium) меню выбора
> кодировки я не нашёл. Других браузеров у меня на компьютере не установлено,
> подсказать настройки кодировки не смогу.
>
>
>
> С уважением,
> Александр Коновалов
>
>
>
> *From:* Arkady Klimov arkady.klimov_AT_gmail.com [mailto:refal@botik.ru]
> *Sent:* Monday, December 2, 2019 8:52 PM
> *To:* refal@botik.ru
> *Subject:* Re: Нужна ли "Ленинская простота" в Рефале?
>
>
>
>
>
> вс, 1 дек. 2019 г. в 21:18, Александр Коновалов a.v.konovalov87_AT_mail.ru
> :
>
>
> Статическая типизация Рефала обсуждалась в этой рассылке в незапамятные
> времена (KOI8-R):
>
> https://mazdaywik.github.io/direct-link/refal-botik-ru/refal/0005.html
> https://mazdaywik.github.io/direct-link/refal-botik-ru/refal/0007.html
> https://mazdaywik.github.io/direct-link/refal-botik-ru/refal/0222.html
>
> Я давно уже хотел найти это свое письмо (первое - 0005). Есть ли
> возможность его читать?
>
> Если у кого получилось, поделитесь опытом плз.
>
> Аркадий
>


-- 
___
*С уважением, *
*Аркадий Климов,*
*с.н.с. ИППМ РАН,*
*+7(499)135-32-95*
*+7(916)072-81-48*


Re: Нужна ли "Ленинская простота" в Рефале?

2019-12-02 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
вс, 1 дек. 2019 г. в 21:18, Александр Коновалов a.v.konovalov87_AT_mail.ru <
refal@botik.ru>:

>
> Статическая типизация Рефала обсуждалась в этой рассылке в незапамятные
> времена (KOI8-R):
>
> https://mazdaywik.github.io/direct-link/refal-botik-ru/refal/0005.html
> https://mazdaywik.github.io/direct-link/refal-botik-ru/refal/0007.html
> https://mazdaywik.github.io/direct-link/refal-botik-ru/refal/0222.html
>
> Я давно уже хотел найти это свое письмо (первое - 0005). Есть ли
возможность его читать?
Если у кого получилось, поделитесь опытом плз.
Аркадий


Re: Нужны ли вещественные числа в Рефале?

2019-11-28 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Александр, как же так, вы же писали что в синтаксисе вещественных констант
нет, как же это вы скомпилировали, и выполнили?
У меня это тоже не компилируется, точнее неправильно компилируется.
Но в самом рефале вещественные числа есть. Вопрос в том, как получить
первое число. Если вещественное сложить с целым, будет уже вещественное. Но
целое с целым всегда целое. Там есть разные функции типа SIN, LOG - можно
через них получить вещ из цел. МОжно даже считать из файла через READ или
DECODE. Типа все есть, кроме возможности писать в самом языке константы.
Это недоделка.
Кстати, я сам тестирую функции в интерактивном режиме. Он вызывается через
батник rfi.bat.
Или командой ri i+*ask .
Потом вводим (после приглашения #>):
#>mul 3 0.5
1.50e+000
#> mul 0 -1.0
-0.00e+000
#> compare 0.0 
'='
#>compare 1 0.0
'<'
 Без угловых скобок строчными (если надо все заглавные) можно (нужно)
писать только самый внешний вызов. Остальные - как в файле *.ref
Как видите, при сравнении целого и вещественного целое всегда меньше. А как
надо?
Аркадий


чт, 28 нояб. 2019 г. в 14:11, Александр Коновалов a.v.konovalov87_AT_mail.ru
:

> Аркадий!
>
> В дистрибутиве Refal-Java лежит обычный Рефал-6 более свежей версии
> с вещественными числами. И у меня для Вас фокус.
>
> Рассмотрим такую волшебную функцию:
>
> Magic {
>   s.X s.Y
> ,  : '='
> , {
> s.X : s.Y = ;
> s.X :# s.Y = ;
>   };
>
>   s.X s.Y = ;
> };
>
> Функция сравнивает два символа при помощи COMPARE. Если они с точки
> зрения COMPARE не равны, печатается Ok2.
>
> А вот если COMPARE вернула '=', то символы сравниваются при помощи
> рефальского отождествления. Логично было бы ожидать, что функция COMPARE 
> возвращает
> '=' только для синтаксически отождествимых между собой символов (хотя
> документация об этом благоразумно ничего не говорит).
>
> Но можно построить символы, которые не равны с точки зрения
> отождествления, но при этом считаются равными COMPARE:
>
> $ENTRY GO {
>   =  >
> };
>
> Умножение нуля на положительное число даёт вещественное значение +0,
> умножение на отрицательное — −0 (минус ноль). Битовые представления у этих
> чисел различны, но вещественное сравнение их считает равными (согласно
> стандарту IEEE на вещественные числа).
>
> Функция COMPARE считает +0 и −0 равными значениями, но рефальское
> отождествление их различает. Выводятся на экран они, кстати, одинаково.
>
> Можно предположить, что рефальское отождествление с повторной переменной
> сравнивает битовое представление чисел, из-за чего ноль не всегда равен
> нулю. Но простая замена битового сравнения на вещественное приведёт
> к другому фокусу, нарушающему более глубокие семантические инварианты.
>
>
>
> С уважением,
> Александр Коновалов
>
>
>
> *From**:* Александр Коновалов a.v.konovalov87_AT_mail.ru 
> *Sent**:* Thursday, November 28, 2019 1:25 PM
> *To**:* refal@botik.ru
> *Subject:* RE: Нужны ли вещественные числа в Рефале?
>
>
>
> Добрый день, Аркадий!
>
> Хотел посмотреть, как работают вещественные числа в Рефале-6. Скачал
> дистрибутив с сайта refal.ru, распаковал, поправил путь в ri.bat. Написал
> такую программу (zero.ref):
>
> $ENTRY GO {
>   = >;
> };
>
> Компилирую и запускаю — падает:
>
> D:\…\Refal6>rfc zero.ref
>
> D:\…\Refal6>ri i+c+*go zero.ref -W0 -B25000
> Refal-6 Compiler. Copyright (C) 1993 by Ark. Klimov
> zero.ref:
> Parsing time = 0.00 seconds
> No syntax errors
> Compilation time = 0.00 seconds
>
> D:\…\Refal6>ri i+zero.rex+*go
> EVAL: *** Unexpected FAIL
> EVAL: Act Vf Fre Run [n]Step [n]Trc Evl Chg Kil New Inf M W D H cLr Quit>a
> AT: <*DIV 1 "." 0 1 "." 0>
> EVAL: Act Vf Fre Run [n]Step [n]Trc Evl Chg Kil New Inf M W D H cLr Quit>q
> Exit? (Y/N/P)>y
>
> Такое чувство, что синтаксис вещественных чисел не поддерживается. Число
> +1.0 компилятор проинтерпретировал как целое +1, слово "." и целое 0.
>
>
>
> В документации написано (
> http://refal.ru/~arklimov/refal6/M5-Lib.htm#Arithm):
>
> *«Функции этой группы оперируют с целыми или вещественными числами. Если
> оба аргумента целые, то результат — целый, в противном случае —
> вещественный.»*
>
> Видоизменил программу: делю 1 на 2:
>
> $ENTRY GO {
>   = >;
> };
>
> Выводит целый 0.
>
> Похоже, что в версии, опубликованной на сайте refal.ru, вещественные
> числа не поддерживаются. А RI32.EXE я запустить не смог — у меня
> 64-разрядная Windows и она не поддерживает DOS-овские исполнимые файлы.
>
> Возможно, они есть в Refal-Java, но мне пока лень разбираться с её
> установкой и конфигурированием.
>
>
>
> С уважением,
> Александр Коновалов
>
>
>
> *From:* Arkady Klimov arkady.klimov_AT_gmail.com 
> *Sent:* Thursday, November 28, 2019 7:35 AM
> *To:* refal@botik.ru
> *S**ubject:* Re: Нужны ли вещественные числа в Рефале?
>
>
>
> Как инструмент изготовления картинок SVG наверно вариант, но там была
> нужна интерактивность, были также средства принимать сигналы от мышки, а
> это можно делать только через экран.
>
> Зачем это "нужно было мне"? Просто чтобы на рефале писать интерактив

Re: Нужны ли вещественные числа в Рефале?

2019-11-27 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Как инструмент изготовления картинок SVG наверно вариант, но там была нужна
интерактивность, были также средства принимать сигналы от мышки, а это
можно делать только через экран.
Зачем это "нужно было мне"? Просто чтобы на рефале писать интерактивное
приложение с богатым графическим UI, включающем создание векторных картинок.


чт, 28 ноя 2019 г., 0:45 Boyko Bantchev boykobb_AT_gmail.com :

> > Это было давно, во времена MS-DOS’а.
>
> Да, но я о ведь о сейчас говорю – как возможный способ реанимировать
> рисование в Рефале-6 (или ввести в любой Рефал).
>
> > Слишком оптимистичное мнение о SVG. Если график содержит миллиард точек,
> > то SVG (равно как и PostScript) получится необычайно толстым, в браузере
> > будет открываться годами... А вот растровая графика (например, PNG) --
> > ей все равно, миллиард точек на графике или сто миллиардов (я имею в
> > виду размер файла и время загрузки его; создание PNG со ста миллиардами
> > точек, конечно же, в сто раз дольше, чем с миллиардом точек).
>
> Вы говорите о растровой графике, а я – о рисовании линий и фигур, о
> котором написал Аркадий Климов.  Рисование линий и фигур я связываю с
> векторной графикой и никак не с «миллиардом точек».  Впрочем, глубокие
> проблемы с обработкой миллиарда точек, как мне кажется, возникли бы
> и без всякой графики, будь то и растровой.
>


Re: Нужны ли вещественные числа в Рефале?

2019-11-27 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
 А я не понимаю, почему для совместимости с Р5 нужно было вводить в Р5λ
целые числа в том же уродливом формате, как в Р5. Вот например в Р6 целое
это всегда символ, но это не мешает для выполнения под Р6 программ на Р5
сделать переопределение нужных функций. В Р6 я так сделал все
переопределения в отдельном модуле совместимости. Главное, чтоб можно было
переопределять под старым именем, сохраняя доступ к родным функциям внутри
таких определений. В итоге для Р5 у меня положительное число это всегда s,
а отрицательное '-' s. Только программа на Р5 не вправе опираться на размер
макроцифры.
А вещ числа мне были нужны для рисования - базовая графика: линии, фигуры
... Но это работало под домом, а сейчас под виндой не работает, увы. Эх,
восстановить бы.
Аркадий

ср, 27 ноя 2019 г., 20:33 Александр Коновалов a.v.konovalov87_AT_mail.ru <
refal@botik.ru>:

> Здесь речь о том, что, если бы они были в Рефале-5, то мне бы их
> _пришлось_ добавить и в Рефал-5λ. Даже если они мне не нужны сами по себе.
> В частности, мне пришлось добавить длинную арифметику по этой причине. И
> для совместимости с актуальной реализацией и учебником Турчина, длинная
> арифметика добавлена в виде макроцифр по основанию 2³².
> Александр Коновалов
>
> -Original Message-
> From: Boyko Bantchev boykobb_AT_gmail.com [mailto:refal@botik.ru]
> Sent: Wednesday, November 27, 2019 8:10 PM
> To: refal@botik.ru
> Subject: Re: Нужны ли вещественные числа в Рефале?
>
> > У меня (Рефал-5λ) их нет, поскольку (а) мне они не требовались, (б) их
> нет в Рефале-5, с которым должен быть совместим Рефал-. Добавлять или не
> добавлять — я думаю. Поэтому и спросил.
>
> А какого рода несовместимость появилась бы, если бы у Рефала-5λ были
> вещественные числа?  Т.е.,  программы на Рефале-5 имели бы ошибочное (с
> точки зрения Рефала-5) истолкование в Рефале-5λ?
>


Re: Список всех простых чисел

2019-10-10 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
чт, 10 окт. 2019 г. в 18:32, Sergei M. Abramov abram_AT_botik.ru <
refal@botik.ru>:

> День добрый, всем!
>
> > То есть для последнего "поколения" эта работа лишняя.
>
> А что такое последнее поколение, если я строю список всех простых
> чисел?
>
> Да, всех, но не сразу ведь.
Сначала весь начальный список [2..] фильтруется на   ((== 1).(gcd pp)) для
pp = 2,
потом полученный список снова фильтруется для pp=3*5,
потом для 7*11*13*17*19*23,
потом для 29*31*...
Мог ошибиться в границах, но смысл должен быть понятен: каждая следующая
граница (lim) получается из предыдущей примерно возведением в квадрат,
так ведь?
Поколение - то, что выходит после очередной фильтрации как кусок списка
простых и служит сомножителями в следующем pp.
Меня интересует сколько (какую долю) отсеивает каждая следующая фильтрация.
Понятно, что сначала это 1/2, далее 1-(2/3)*(4/5), далее
1-(6/7)*(10/11)*...*(22/23) и т.д. Произведение - это доля остающихся.
Просто хотел бы увидеть десятичные числа, как они меняются, наверно,
убывают к 0. Насколько быстро?
А самому кодить недосуг :)

> > Наверно, лучше накапливать в виде списка, а при подаче на Filter
> > для следующего шага все перемножить.
>
> > Интересно, для Хаскела это тоже актуально, или там умножение pp*n
> ленивое?
>
> Ленивое, несомненно.
>
Неужели? Значит на Хаскеле будет автоматически накапливаться в форме терма
7*11*13*..., да?

>
> > А еще хотелось бы посмотреть статистику по числу (доле) отсеянных
> > (прошедших) через каждый из фильтров (это мне уже как математику
> > интересно).
>
> Алик, а мне интересно от математиков (может знакомые есть?) узнать,
> есть ли хоть какие-то работы (а если есть, то какие) в этой отрасли,
> где используется (\ k -> (gcd pp k) == 1)?
>
> Не знаю, и спросить кого тоже пока не приходит в голову.


> > Нужно спасать рассылку от офтопа.
>
> Спамера забанить!
>
> > Понятно, что вызов  > e.ns> на Рефале будет выполняться медленно.
>
> Вот, хочу сказать, что меня удивило:
>
>  ns' = filter (\ k ->  (gcd pp k) == 1) ns
>
> работает немного медленнее, чем
>
>  ns' = filter ((== 1).(gcd pp)) ns
>
> Вот нифига ж себе?
>
Да, забавно.

>
> Всего доброго,
>
> Сергей Абрамов
>
>
-- 
___
*С уважением, *
*Аркадий Климов,*
*с.н.с. ИППМ РАН,*
*+7(499)135-32-95*
*+7(916)072-81-48*


Re: Список всех простых чисел

2019-10-10 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Александр, а можно попросить вас пропустить вариант для 176100 вместо 4
- тогда результаты (времена) будут сопоставимы.
Я подумал еще об одной оптимизации. Сейчас произведение простых формируется
сразу, а ведь оно может и не понадобиться.
То есть для последнего "поколения" эта работа лишняя.
Наверно, лучше накапливать в виде списка, а при подаче на Filter для
следующего шага все перемножить.
Интересно, для Хаскела это тоже актуально, или там умножение pp*n ленивое?
А еще хотелось бы посмотреть статистику по числу (доле) отсеянных
(прошедших) через каждый из фильтров (это мне уже как математику интересно).
И соответствующие значения lim.
Я так понимаю, что количество поколений здесь 4-5, да?
Аркадий

ср, 9 окт. 2019 г. в 13:13, Александр Коновалов a.v.konovalov87_AT_mail.ru <
refal@botik.ru>:

> Добрый день всем!
>
> Нужно спасать рассылку от офтопа.
>
> Переписал исходник Сергея Михайловича на Рефал-5. Функции primesE,
> primesAD и primesA переписаны максимально близко к тексту, ради этого
> пришлось ввести функции filter, o (композиция функций), bind-right (чтобы
> связать Mod со вторым аргументом), eq и neq.
>
> Рефал не поддерживает ленивые вычисления и бесконечные списки, поэтому все
> функции на входе принимают последовательность чисел от 2 до 40 000.
>
> Понятно, что вызов 
> на Рефале будет выполняться медленно. Поэтому я также написал
> оптимизированные версии primesE-opt и primesA-opt, в которых фильтрация
> выполняется не функцией высшего порядка, а специально написанной функцией.
> Функция primesE в этом случае ускорилась на порядок, primesA —
> незначительно.
>
> Замеры времени есть в исходнике. Масштаб величин примерно такой же:
> primesE на порядок медленнее primesAD, primesAD на порядок медленнее
> primesA. Функции primesE-opt и primesAD требуют одинакового времени
> работы, но первая делает гораздо больше шагов. Причина этого расхождения,
> по-видимому, в длинной арифметике, в вычислении gcd(pp, n), поскольку pp —
> длинное число.
>
>
>
> С уважением,
> Александр Коновалов
>
>
>
> -Original Message-
> From: Sergei M. Abramov abram_AT_botik.ru 
> Sent: Tuesday, October 8, 2019 10:29 PM
> To: refal@botik.ru
> Subject: Список всех простых чисел
>
>
>
> День добрый, всем!
>
>
>
> Простите, что не про Рефал.  Просто не могу вспомнить то, что (как мне
> помнится) случилось в обстановке рефал-компании на заре моей
> профессиональной деятельности (практика в НИЦЭВТе или работа в нем).
>
>
>
> По каким-то причинам я задумался тогда над построением списка всех простых
> чисел.  И в некий момент сам придумал алгоритм, которрый опирался вот на
> какое определение последовательности простых чисел:
>
>
>
> 1.  Очередное натуральное число n будет простым, если оно взаимнопросто со
> всеми ранее найдеными простыми числами.
>
>
>
> или (что то же самое, но уже совсем близко к коду)
>
>
>
> 2.  Очередное натуральное число n -- простое, если gcd(pp,n)==1, где pp --
> произведение всех ранее найденых простых чисел.
>
>
>
> Понятно, что нужна сверхдлинная целочисленная арифметика.  Но,
>
> gcd(pp,n) обещал посчитаться быстрее, чем деление n по очереди на все
> сомножители из pp.
>
>
>
> Я этот алгоритм (точнее подход, поскольку сам алгоритм похитрее, о нем в
> конце) придумал сам и очень этим гордился.  Но потом в рефал-компании
> кто-то мне дал книжку.  Серегей Романенко?  Андрей или Алик Климов?  Колля
> Кондратьев?  -- не помню.
>
>
>
> Книжка была кого-то из великих...  Дейскстра?  Вирт?  И, почему-то, мне
> кажется, что называлась она "Записки из башни слоновой кости".  А в книжке,
> как мне сегодня кажется, были программистсткие побасенки.
>
>
>
> Ну, и был коротенький шутливый этюд (близко к тексту):
>
>
>
>   Цитата по памяти ===
> Для эффективной генерации всех простых чисел мнe достаточно всего двух
> ячеек памяти:
>
>
>
> integer pp, n;
>
> n  := 2;
>
> pp := 1;
>
> while ( True ) do begin
>
>if ( gcd(pp, n)=1 ) then begin
>
>   println(n);
>
>   pp := pp * n;
>
>end;
>
>n := n + 1;
>
> end;
>
> ==
>
>
>
> С тех пор я узнал, что хотя я и самостоятельно нашел такой подход к
> генерации простых, но я был не единственным (и, скорее всего, не
>
> первым)
>
>
>
> ПРОСЬБА О ПОМОЩИ:
>
>
>
> 1.  Коллеги, если кто-то может мне дать имя автора, название книги,
> которая мне помнится, то я буду благодарен.
>
>
>
> 2.  И если есть еще какие-либо ссылки на такой подход к проверке простоты
> -- gcd(pp, n)=1,-- то тоже полезно.
>
>
>
> Почему вспомнил?  Вспомнил я про эту историю во время очередной своей
> лекции по Хаскеллю в ЯрГУ.  Ну, и сегодня написал немного строк на Хаскелле
> -- приложены.  Взгляните, для интереса.
>
>
>
> primesAD -- это генератор, прямо в лоб переписан приведенный выше
> паскале-подобный текст.
>
>
>
> А теперь поговорим про решето.  Решето вообще (не обязательно
>
> Эратосфена) -- это когда берем начальное пространство поиска -- например,
> [2..].  И 

Re: Сравнение веток Рефала

2019-03-07 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Спасибо, Александр,
Вы совершенно точно описали проблему, связанную с моим вопросом к авторам
реализации Р+.
Да, вопрос в том, как будут работать "дырки" вокруг образа, если выражение
"дышит": не только наращивается, но и сокращается иногда, а потом снова
наращивается по-новому.
Тут поведение сильно должно зависеть от того, как устроен механизм учета
ссылок и "дырок".
Похоже, в реальности создаются новые и новые копии.
И поэтому хочется узнать у авторов (Антона, Юры, ...), как на деле устроен
этот механизм, когда он спасает (от копирований), а когда нет, и возможно
ли (хотя бы в принципе) как-то улучшить ситуацию для данного примера.
С уважением,
Аркадий


пн, 4 мар. 2019 г. в 18:45, Александр Коновалов a.v.konovalov87_AT_mail.ru <
refal@botik.ru>:

> Аркадий задал интересный вопрос:
>
> *«Хотелось бы понять, что там на самом деле происходит (с „дырками“
> слева-справа) и что мешает. И возможно ли это преодолеть в автоматическом
> режиме.»*
>
> Учитывает ли реализация Рефала Плюс количество ссылок на вектор? Потому
> что понятие «дырки» сильно зависит от владения вектором. Допустим, у нас
> есть такая функция:
>
> F {
>   s.1 e.Middle s.2 = ;
> }
>
> G {
>   e.X = '[' e.X ']';
> }
>
> $ENTRY Go1 {
>   = 'Hello' :: e.X = > ;
> }
>
> $ENTRY Go2 {
>   = >;
> }
>
> Функция F в обоих случаях отрезает от слова Hello буквы H и o, серединку
> ell передаёт в G, которая вокруг неё приписывает скобки, получается [ell].
> Но в функции Go1 обязательно нужно создавать копию строки, а в функции Go2
> копирования можно избежать.
>
> Функция Go2 передаёт F единственный экземпляр Hello, и когда та отрезает
> первый и последний символ, они становятся «дырками» — никто другой их
> не использует. А значит, G может в них записать квадратные скобки.
> В функции Go1 один и тот же массив разделяется между вызовом F и Prout,
> поэтому перезаписать первый и последний элементы квадратными скобками в G
> нельзя.
>
> Такие случаи Рефал Плюс учитывает? Потому что для того же примера
> с задачей Вирта в цикле то приписывается, то отрезается первый символ,
> но при этом у вектора всегда один владелец. А значит, при конкатенации его
> можно перезаписывать, а не создавать новый.
>
>
>
> С уважением,
> Александр Коновалов
>
>
>
> *From:* Arkady Klimov arkady.klimov_AT_gmail.com 
> *Sent:* Sunday, March 3, 2019 10:36 PM
> *To:* refal@botik.ru
> *Subject:* Re: Сравнение веток Рефала
>
>
>
> Все это верно, но это же не имеет отношения к примеру о цепочках из
> учебника по Р+. Рекурсия там - не хвостовая. И как писал Юра (26.02):
>
> <<<
>
> Пример с двумя iter из документации в приложении. Требует heap'а чуть
> поменьше (1ГБ против 2ГБ). Считает 10.5 секунд.
>
> >>>
>
> Значит, все-таки требует ГБ heap-a. А для чего? Не для стека ли? Не
> буквально на стек, конечно, но на значения переменной e.String, "ссылаемые"
> из стека. Так? Но эти выражения ведь просто растут в одну сторону вместе со
> стеком. А почему же тогда здесь не получается их создавать на одном общем
> массиве "с открытым концом"? В варианте EX2 ровно это фактически и
> происходит. Значит, в принципе возможно. А почему не получается "само"?
>
> Хотелось бы понять, что там на самом деле происходит (с "дырками"
> слева-справа) и что мешает. И возможно ли это преодолеть в автоматическом
> режиме.
>
> Аркадий
>
>
>
> сб, 2 мар. 2019 г. в 09:39, Anton Orlov orlovan_AT_gmail.com <
> refal@botik.ru>:
>
> On Fri, Mar 1, 2019 at 4:08 AM Sergei M. Abramov abram_AT_botik.ru <
> refal@botik.ru> wrote:
>
> День добрый, Антон, Юра!
>
> Я там как-то невнимательно следил.
>
> 1.  Р+ с $iter должен быт лучше (не хуже) чем рекурсия.  Но не сильно
> (хвостовая рекурсия мало уступает $iter).
>
>
>
> $iter не хуже, чем хвостовая рекурсия. Но, конечно, может быть хуже, если
> пытаться выразить не хвостовую рекурсию и эмулировать стек на
> рефал-выражениях, например.
>
>
>
> Вообще, на мой взгляд, $iter оправдан по двум причинам:
>
> 1) Ситуации, когда рекурсия по сути хвостовая, но не является таковой
> из-за смежных конкатенаций: (e1 )
>
> 2) Отсутствие вложенных функций/замыканий. Выносить каждый простой
> внутренний цикл во внешнюю функцию (передавая туда все нужные локальные
> переменные) -- слишком тяжеловесно.
>
>
>
> 2.  Р+ с рекурсией не должен жрать стек (точнее, жрать и освобождать
> сразу, так как хвостовая).
>
> Так и есть?  А если не так, то поясните, плз.
>
>
>
> Так и есть.
>
>
>
> Антон
>
>
>
>
> Всего доброго,
>
> Сергей Абрамов
>
>


Re: Векторно-списковое представление Скоробогатова

2019-03-05 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Идея интересная (сужу пока только по аннотации-письму), жаль, что так и не
опубликовали - это нужно ведь не только для автора. Можно представить
разные направления развития, а сослаться-то и не на что. А я так и не
понял, оно было реализована в рефале-7 (помимо курсовой Медведевой)?
Аркадий

пн, 4 мар. 2019 г. в 21:07, Александр Коновалов a.v.konovalov87_AT_mail.ru <
refal@botik.ru>:

> Добрый вечер всем!
>
> 10 лет назад Сергей Скоробогатов (для тех, кто не знает: я работаю у него
> на кафедре) придумал векторно-списковое представление данных для Рефала —
> разновидность массивного представления с отложенной конкатенацией. И скинул
> мне черновик своей статьи. Рукопись распространять его в открытом доступе
> запретил, поскольку сам планировал эту статью опубликовать. Ну, я с тех пор
> черновик честно прятал все эти годы от рефал-общественности. Но недавно
> переспросил и Сергей разрешил мне его опубликовать в рассылке с припиской
> «предложенный ассемблер себя не оправдал». Собственно, публикую.
>
> Вот сам черновик статьи:
>
>
> https://mazdaywik.github.io/direct-link/Data%20Representation%20and%20Assembly%20Language.pdf
>
> Дисклеймер от Скоробогатова: *предложенный ассемблер себя не оправдал.*
> Чем не оправдал, я у Скоробогатова не уточнял. Может, он сам напишет
> в рассылку.
>
> Представление данных разрабатывалось специально для Рефала-7, поэтому
> напомню ссылку на статью про Рефал-7:
>
> https://mazdaywik.github.io/direct-link/refal.pdf (ранее эта статья была
> у нас на сайте кафедры, но несколько лет назад сайт переделали и статья
> потерялась)
>
>
>
> О чём это представление? Вот функция, которая заменяет все буквы 'a' на 'b
> ':
>
> Fab {
>   e.X 'a' e.Y = e.X 'b' ;
>   e.X = e.X;
> }
>
> В Рефале со списковым представлением она выполняется за линейное время
> и рекурсивный вызов в правой части является хвостовым. На Рефале
> с массивным представлением она потребует уже квадратичной сложности. Хотя
> манипуляции с дырками можно получить амортизированную линейную сложность,
> но в общем случае это не гарантируется.
>
> В векторно-списковом представлении функции принимают в качестве аргумента
> вектор (допускаются многоместные функции, как в Рефале Плюс), но возвращают
> они список! Список кусков вектора. Этот список конкатенируется в вектор
> перед первой же операцией сопоставления. Таким образом, функции вроде Fab 
> будут
> выполняться с *гарантированно* линейной сложностью (и рекурсия тоже будет
> хвостовой). Пример:
>
> $ENTRY Go {
>   = >;
> }
>
> Поле зрения будет развиваться следующим образом, куски массивов обозначены
> квадратными скобками:
>
> >
> >
> >
> 
>
> Тут, непосредственно перед вызовом Prout, происходит конкатенация списка
> из пяти кусков в один сплошной массив:
>
> 
>
> Функция Prout выполняется и печатает сообщение.
>
> Хотя, если прочитаете статью, там у Скоробогатова всё хитрее. И вместо
> скобок конкретизации особые k-термы, и поле зрения представляет собой
> сеть конкретизаций, и есть поддержка параллельных вычислений. В общем,
> много интересного придумано.
>
>
>
> Когда-то давно (тоже около 10 лет назад) я опробовал это представление —
> на курсовом проекте студентка Александра Медведева написала реализацию
> Простого Рефала, использующую векторно-списковое представление данных.
> И оно оказалось быстрее спискового при достаточно большом начальном объёме
> кучи (что минимизировало сборку мусора). Реализовано представление было
> не в полном объёме статьи — было обычное списковое поле зрения, элементами
> списка были вектора, аргументы функций конкатенировались на каждом шаге
> непосредственно перед вызовом. Никаких дырок не предусматривалось.
>
>
>
> С уважением,
> Александр Коновалов
>
>
>


-- 
___
*С уважением, *
*Аркадий Климов,*
*с.н.с. ИППМ РАН,*
*+7(499)135-32-95*
*+7(916)072-81-48*


Re: Сравнение веток Рефала

2019-03-03 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Все это верно, но это же не имеет отношения к примеру о цепочках из
учебника по Р+. Рекурсия там - не хвостовая. И как писал Юра (26.02):
<<<
Пример с двумя iter из документации в приложении. Требует heap'а чуть
поменьше (1ГБ против 2ГБ). Считает 10.5 секунд.
>>>
Значит, все-таки требует ГБ heap-a. А для чего? Не для стека ли? Не
буквально на стек, конечно, но на значения переменной e.String, "ссылаемые"
из стека. Так? Но эти выражения ведь просто растут в одну сторону вместе со
стеком. А почему же тогда здесь не получается их создавать на одном общем
массиве "с открытым концом"? В варианте EX2 ровно это фактически и
происходит. Значит, в принципе возможно. А почему не получается "само"?
Хотелось бы понять, что там на самом деле происходит (с "дырками"
слева-справа) и что мешает. И возможно ли это преодолеть в автоматическом
режиме.
Аркадий

сб, 2 мар. 2019 г. в 09:39, Anton Orlov orlovan_AT_gmail.com :

> On Fri, Mar 1, 2019 at 4:08 AM Sergei M. Abramov abram_AT_botik.ru <
> refal@botik.ru> wrote:
>
>> День добрый, Антон, Юра!
>>
>> Я там как-то невнимательно следил.
>>
>> 1.  Р+ с $iter должен быт лучше (не хуже) чем рекурсия.  Но не сильно
>> (хвостовая рекурсия мало уступает $iter).
>>
>
> $iter не хуже, чем хвостовая рекурсия. Но, конечно, может быть хуже, если
> пытаться выразить не хвостовую рекурсию и эмулировать стек на
> рефал-выражениях, например.
>
> Вообще, на мой взгляд, $iter оправдан по двум причинам:
> 1) Ситуации, когда рекурсия по сути хвостовая, но не является таковой
> из-за смежных конкатенаций: (e1 )
> 2) Отсутствие вложенных функций/замыканий. Выносить каждый простой
> внутренний цикл во внешнюю функцию (передавая туда все нужные локальные
> переменные) -- слишком тяжеловесно.
>
>
>> 2.  Р+ с рекурсией не должен жрать стек (точнее, жрать и освобождать
>> сразу, так как хвостовая).
>>
>> Так и есть?  А если не так, то поясните, плз.
>>
>
> Так и есть.
>
> Антон
>
>
>>
>> Всего доброго,
>>
>> Сергей Абрамов
>>
>>

-- 
___
*С уважением, *
*Аркадий Климов,*
*с.н.с. ИППМ РАН,*
*+7(499)135-32-95*
*+7(916)072-81-48*


Re: Сравнение веток Рефала

2019-03-02 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Спасибо, Антон.
Я ожидал меньшего (ускорения). Но может это пока аргумент относительно мал
(1, да?).
Для 10 будет, думаю, слабее. Число вызовов растет, грубо говоря,
линейно, а время квадратично.
Аркадий

сб, 2 мар. 2019 г. в 09:26, Anton Orlov orlovan_AT_gmail.com :

>
>
> On Fri, Mar 1, 2019 at 8:57 AM Arkady Klimov arkady.klimov_AT_gmail.com <
> refal@botik.ru> wrote:
>
>> Чтобы понять, лучше ли iter чем рекурсия, я переделал последний вариант
>> EX1 (хотя рекурсия там тоже не настоящая, хвостовая) через $iter. Антон или
>> Юра, сможете пропустить? А то я пока не умею этого.
>> Правда, вряд ли заметно ускорится, поскольку основное время здесь,
>> по-видимому, уходит все-таки на образец vA vA e.
>>
>> // Result () indicates that such string does not exist
>>  // Iter variable sP : { T - expression eS is ok; F - eS must be rebuild;
>> U - unknown }
>>  $func EX2 s = e;
>>  EX2  sN, T sN /* empty */ $Iter { sP eS : {
>>   T e= U  'a' eS;
>>   U vA vA e  = F sN eS;
>>   U e= T sN eS;
>>   F sa es, 'abc' : e sa sb e = U sN sb es;
>>   F sc es= F  es;
>>   }} :: sP sN eS, sP sN eS : \{ T 0 e = eS; F s = (); };
>>
>> Чтобы выразить все через единый цикл, пришлось ввести три состояния sP,
>> которые характеризуют имеющуюся информацию о допустимости текущей строки:
>> T - допустима, U - неизвестно, F - недопустима или все продолжения
>> оказались недопустимыми.
>>
>
> Код правильный. Внешние фигурные скобки можно опустить.
> Этот вариант быстрее:
> MeanStd.Dev.Min Median  Max
> real0.415   0.006   0.406   0.415   0.429
>
> EX1 (хвостовая рекурсия):
> MeanStd.Dev.Min Median  Max
> real0.617   0.005   0.609   0.617   0.625
>
> Вызовы функций съедают всё же прилично.
>
> Антон
>
>
>> Конечно, нет уверенности, что написано правильно и без ошибок. Для
>> "отладки" я пропустил аналогичный вариант на р6, где вместо $iter
>> вспомогательная функция XX:
>>
>>   EX3 sN = ;
>>   XX {
>>  T  0 eS= eS;
>>  T sN eS   =  'a' eS>;
>>  U sN vA vA eS = ;
>>  U sN eS   = ;
>>  F sN sa es, 'abc' : e sa sb e = ;
>>  F sN sc es=  es>;
>>  F sN= ();
>>  };
>>
>> Он работает примерно как и EX1 раньше. 1 - 1 сек, 10 - 94 сек на
>> свежезагруженном интерпретаторе. По мере тасования памяти скорость падает
>> до 2 раз.
>>
>> Аркадий
>>
>>
>>
>>
>> пт, 1 мар. 2019 г. в 12:08, Sergei M. Abramov abram_AT_botik.ru <
>> refal@botik.ru>:
>>
>>> День добрый, Антон, Юра!
>>>
>>> Я там как-то невнимательно следил.
>>>
>>> 1.  Р+ с $iter должен быт лучше (не хуже) чем рекурсия.  Но не сильно
>>> (хвостовая рекурсия мало уступает $iter).
>>>
>>> 2.  Р+ с рекурсией не должен жрать стек (точнее, жрать и освобождать
>>> сразу, так как хвостовая).
>>>
>>> Так и есть?  А если не так, то поясните, плз.
>>>
>>> Всего доброго,
>>>
>>> Сергей Абрамов
>>>
>>>
>>
>> --
>> ___
>> *С уважением, *
>> *Аркадий Климов,*
>> *с.н.с. ИППМ РАН,*
>> *+7(499)135-32-95*
>> *+7(916)072-81-48*
>>
>

-- 
___
*С уважением, *
*Аркадий Климов,*
*с.н.с. ИППМ РАН,*
*+7(499)135-32-95*
*+7(916)072-81-48*


Re: Сравнение веток Рефала

2019-03-01 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Чтобы понять, лучше ли iter чем рекурсия, я переделал последний вариант EX1
(хотя рекурсия там тоже не настоящая, хвостовая) через $iter. Антон или
Юра, сможете пропустить? А то я пока не умею этого.
Правда, вряд ли заметно ускорится, поскольку основное время здесь,
по-видимому, уходит все-таки на образец vA vA e.

// Result () indicates that such string does not exist
 // Iter variable sP : { T - expression eS is ok; F - eS must be rebuild; U
- unknown }
 $func EX2 s = e;
 EX2  sN, T sN /* empty */ $Iter { sP eS : {
  T e= U  'a' eS;
  U vA vA e  = F sN eS;
  U e= T sN eS;
  F sa es, 'abc' : e sa sb e = U sN sb es;
  F sc es= F  es;
  }} :: sP sN eS, sP sN eS : \{ T 0 e = eS; F s = (); };

Чтобы выразить все через единый цикл, пришлось ввести три состояния sP,
которые характеризуют имеющуюся информацию о допустимости текущей строки:
T - допустима, U - неизвестно, F - недопустима или все продолжения
оказались недопустимыми.
Конечно, нет уверенности, что написано правильно и без ошибок. Для
"отладки" я пропустил аналогичный вариант на р6, где вместо $iter
вспомогательная функция XX:

  EX3 sN = ;
  XX {
 T  0 eS= eS;
 T sN eS   =  'a' eS>;
 U sN vA vA eS = ;
 U sN eS   = ;
 F sN sa es, 'abc' : e sa sb e = ;
 F sN sc es=  es>;
 F sN= ();
 };

Он работает примерно как и EX1 раньше. 1 - 1 сек, 10 - 94 сек на
свежезагруженном интерпретаторе. По мере тасования памяти скорость падает
до 2 раз.

Аркадий




пт, 1 мар. 2019 г. в 12:08, Sergei M. Abramov abram_AT_botik.ru <
refal@botik.ru>:

> День добрый, Антон, Юра!
>
> Я там как-то невнимательно следил.
>
> 1.  Р+ с $iter должен быт лучше (не хуже) чем рекурсия.  Но не сильно
> (хвостовая рекурсия мало уступает $iter).
>
> 2.  Р+ с рекурсией не должен жрать стек (точнее, жрать и освобождать
> сразу, так как хвостовая).
>
> Так и есть?  А если не так, то поясните, плз.
>
> Всего доброго,
>
> Сергей Абрамов
>
>

-- 
___
*С уважением, *
*Аркадий Климов,*
*с.н.с. ИППМ РАН,*
*+7(499)135-32-95*
*+7(916)072-81-48*


Re: Сравнение веток Рефала

2019-03-01 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
пт, 1 мар. 2019 г. в 00:49, Anton Orlov orlovan_AT_gmail.com :

>
> А за счёт чего получается экономия при выносе первых термов?
> Что переставляется при движении по выражению один указатель (на терм), а
> не два (на конец левого подвыражения и на начало правого)? Я не думаю, что
> здесь можно существенно выиграть.
>

Я писал про " подготовку цикла сравнения ". Может в Р+ она минимальна,
тогда ок. Просто в интерпретирующем (на языке сборки) рефале такие
оптимизации как использование операторов "удлинения до (старого) символа"
обычно давали заметный эффект.

>
>
>>
>>


Re: Сравнение веток Рефала

2019-02-28 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Да, 1.5%, не густо. В принципе, конечно, пусть дальше думает С++.
Но текущий вряд ли догадается чего-то вытащить из функции.
А в Р6 v-переменные еще на входе заменяются на t e, поэтому первые термы
отдельно сравниваются.
И поэтому накладные на подготовку цикла сравнения (vA vA e) уже не столь
значимы.
Правда, обратный образец (e vA vA) будет смертоубийством: удлинений справа
нет.
А у вас, наверно, равноценно, да?
Аркадий

чт, 28 февр. 2019 г. в 19:00, Anton Orlov orlovan_AT_gmail.com <
refal@botik.ru>:

> On Thu, Feb 28, 2019 at 10:03 AM Arkady Klimov arkady.klimov_AT_gmail.com
>  wrote:
>
>> Мда, как я понял, код для eR : vA vA e далек от оптимальности.
>> На каждое очередное удлинение первой vA:
>> 1. Проверяем, что не дошли до конца eR.
>> 2. Вычисляем длину vA (len6) и длину дополнения vA до eR (len5).
>> 3. Проверяем, что не (len5 < len6) -- этим обеспечивается удлинение до
>> половины
>> 4. Вычисляем разницу len5-len6 (это будет длина остатка e)
>> 5. Вызываем сравнение vA и ее дополнения до eR -- тут я не понял, надо
>> чтобы eV было не *равно *дополнению, а было *началом *дополнения, а где
>> это сказано?
>>
>
> Expr1.eq(Expr2, offset) проверяет, что Expr1 является подвыражением Expr2,
> начиная с offset.
>
>
>> В общем, довольно много всего. Поэтому не удивительно, что только
>> чуть-чуть обгоняет рефал-6, в котором удлинение происходит всегда до конца
>> eR  (даже без оптимизации удлинения до старого символа).
>> А надо бы: вне цикла разделить длину eR пополам, перед вызовом функции
>> сравнения цепочек быстро сравнить первые термы и не вычислять прежде
>> времени длину остатка e.
>>
>
> Действительно, зря вычисляется длина остатка, и зря он потом заводится.
> Это должна была убрать элиминация неиспользуемых переменных, но она так и
> не была написана (отчасти потому, что на самом деле во многих случаях
> компилятор C++ вполне успешно справляется с этим сам).
>
> Каждый раз проверять, что не дошли до конца eR тоже не надо, конечно.
> Остальное всё по сути -- длина фактически известна (это уж компилятор С++
> пусть думает, как лучше счётчик инкрементировать), сравнение длин нужно
> (ничем не хуже, чем сравнение с упополамленной длиной).
>
> Однако, для интереса, закомментировал лишнее. Получилось на 10к (по 10
> запусков на каждый):
> Изначально:
> MeanStd.Dev.Min Median  Max
> 0.481   0.004   0.478   0.481   0.491
>
> Подчищенное:
> MeanStd.Dev.Min Median  Max
> 0.475   0.003   0.471   0.475   0.483
>
> Антон
>
> Аркадий
>>
>> чт, 28 февр. 2019 г. в 16:30, Anton Orlov orlovan_AT_gmail.com <
>> refal@botik.ru>:
>>
>>> On Thu, Feb 28, 2019 at 8:18 AM Arkady Klimov arkady.klimov_AT_gmail.com
>>>  wrote:
>>>
 Кстати, Антон, а правильно я понимаю, что в нынешней реализации Р+ при
 отождествлении образца
 vA vA e
 первая vA удлиняется только до половины длины аргумента?

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

 чт, 28 февр. 2019 г. в 15:54, Arkady Klimov :

> Там есть и небольшое содержательное отличие, хотя оно зависит от того,
> с какой стороны идет сравнение выражений eU : eV.
> Если, как естественно предположить, слева, то это и создает некоторую
> разницу. Наращиваем направо, удлиняем справа налево, а сравниваем слева
> направо. Вопрос теперь в том, не будет ли при этом среднее число 
> совпадений
> на каждом сравнении больше, чем если с другой стороны начинать сравнение.
> Но это надо отдельно изучать.
> Но конечно, основная причина, видимо, в накладных на вызовы. Это
> просто показывает, что итерации через удлинения сами по себе гораздо
> эффективнее, чем аналогичные итерации через $Iter со всеми сопутствующими
> дополнительными вызовами.
> Аркадий
>
> чт, 28 февр. 2019 г. в 02:34, Anton Orlov orlovan_AT_gmail.com <
> refal@botik.ru>:
>
>>
>>
>> On Tue, Feb 26, 2019 at 5:41 AM Yuri Klimov yuri_AT_klimov.net <
>> refal@botik.ru> wrote:
>>
>>> Добрый день!
>>>
>>> Пример Аркадия на Рефал+:
>>>
>>> $func? EX sN eS = eS;
>>> EX \{
>>>   0 eS = eS;
>>>   sN eS , 'abc' : e sX e , sX eS :: eR, # \{ eR : vA vA e; }, >>  eR>;
>>> };
>>>
>>> Я ошибся. По умолчанию в компиляторе были выключены оптимизации и
>>> включен режим отладки. Теперь время около 0.62 секунд.
>>>
>>> Пример с двумя iter из документации в приложении. Требует heap'а
>>> чуть поменьше (1ГБ против 2ГБ). Считает 10.5 секунд.
>>>
>>
>> Это, кстати, очень интересно, потому что пример с двумя $iter делает
>> по сути всё то же самое (только

Re: Сравнение веток Рефала

2019-02-28 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Мда, как я понял, код для eR : vA vA e далек от оптимальности.
На каждое очередное удлинение первой vA:
1. Проверяем, что не дошли до конца eR.
2. Вычисляем длину vA (len6) и длину дополнения vA до eR (len5).
3. Проверяем, что не (len5 < len6) -- этим обеспечивается удлинение до
половины
4. Вычисляем разницу len5-len6 (это будет длина остатка e)
5. Вызываем сравнение vA и ее дополнения до eR -- тут я не понял, надо
чтобы eV было не *равно *дополнению, а было *началом *дополнения, а где это
сказано?

В общем, довольно много всего. Поэтому не удивительно, что только чуть-чуть
обгоняет рефал-6, в котором удлинение происходит всегда до конца eR  (даже
без оптимизации удлинения до старого символа).
А надо бы: вне цикла разделить длину eR пополам, перед вызовом функции
сравнения цепочек быстро сравнить первые термы и не вычислять прежде
времени длину остатка e.
Аркадий

чт, 28 февр. 2019 г. в 16:30, Anton Orlov orlovan_AT_gmail.com <
refal@botik.ru>:

> On Thu, Feb 28, 2019 at 8:18 AM Arkady Klimov arkady.klimov_AT_gmail.com <
> refal@botik.ru> wrote:
>
>> Кстати, Антон, а правильно я понимаю, что в нынешней реализации Р+ при
>> отождествлении образца
>> vA vA e
>> первая vA удлиняется только до половины длины аргумента?
>>
>
> Да, до половины.
> В приложении выходной код на С++ (промежуточный файл, который дальше
> компилятору C++ отдаётся) -- в рантайме и компиляторе специально были
> предприняты усилия, чтобы этот код был читаем.
>
> Антон
>
> В противном случае (если удлиняется до конца аргумента) разница по
>> эффективности между удлинением и Iter еще вдвое больше.
>>
>> чт, 28 февр. 2019 г. в 15:54, Arkady Klimov :
>>
>>> Там есть и небольшое содержательное отличие, хотя оно зависит от того, с
>>> какой стороны идет сравнение выражений eU : eV.
>>> Если, как естественно предположить, слева, то это и создает некоторую
>>> разницу. Наращиваем направо, удлиняем справа налево, а сравниваем слева
>>> направо. Вопрос теперь в том, не будет ли при этом среднее число совпадений
>>> на каждом сравнении больше, чем если с другой стороны начинать сравнение.
>>> Но это надо отдельно изучать.
>>> Но конечно, основная причина, видимо, в накладных на вызовы. Это просто
>>> показывает, что итерации через удлинения сами по себе гораздо эффективнее,
>>> чем аналогичные итерации через $Iter со всеми сопутствующими
>>> дополнительными вызовами.
>>> Аркадий
>>>
>>> чт, 28 февр. 2019 г. в 02:34, Anton Orlov orlovan_AT_gmail.com <
>>> refal@botik.ru>:
>>>


 On Tue, Feb 26, 2019 at 5:41 AM Yuri Klimov yuri_AT_klimov.net <
 refal@botik.ru> wrote:

> Добрый день!
>
> Пример Аркадия на Рефал+:
>
> $func? EX sN eS = eS;
> EX \{
>   0 eS = eS;
>   sN eS , 'abc' : e sX e , sX eS :: eR, # \{ eR : vA vA e; },  sN 1> eR>;
> };
>
> Я ошибся. По умолчанию в компиляторе были выключены оптимизации и
> включен режим отладки. Теперь время около 0.62 секунд.
>
> Пример с двумя iter из документации в приложении. Требует heap'а чуть
> поменьше (1ГБ против 2ГБ). Считает 10.5 секунд.
>

 Это, кстати, очень интересно, потому что пример с двумя $iter делает по
 сути всё то же самое (только выражение растит в другую сторону).
 И такая разница во времени получается из-за накладных расходов на
 вызовы функций (самой Unacceptable и селекторов -- Middle, Right). Хотя они
 и не копируют выражения, но надо поместить аргументы на стек, вызвать,
 убрать со стека, привести длинный Int к обычному (в аргументе) и т.п. --
 всё это действия, которые отсутствуют при сопоставлении eR : vA vA e.

 Антон



>
> Второй пример Аркадия на Рефал+ считает без heap'а за около 0.76
> секунд:
>
> $func EX1 sN eS = eS;
> EX1 sN eS, sN eS : {
>   sN vA vA e = ;
>   0 e = eS;
>   sN e =  'a' eS>;
> };
>
> $func Next sN eS = eS;
> Next {
>   sN = ();
>   sN sX eS = {
> 'abc' : e sX sY e = ;
> =  eS>;
>   };
> };
>
>
> С уважением,
>  Юрий Климов
>
> P.S. Во втором примере ошибка:
>
>> EX1 sN eS : {
>> // Goal!
>>0 e = eS;
>> // eS is unacceptable
>>sN vA vA e = ; // tail recursion, eS is not empty
>> (otherwise previous sentence works)
>> ...
>
> Надо эти два случая переставить местами, а то иначе последних (самый
> левый в строке) символ не проверяется на повторы.
>
> On Tue, 26 Feb 2019 at 09:29, Sergei M. Abramov abram_AT_botik.ru <
> refal@botik.ru> wrote:
>
>> День добрый,
>>
>> > Запустил исходный пример Аркадия на Рефале+ (с компиляцией C++).
>> > Heap пришлось увеличить до 2GB. Время - 2.05 секунды.
>>
>> Юра, сделайте с двумя $iter-ами, пожалуйста.  Хочется и на текст
>> полюбоваться, и на прогон.
>>
>> Под руками системы нет, а в сухую (без воды в бассейне) и облажаться
>> могу...
>>
>> Всего доброго,
>>

Re: Сравнение веток Рефала

2019-02-28 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Кстати, Антон, а правильно я понимаю, что в нынешней реализации Р+ при
отождествлении образца
vA vA e
первая vA удлиняется только до половины длины аргумента?
В противном случае (если удлиняется до конца аргумента) разница по
эффективности между удлинением и Iter еще вдвое больше.

чт, 28 февр. 2019 г. в 15:54, Arkady Klimov :

> Там есть и небольшое содержательное отличие, хотя оно зависит от того, с
> какой стороны идет сравнение выражений eU : eV.
> Если, как естественно предположить, слева, то это и создает некоторую
> разницу. Наращиваем направо, удлиняем справа налево, а сравниваем слева
> направо. Вопрос теперь в том, не будет ли при этом среднее число совпадений
> на каждом сравнении больше, чем если с другой стороны начинать сравнение.
> Но это надо отдельно изучать.
> Но конечно, основная причина, видимо, в накладных на вызовы. Это просто
> показывает, что итерации через удлинения сами по себе гораздо эффективнее,
> чем аналогичные итерации через $Iter со всеми сопутствующими
> дополнительными вызовами.
> Аркадий
>
> чт, 28 февр. 2019 г. в 02:34, Anton Orlov orlovan_AT_gmail.com <
> refal@botik.ru>:
>
>>
>>
>> On Tue, Feb 26, 2019 at 5:41 AM Yuri Klimov yuri_AT_klimov.net <
>> refal@botik.ru> wrote:
>>
>>> Добрый день!
>>>
>>> Пример Аркадия на Рефал+:
>>>
>>> $func? EX sN eS = eS;
>>> EX \{
>>>   0 eS = eS;
>>>   sN eS , 'abc' : e sX e , sX eS :: eR, # \{ eR : vA vA e; }, >> sN 1> eR>;
>>> };
>>>
>>> Я ошибся. По умолчанию в компиляторе были выключены оптимизации и
>>> включен режим отладки. Теперь время около 0.62 секунд.
>>>
>>> Пример с двумя iter из документации в приложении. Требует heap'а чуть
>>> поменьше (1ГБ против 2ГБ). Считает 10.5 секунд.
>>>
>>
>> Это, кстати, очень интересно, потому что пример с двумя $iter делает по
>> сути всё то же самое (только выражение растит в другую сторону).
>> И такая разница во времени получается из-за накладных расходов на вызовы
>> функций (самой Unacceptable и селекторов -- Middle, Right). Хотя они и не
>> копируют выражения, но надо поместить аргументы на стек, вызвать, убрать со
>> стека, привести длинный Int к обычному (в аргументе) и т.п. -- всё это
>> действия, которые отсутствуют при сопоставлении eR : vA vA e.
>>
>> Антон
>>
>>
>>
>>>
>>> Второй пример Аркадия на Рефал+ считает без heap'а за около 0.76 секунд:
>>>
>>> $func EX1 sN eS = eS;
>>> EX1 sN eS, sN eS : {
>>>   sN vA vA e = ;
>>>   0 e = eS;
>>>   sN e =  'a' eS>;
>>> };
>>>
>>> $func Next sN eS = eS;
>>> Next {
>>>   sN = ();
>>>   sN sX eS = {
>>> 'abc' : e sX sY e = ;
>>> =  eS>;
>>>   };
>>> };
>>>
>>>
>>> С уважением,
>>>  Юрий Климов
>>>
>>> P.S. Во втором примере ошибка:
>>>
 EX1 sN eS : {
 // Goal!
0 e = eS;
 // eS is unacceptable
sN vA vA e = ; // tail recursion, eS is not empty
 (otherwise previous sentence works)
 ...
>>>
>>> Надо эти два случая переставить местами, а то иначе последних (самый
>>> левый в строке) символ не проверяется на повторы.
>>>
>>> On Tue, 26 Feb 2019 at 09:29, Sergei M. Abramov abram_AT_botik.ru <
>>> refal@botik.ru> wrote:
>>>
 День добрый,

 > Запустил исходный пример Аркадия на Рефале+ (с компиляцией C++).
 > Heap пришлось увеличить до 2GB. Время - 2.05 секунды.

 Юра, сделайте с двумя $iter-ами, пожалуйста.  Хочется и на текст
 полюбоваться, и на прогон.

 Под руками системы нет, а в сухую (без воды в бассейне) и облажаться
 могу...

 Всего доброго,

 Сергей Абрамов


>
> --
> ___
> *С уважением, *
> *Аркадий Климов,*
> *с.н.с. ИППМ РАН,*
> *+7(499)135-32-95*
> *+7(916)072-81-48*
>


-- 
___
*С уважением, *
*Аркадий Климов,*
*с.н.с. ИППМ РАН,*
*+7(499)135-32-95*
*+7(916)072-81-48*


Re: Сравнение веток Рефала

2019-02-28 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Там есть и небольшое содержательное отличие, хотя оно зависит от того, с
какой стороны идет сравнение выражений eU : eV.
Если, как естественно предположить, слева, то это и создает некоторую
разницу. Наращиваем направо, удлиняем справа налево, а сравниваем слева
направо. Вопрос теперь в том, не будет ли при этом среднее число совпадений
на каждом сравнении больше, чем если с другой стороны начинать сравнение.
Но это надо отдельно изучать.
Но конечно, основная причина, видимо, в накладных на вызовы. Это просто
показывает, что итерации через удлинения сами по себе гораздо эффективнее,
чем аналогичные итерации через $Iter со всеми сопутствующими
дополнительными вызовами.
Аркадий

чт, 28 февр. 2019 г. в 02:34, Anton Orlov orlovan_AT_gmail.com <
refal@botik.ru>:

>
>
> On Tue, Feb 26, 2019 at 5:41 AM Yuri Klimov yuri_AT_klimov.net <
> refal@botik.ru> wrote:
>
>> Добрый день!
>>
>> Пример Аркадия на Рефал+:
>>
>> $func? EX sN eS = eS;
>> EX \{
>>   0 eS = eS;
>>   sN eS , 'abc' : e sX e , sX eS :: eR, # \{ eR : vA vA e; }, > 1> eR>;
>> };
>>
>> Я ошибся. По умолчанию в компиляторе были выключены оптимизации и включен
>> режим отладки. Теперь время около 0.62 секунд.
>>
>> Пример с двумя iter из документации в приложении. Требует heap'а чуть
>> поменьше (1ГБ против 2ГБ). Считает 10.5 секунд.
>>
>
> Это, кстати, очень интересно, потому что пример с двумя $iter делает по
> сути всё то же самое (только выражение растит в другую сторону).
> И такая разница во времени получается из-за накладных расходов на вызовы
> функций (самой Unacceptable и селекторов -- Middle, Right). Хотя они и не
> копируют выражения, но надо поместить аргументы на стек, вызвать, убрать со
> стека, привести длинный Int к обычному (в аргументе) и т.п. -- всё это
> действия, которые отсутствуют при сопоставлении eR : vA vA e.
>
> Антон
>
>
>
>>
>> Второй пример Аркадия на Рефал+ считает без heap'а за около 0.76 секунд:
>>
>> $func EX1 sN eS = eS;
>> EX1 sN eS, sN eS : {
>>   sN vA vA e = ;
>>   0 e = eS;
>>   sN e =  'a' eS>;
>> };
>>
>> $func Next sN eS = eS;
>> Next {
>>   sN = ();
>>   sN sX eS = {
>> 'abc' : e sX sY e = ;
>> =  eS>;
>>   };
>> };
>>
>>
>> С уважением,
>>  Юрий Климов
>>
>> P.S. Во втором примере ошибка:
>>
>>> EX1 sN eS : {
>>> // Goal!
>>>0 e = eS;
>>> // eS is unacceptable
>>>sN vA vA e = ; // tail recursion, eS is not empty
>>> (otherwise previous sentence works)
>>> ...
>>
>> Надо эти два случая переставить местами, а то иначе последних (самый
>> левый в строке) символ не проверяется на повторы.
>>
>> On Tue, 26 Feb 2019 at 09:29, Sergei M. Abramov abram_AT_botik.ru <
>> refal@botik.ru> wrote:
>>
>>> День добрый,
>>>
>>> > Запустил исходный пример Аркадия на Рефале+ (с компиляцией C++).
>>> > Heap пришлось увеличить до 2GB. Время - 2.05 секунды.
>>>
>>> Юра, сделайте с двумя $iter-ами, пожалуйста.  Хочется и на текст
>>> полюбоваться, и на прогон.
>>>
>>> Под руками системы нет, а в сухую (без воды в бассейне) и облажаться
>>> могу...
>>>
>>> Всего доброго,
>>>
>>> Сергей Абрамов
>>>
>>>

-- 
___
*С уважением, *
*Аркадий Климов,*
*с.н.с. ИППМ РАН,*
*+7(499)135-32-95*
*+7(916)072-81-48*


Re: Сравнение веток Рефала

2019-02-28 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Я потом подумал, что все дело просто в том, что на длинных списках процесс
"висит" на доступе к памяти. На небольших  помогает кэш. До 1
элементов, это наверно в L2 влезает.
Потом еще был такой эффект: при повторении вызова без перезагрузки ri.exe
работа обычно замедлялась - до полутора раз. Это, видимо, объясняется
перетасовкой звеньев в памяти. В начале работы больше работаем на
последовательно расположенных звеньях -- подыгрывает кэш-линия и прочие
предсказатели.
Аркадий

чт, 28 февр. 2019 г. в 02:22, Anton Orlov orlovan_AT_gmail.com <
refal@botik.ru>:

>
>
> On Tue, Feb 26, 2019 at 6:17 AM Arkady Klimov arkady.klimov_AT_gmail.com <
> refal@botik.ru> wrote:
>
>> Юра!
>> Ты нигде не написал, какой у тебя был аргумент. 1?
>> А ошибку я тоже у себя нашел, спасибо.
>> Арк
>>
>> PS. У себя на Рефал6 нашел странности.
>> Для начала проверил, что отождествление vA vA e транслируется также как и
>> ta eA ta eA e.
>> Это нормально. Но поиск старого терма делается без оптимизаций, на общих
>> основниях.
>> Поэтому поменял образец на sa eA sa eA e, надеясь, что будет
>> оптимизированное удлинение.
>> Не тут то было. Посмотрел компилятор - оптимизация не работает, хотя
>> присутствует, но то ли с ошибкой, то ли с сознательной блокировкой
>> (какой-то ид OVSYM вместо OSYM стоит).
>> Разблокировал. Странлировал.
>> Время работы для 1 упало вдвое (0.54 сек). Отлично. Но дальше полезла
>> чертовщина.
>> С увеличением N время стало расти не квадратично, как раньше, а круче!
>> И для 10 стало медленнее чем раньше (114 сек вместо 100). Это я уже
>> не понимаю.
>> Нет ли тут каких эффектов, что если мы по длинному списку бежим быстрее
>> (меньше действий), то все начинает работать медленнее? Может из-за каких-то
>> свойств кэша?
>>
>
> Это *очень* сомнительно.
>
> Не растёт ли расходуемая память при включённой оптимизации?
>
> Антон
>
> Аркадий
>>
>> вт, 26 февр. 2019 г. в 13:41, Yuri Klimov yuri_AT_klimov.net <
>> refal@botik.ru>:
>>
>>> Добрый день!
>>>
>>> Пример Аркадия на Рефал+:
>>>
>>> $func? EX sN eS = eS;
>>> EX \{
>>>   0 eS = eS;
>>>   sN eS , 'abc' : e sX e , sX eS :: eR, # \{ eR : vA vA e; }, >> sN 1> eR>;
>>> };
>>>
>>> Я ошибся. По умолчанию в компиляторе были выключены оптимизации и
>>> включен режим отладки. Теперь время около 0.62 секунд.
>>>
>>> Пример с двумя iter из документации в приложении. Требует heap'а чуть
>>> поменьше (1ГБ против 2ГБ). Считает 10.5 секунд.
>>>
>>> Второй пример Аркадия на Рефал+ считает без heap'а за около 0.76 секунд:
>>>
>>> $func EX1 sN eS = eS;
>>> EX1 sN eS, sN eS : {
>>>   sN vA vA e = ;
>>>   0 e = eS;
>>>   sN e =  'a' eS>;
>>> };
>>>
>>> $func Next sN eS = eS;
>>> Next {
>>>   sN = ();
>>>   sN sX eS = {
>>> 'abc' : e sX sY e = ;
>>> =  eS>;
>>>   };
>>> };
>>>
>>>
>>> С уважением,
>>>  Юрий Климов
>>>
>>> P.S. Во втором примере ошибка:
>>>
 EX1 sN eS : {
 // Goal!
0 e = eS;
 // eS is unacceptable
sN vA vA e = ; // tail recursion, eS is not empty
 (otherwise previous sentence works)
 ...
>>>
>>> Надо эти два случая переставить местами, а то иначе последних (самый
>>> левый в строке) символ не проверяется на повторы.
>>>
>>> On Tue, 26 Feb 2019 at 09:29, Sergei M. Abramov abram_AT_botik.ru <
>>> refal@botik.ru> wrote:
>>>
 День добрый,

 > Запустил исходный пример Аркадия на Рефале+ (с компиляцией C++).
 > Heap пришлось увеличить до 2GB. Время - 2.05 секунды.

 Юра, сделайте с двумя $iter-ами, пожалуйста.  Хочется и на текст
 полюбоваться, и на прогон.

 Под руками системы нет, а в сухую (без воды в бассейне) и облажаться
 могу...

 Всего доброго,

 Сергей Абрамов


>>
>>

-- 
___
*С уважением, *
*Аркадий Климов,*
*с.н.с. ИППМ РАН,*
*+7(499)135-32-95*
*+7(916)072-81-48*


Re: Сравнение веток Рефала

2019-02-27 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Спасибо, Александр,
да, этот текст дает определенное представление о Вашей версии языка.
Думаю, можно и нужно сделать на него ссылку с сайта refal.net.
Там есть общий раздел "Диалекты", в котором под заголовком с названием
"диалекта" даются ссылки на возможно другие ресурсы.
Только для единообразия надо дать три ссылки: на сайт поддержки, на
документацию и на download.
Первой может быть вот эта: https://github.com/bmstu-iu9/refal-5-lambda .
А что с документацией? Если: https://bmstu-iu9.github.io/refal-5-lambda/,
то это скорее "учебник".
Документация должна иметь оглавление и возможность быстро находить ответы
на вопросы.
Короче, готовьте ссылки.
Аркадий

вт, 26 февр. 2019 г. в 23:00, Александр Коновалов a.v.konovalov87_AT_mail.ru
:

> Добрый вечер, Аркадий!
>
> Вы писали:
>
> *«Сейчас у меня появилась мысль, и хочу всем апологетам того или иного
> диалекта её предложить: написать небольшой текст в свободной форме на 2-3-5
> страниц с описанием особенностей их „любимых“ версий языка и их
> реализаций — что было бы полезно знать потенциальным пользователям.»*
>
> Я вспомнил! У меня же есть такой текст про Рефал-5λ и называется он
> (кто бы мог подумать!) README:
>
> https://github.com/bmstu-iu9/refal-5-lambda (сразу после списка файлов)
>
> В нём описываются цели проектирования компилятора + отличия
> от «классического» Рефала-5, под которым я подразумеваю refc/refgo актуальной
> версии. Только на сайт refal.ru выложить этот материал пока
> не получится — на нём нет раздела про Рефал-5λ. J
>
>
>
> С уважением,
> Александр Коновалов
>
> P.S. На письма рассылки, пришедшие ко мне с воскресенья, я помню и на них
> отвечу. Возможно, в выходные.
>
>
>
> *From:* Arkady Klimov arkady.klimov_AT_gmail.com [mailto:refal@botik.ru]
> *Sent:* Thursday, February 14, 2019 4:31 PM
> *To:* refal@botik.ru
> *Subject:* Re: Сравнение веток Рефала
>
>
>
> Я не успел вовремя заметить появление новой ветки, поэтому теперь копирую
> сюда свой ответ Александру Гусеву (с небольшими стилистическими правками).
>
>
> ---
>
> А существует где-то краткая информация по сравнению веток рефала? Статья,
> может быть какая-то.
>
> Насколько я знаю, в каком-то законченно-оформленном виде такой информации
> сейчас нет.
>
>
>
> Сейчас у меня появилась мысль, и хочу всем апологетам того или иного
> диалекта ее предложить: написать небольшой текст в свободной форме на 2-3-5
> страниц с описанием особенностей их "любимых" версий языка и их реализаций
> - что было бы полезно знать потенциальным пользователям. Эти тексты
> (ссылки) можно было бы разместить на сайте refal.net на страницах,
> связанных с каждой версией-диалектом. В этой переписке по Рефалу+ уже много
> информации появилось, осталось ее собрать и оформить. Наверно, это было бы
> полезно.
>
>
>
> А также неплохо бы единый бенчмарк составить. И какие-то сравнительные
> таблицы.
>
>
>
> А еще когда-то была установка на создание единого инструментария по
> реализации разных диалектов с единым промежуточным синтаксисом AST, с
> возможностью любой входной диалект на любую платформу положить. Насколько я
> понимаю, Рефал+ свою часть пути в основном прошел и там это представление
> задокументировано. Я хотел бы пройти свою часть для Рефала-6, но на это
> конечно нужно время. Которого, увы, нет.
>
>
>
> Аркадий
>
>
>
> чт, 14 февр. 2019 г. в 12:46, Eisymont Leonid verger-lk_AT_yandex.ru <
> refal@botik.ru>:
>
> Переменные есть, числа можно взять целые и вещественные. Можно упростить,
> на вход поступают только правильные арифметические выражения. Программа
> должна быть короткой, на страницу. У меня такая программа на рефале-2 была,
> постараюсь переслать.
>
>
>
> 14.02.2019, 12:40, "Александр Коновалов a.v.konovalov87_AT_mail.ru" <
> refal@botik.ru>:
>
> Добрый день, Леонид!
>
> Спасибо за хорошую идею. Постараюсь в выходные написать простейший
> подобный компилятор.
>
> Стоит уточнить задачу: есть ли переменные, какие знаки операций
> поддерживаются, на сколько подробными должны быть сообщения об ошибках,
> должен ли компилятор восстанавливаться…
>
>
>
> С уважением,
> Александр Коновалов
>
>
>
> *From:* Eisymont Leonid verger-lk_AT_yandex.ru 
> *Sent:* Thursday, February 14, 2019 12:33 PM
> *To:* refal@botik.ru
> *Subject:* Re: Сравнение веток Рефала
>
>
>
> Будет действительно весело. А делать надо, дождались. Рекомендую взять
> какой - нибудь пример и на нем это сравнивать. Иначе будет пустой
> болтовней. А вот какой пример - пока не соображу, м.б. перевод
> арифметических выражений в линеаризованную польскую запись, например, в
> триады? Но этот перевод должен начинаться с лексического анализа со
> спариванием скобок. Обычно перевод в польскую запись хорошо воспринимался
> на лекциях по рефалу. Кстати, рефал-2 рассказывался обычно за
> десять-пятнадцать минут, даже чиновникам и генералам. Сколько потребуется
> времени на рассказ  о "коллапсирующих джунглях" подумать страшно. Вот она
> жизнь и зас

Re: Сравнение веток Рефала

2019-02-26 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Василий, Ваши результаты меня удивляют. Вроде для 1 время выполнения
ожидается в 100 раз меньше, чем для 10. А у Вас первый проходит "менее
чем за минуту", а последний - "более чем 5,5 минут". Формально, конечно,
нет противоречия. Вы не ошиблись? Замерьте, пожалуйста, еще раз для тех же
размеров, что у нас с Юрой.
А еще постарайтесь сделать вариант, который был бы как можно ближе к нашему
EX1.
С уважением,
Аркадий Климов


пн, 25 февр. 2019 г. в 19:48, swi_AT_cnshb.ru :

> Уважаемые господа!
> Я тоже дочитал...
> А тест Аркадия меня подвиг его повторить.
> У меня на рефале/2 получилась следующая программа:
> a =/0/k/P/k/EX//1/..
> EX /0/eS=eS
>sN eS=k/EX1/('abc'sN)eS.
> EX1 (sa eb sN)eS=k/EXc/(eb sN)sa eS.
> (sN)saeS=k/EX1p/k/P1/sN.sa('abc')eS.
> EX1p sN sa(e1 sa eb)eS=k/EX1/(eb sN)eS.
> EXc w0 sa eA sa eA ee=k/EX1/w0 eA sa eA ee.
> (eb sN)eR=k/EX/k/M1/sN.eR.
>
> я старался использовать идентификаторы переменных как на рефале-6...
>
> Кстати, ех 1 у меня прошло, и менее чем за минуту (разница во времени
> файла результата "компиляции" и результата) см. приложенный файл.
>
> 25.02.2019, 16:51, "Arkady Klimov arkady.klimov_AT_gmail.com" <
> refal@botik.ru>:
>
> Я не только дочитал, наконец, но и внес свои правки-дополнения (в раздел
> по Рефал-6, и чуток по Рефал Плюс), поместив этот замечательный текст в
> doc-файл, который можно взять по ссылке:
>
> https://www.dropbox.com/s/eq4yv9g7atu59d7/CompareRefals.doc?dl=0
>
> Я подумал, что хорошо бы моему примеру последовали и "держатели" других
> диалектов.
> Александр, поручаю Вам быть "хозяином" этого файла, можете забрать его и
> выложить где-то от себя. Мои добавки, помеченные цветом и префиксом "АрК",
> можете в своем стиле адоптировать.
> Будет замечательно, если Вы сможете сделать из этого публикацию в
> ближайшее время. Призываю всех, кто чем может (правками, замечаниями и тп),
> этому посодействовать.
> ***
> Я по ходу решил еще раз почитать документацию-руководство по Рефалу Плюс.
> У меня сложное отношение к нему, то есть он как-то всегда был сложен для
> меня. Как я сейчас понял, возможно это из-за специфического описания
> синтаксиса, содержащего понятия "тропы" и "хвосты". Они очень похожи, и я
> всегда их путал и не мог привыкнуть различать. Для этого было бы полезно
> видеть их семантическое различие, чем я не владею. А описание языка
> такового не предлагает. Остается только "зазубривать" формальные
> особенности, напрягая свою внутреннюю "нейросеть". Хорошо бы те, кто
> владеют семантическим пониманием хвостов и троп Рефала Плюс, если таковое
> существует, его как-то эксплицировали.
> ***
> В руководстве мне встретился интересный пример - задача "о цепочках" (из
> Вирта), раздел 1.10. Надо породить строку из трех знаков (a, b, c), чтобы в
> ней не было одинаковых смежных подстрок.
> Решение довольно мутное, тем более оно дважды использует $Iter, который я
> не люблю (вероятно, авторы, хотели именно его иллюстрировать этим
> примером). И мне захотелось переписать его в более "чистых" терминах. И вот
> что у меня получилось:
> --
> файл abc.ref
> //  - расширить строку eS влево sN знаками a,b,c,
> //не допуская повторов смежных подстрок
> EX {
>0 eS = eS;
>sN eS , 'abc' : e sX e , sX eS : eR : # vA vA e,  eR>;
>};
>
> 
> Это рефал-6, но думаю, можно по аналогии и на Плюсе написать (может даже и
> так пройдет).
> Функция EX откатная, при успехе выдает продолженную строку, иначе откат.
> Образец e sX e перебирает три варианта продолжения, образец vA vA e под
> отрицанием проверяет, что выражение не начинается с двух одинаковых
> непустых подстрок, дальше идет рекурсивный вызов, все через запятую
> прозрачно для откатов.
> Назвал функцию заглавными покороче, чтобы в интерактивной моде вызывать:
> d:\ref6\TEST>d:\ref6\rix.exe i+abc+*ask -S100 -T100 -H100
> #>ex 5
> 'acaba'
> #>ex 10
> 'bcacbacaba'
> #>ex 100
>
> 'cacbacabacbabcabacabcbabcacbacabacbabcabacabcacbabcabacbabcacbacabacbabcabacabcacbacabacbabcacbacaba'
> #>ex 1000
>
> 'acbabcacbacabacbabcbacbcabacbabcacbacabacbabcabacabcbabcabacbabcacbacabacbabcabacabcacbabcabacbabcacbacabacbabcabacabcbabcacbacabacbabcbacbcabacbabcabacabcacbabcabacbabcbacabacbabcabacabcacbabcabacbabcacbacabacbabcabacabcacbabcabacbabcbacabacbabcacbacabacbabcbacabacbcacbacabacbabcacbacabacbcacbabcabacabcacbabcabacbabcbacabacbabcabacabcacbabcabacbabcacbacabacbabcabacabcacbabcabacbabcbacabacbabcacbacabacbabcbacbcabacbabcabacabcacbabcabacbabcbacabacbabcabacabcacbabcabacbabcacbacabacbabcabacabcacbabcabacbabcbacabacbabcacbacabacbabcbacabacbcacbacabacbabcacbacabacbcacbabcabacabcacbabcabacbabcbacabacbabcabacabcacbabcabacbabcacbacabacbabcabacabcacbabcabacbabcbacbcabacbabcabacabcacbabcabacbabcbacabacbabcabacabcacbabcabacbabcacbacabacbabcabacabcacbabcab

Re: Сравнение веток Рефала

2019-02-26 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
У меня на ноуте c Intel Core i7 3630 QM 2.4GHz на Рефале-6 для исходного
варианта EX1
(только ошибку исправил, то есть все как в Рефал+) такие результаты (в
секундах):
 11.04
 23.93
 415.91
 865.03
10   102.41
20   418.17

Рост чуть более чем квадратичный, что объяснимо:
повторная v-переменная понемногу прибавляет обороты.

С уважением,
Аркадий Климов

вт, 26 февр. 2019 г. в 15:22, Yuri Klimov yuri_AT_klimov.net :

> P.S. На Refal+ версия EX1 растет примерно квадратично:
> 1 0:00.76 real, 0.76 user, 0.00 sys
> 2 0:02.88 real, 2.88 user, 0.00 sys
> 4 0:11.75 real, 11.75 user, 0.00 sys
> 8 0:51.48 real, 51.48 user, 0.00 sys
> 10 1:23.53 real, 83.53 user, 0.00 sys
> 20 6:21.94 real, 381.92 user, 0.00 sys
>
> С уважением,
> Юрий Климов
>
> On Tue, 26 Feb 2019 at 14:17, Arkady Klimov arkady.klimov_AT_gmail.com <
> refal@botik.ru> wrote:
>
>> Юра!
>> Ты нигде не написал, какой у тебя был аргумент. 1?
>> А ошибку я тоже у себя нашел, спасибо.
>> Арк
>>
>> PS. У себя на Рефал6 нашел странности.
>> Для начала проверил, что отождествление vA vA e транслируется также как и
>> ta eA ta eA e.
>> Это нормально. Но поиск старого терма делается без оптимизаций, на общих
>> основниях.
>> Поэтому поменял образец на sa eA sa eA e, надеясь, что будет
>> оптимизированное удлинение.
>> Не тут то было. Посмотрел компилятор - оптимизация не работает, хотя
>> присутствует, но то ли с ошибкой, то ли с сознательной блокировкой
>> (какой-то ид OVSYM вместо OSYM стоит).
>> Разблокировал. Странлировал.
>> Время работы для 1 упало вдвое (0.54 сек). Отлично. Но дальше полезла
>> чертовщина.
>> С увеличением N время стало расти не квадратично, как раньше, а круче!
>> И для 10 стало медленнее чем раньше (114 сек вместо 100). Это я уже
>> не понимаю.
>> Нет ли тут каких эффектов, что если мы по длинному списку бежим быстрее
>> (меньше действий), то все начинает работать медленнее? Может из-за каких-то
>> свойств кэша?
>> Аркадий
>>
>> вт, 26 февр. 2019 г. в 13:41, Yuri Klimov yuri_AT_klimov.net <
>> refal@botik.ru>:
>>
>>> Добрый день!
>>>
>>> Пример Аркадия на Рефал+:
>>>
>>> $func? EX sN eS = eS;
>>> EX \{
>>>   0 eS = eS;
>>>   sN eS , 'abc' : e sX e , sX eS :: eR, # \{ eR : vA vA e; }, >> sN 1> eR>;
>>> };
>>>
>>> Я ошибся. По умолчанию в компиляторе были выключены оптимизации и
>>> включен режим отладки. Теперь время около 0.62 секунд.
>>>
>>> Пример с двумя iter из документации в приложении. Требует heap'а чуть
>>> поменьше (1ГБ против 2ГБ). Считает 10.5 секунд.
>>>
>>> Второй пример Аркадия на Рефал+ считает без heap'а за около 0.76 секунд:
>>>
>>> $func EX1 sN eS = eS;
>>> EX1 sN eS, sN eS : {
>>>   sN vA vA e = ;
>>>   0 e = eS;
>>>   sN e =  'a' eS>;
>>> };
>>>
>>> $func Next sN eS = eS;
>>> Next {
>>>   sN = ();
>>>   sN sX eS = {
>>> 'abc' : e sX sY e = ;
>>> =  eS>;
>>>   };
>>> };
>>>
>>>
>>> С уважением,
>>>  Юрий Климов
>>>
>>> P.S. Во втором примере ошибка:
>>>
 EX1 sN eS : {
 // Goal!
0 e = eS;
 // eS is unacceptable
sN vA vA e = ; // tail recursion, eS is not empty
 (otherwise previous sentence works)
 ...
>>>
>>> Надо эти два случая переставить местами, а то иначе последних (самый
>>> левый в строке) символ не проверяется на повторы.
>>>
>>> On Tue, 26 Feb 2019 at 09:29, Sergei M. Abramov abram_AT_botik.ru <
>>> refal@botik.ru> wrote:
>>>
 День добрый,

 > Запустил исходный пример Аркадия на Рефале+ (с компиляцией C++).
 > Heap пришлось увеличить до 2GB. Время - 2.05 секунды.

 Юра, сделайте с двумя $iter-ами, пожалуйста.  Хочется и на текст
 полюбоваться, и на прогон.

 Под руками системы нет, а в сухую (без воды в бассейне) и облажаться
 могу...

 Всего доброго,

 Сергей Абрамов


>>
>>


Re: Сравнение веток Рефала

2019-02-26 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Юра!
Ты нигде не написал, какой у тебя был аргумент. 1?
А ошибку я тоже у себя нашел, спасибо.
Арк

PS. У себя на Рефал6 нашел странности.
Для начала проверил, что отождествление vA vA e транслируется также как и
ta eA ta eA e.
Это нормально. Но поиск старого терма делается без оптимизаций, на общих
основниях.
Поэтому поменял образец на sa eA sa eA e, надеясь, что будет
оптимизированное удлинение.
Не тут то было. Посмотрел компилятор - оптимизация не работает, хотя
присутствует, но то ли с ошибкой, то ли с сознательной блокировкой
(какой-то ид OVSYM вместо OSYM стоит).
Разблокировал. Странлировал.
Время работы для 1 упало вдвое (0.54 сек). Отлично. Но дальше полезла
чертовщина.
С увеличением N время стало расти не квадратично, как раньше, а круче!
И для 10 стало медленнее чем раньше (114 сек вместо 100). Это я уже не
понимаю.
Нет ли тут каких эффектов, что если мы по длинному списку бежим быстрее
(меньше действий), то все начинает работать медленнее? Может из-за каких-то
свойств кэша?
Аркадий

вт, 26 февр. 2019 г. в 13:41, Yuri Klimov yuri_AT_klimov.net :

> Добрый день!
>
> Пример Аркадия на Рефал+:
>
> $func? EX sN eS = eS;
> EX \{
>   0 eS = eS;
>   sN eS , 'abc' : e sX e , sX eS :: eR, # \{ eR : vA vA e; },  1> eR>;
> };
>
> Я ошибся. По умолчанию в компиляторе были выключены оптимизации и включен
> режим отладки. Теперь время около 0.62 секунд.
>
> Пример с двумя iter из документации в приложении. Требует heap'а чуть
> поменьше (1ГБ против 2ГБ). Считает 10.5 секунд.
>
> Второй пример Аркадия на Рефал+ считает без heap'а за около 0.76 секунд:
>
> $func EX1 sN eS = eS;
> EX1 sN eS, sN eS : {
>   sN vA vA e = ;
>   0 e = eS;
>   sN e =  'a' eS>;
> };
>
> $func Next sN eS = eS;
> Next {
>   sN = ();
>   sN sX eS = {
> 'abc' : e sX sY e = ;
> =  eS>;
>   };
> };
>
>
> С уважением,
>  Юрий Климов
>
> P.S. Во втором примере ошибка:
>
>> EX1 sN eS : {
>> // Goal!
>>0 e = eS;
>> // eS is unacceptable
>>sN vA vA e = ; // tail recursion, eS is not empty
>> (otherwise previous sentence works)
>> ...
>
> Надо эти два случая переставить местами, а то иначе последних (самый левый
> в строке) символ не проверяется на повторы.
>
> On Tue, 26 Feb 2019 at 09:29, Sergei M. Abramov abram_AT_botik.ru <
> refal@botik.ru> wrote:
>
>> День добрый,
>>
>> > Запустил исходный пример Аркадия на Рефале+ (с компиляцией C++).
>> > Heap пришлось увеличить до 2GB. Время - 2.05 секунды.
>>
>> Юра, сделайте с двумя $iter-ами, пожалуйста.  Хочется и на текст
>> полюбоваться, и на прогон.
>>
>> Под руками системы нет, а в сухую (без воды в бассейне) и облажаться
>> могу...
>>
>> Всего доброго,
>>
>> Сергей Абрамов
>>
>>


Re: Сравнение веток Рефала

2019-02-25 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Доделал свой итеративный вариант, он проходит без увеличения памяти и
стеков до N=10 (сто тысяч) за 1м40сек (100 сек).
1 (десять тысяч) проходит за 1 сек.

// Здесь строка eS еще не проверена на отсутствие повтора в ее начале
EX1 sN eS : {
// Goal!
   0 e = eS;
// eS is unacceptable
   sN vA vA e = ; // tail recursion, eS is not empty (otherwise
previous sentence works)
// eS is acceptable
   sN e =  'a' eS>;
   };
Next  {
   sN = (); // Global Fail
   sN sX eS = {
 /* Choose next symbol after sX if any */
 'abc' : e sX sY e = ;
 /* No next symbol -> go back */
 =  eS>;
 };
  };

Это по структуре похоже на то, что прислал Василий. Но наверно, более
экономно.
Здесь нет откатов, простой цикл, состояние - вся текущая строка.


пн, 25 февр. 2019 г. в 19:48, swi_AT_cnshb.ru :

> Уважаемые господа!
> Я тоже дочитал...
> А тест Аркадия меня подвиг его повторить.
> У меня на рефале/2 получилась следующая программа:
> a =/0/k/P/k/EX//1/..
> EX /0/eS=eS
>sN eS=k/EX1/('abc'sN)eS.
> EX1 (sa eb sN)eS=k/EXc/(eb sN)sa eS.
> (sN)saeS=k/EX1p/k/P1/sN.sa('abc')eS.
> EX1p sN sa(e1 sa eb)eS=k/EX1/(eb sN)eS.
> EXc w0 sa eA sa eA ee=k/EX1/w0 eA sa eA ee.
> (eb sN)eR=k/EX/k/M1/sN.eR.
>
> я старался использовать идентификаторы переменных как на рефале-6...
>
> Кстати, ех 1 у меня прошло, и менее чем за минуту (разница во времени
> файла результата "компиляции" и результата) см. приложенный файл.
>
> 25.02.2019, 16:51, "Arkady Klimov arkady.klimov_AT_gmail.com" <
> refal@botik.ru>:
>
> Я не только дочитал, наконец, но и внес свои правки-дополнения (в раздел
> по Рефал-6, и чуток по Рефал Плюс), поместив этот замечательный текст в
> doc-файл, который можно взять по ссылке:
>
> https://www.dropbox.com/s/eq4yv9g7atu59d7/CompareRefals.doc?dl=0
>
> Я подумал, что хорошо бы моему примеру последовали и "держатели" других
> диалектов.
> Александр, поручаю Вам быть "хозяином" этого файла, можете забрать его и
> выложить где-то от себя. Мои добавки, помеченные цветом и префиксом "АрК",
> можете в своем стиле адоптировать.
> Будет замечательно, если Вы сможете сделать из этого публикацию в
> ближайшее время. Призываю всех, кто чем может (правками, замечаниями и тп),
> этому посодействовать.
> ***
> Я по ходу решил еще раз почитать документацию-руководство по Рефалу Плюс.
> У меня сложное отношение к нему, то есть он как-то всегда был сложен для
> меня. Как я сейчас понял, возможно это из-за специфического описания
> синтаксиса, содержащего понятия "тропы" и "хвосты". Они очень похожи, и я
> всегда их путал и не мог привыкнуть различать. Для этого было бы полезно
> видеть их семантическое различие, чем я не владею. А описание языка
> такового не предлагает. Остается только "зазубривать" формальные
> особенности, напрягая свою внутреннюю "нейросеть". Хорошо бы те, кто
> владеют семантическим пониманием хвостов и троп Рефала Плюс, если таковое
> существует, его как-то эксплицировали.
> ***
> В руководстве мне встретился интересный пример - задача "о цепочках" (из
> Вирта), раздел 1.10. Надо породить строку из трех знаков (a, b, c), чтобы в
> ней не было одинаковых смежных подстрок.
> Решение довольно мутное, тем более оно дважды использует $Iter, который я
> не люблю (вероятно, авторы, хотели именно его иллюстрировать этим
> примером). И мне захотелось переписать его в более "чистых" терминах. И вот
> что у меня получилось:
> --
> файл abc.ref
> //  - расширить строку eS влево sN знаками a,b,c,
> //не допуская повторов смежных подстрок
> EX {
>0 eS = eS;
>sN eS , 'abc' : e sX e , sX eS : eR : # vA vA e,  eR>;
>};
>
> 
> Это рефал-6, но думаю, можно по аналогии и на Плюсе написать (может даже и
> так пройдет).
> Функция EX откатная, при успехе выдает продолженную строку, иначе откат.
> Образец e sX e перебирает три варианта продолжения, образец vA vA e под
> отрицанием проверяет, что выражение не начинается с двух одинаковых
> непустых подстрок, дальше идет рекурсивный вызов, все через запятую
> прозрачно для откатов.
> Назвал функцию заглавными покороче, чтобы в интерактивной моде вызывать:
> d:\ref6\TEST>d:\ref6\rix.exe i+abc+*ask -S100 -T100 -H100
> #>ex 5
> 'acaba'
> #>ex 10
> 'bcacbacaba'
> #>ex 100
>
> 'cacbacabacbabcabacabcbabcacbacabacbabcabacabcacbabcabacbabcacbacabacbabcabacabcacbacabacbabcacbacaba'
> #>ex 1000
>
> 'acbabcacbacabacbabcbacbcabacbabcacbacabacbabcabacabcbabcabacbabcacbacabacbabcabacabcacbabcabacbabcacbacabacbabcabacabcbabcacbacabacbabcbacbcabacbabcabacabcacbabcabacbabcbacabacbabcabacabcacbabcabacbabcacbacabacbabcabacabcacbabcabacbabcbacabacbabcacbacabacbabcbacabacbcacbacabacbabcacbacabacbcacbabcabacabcacbabcabacbabcbacabacbabcabacabcacbabcabacbabcacbacabacbabcabacabcacbabcabacbabcbacabacbabcacbacabacb

Re: Сравнение веток Рефала

2019-02-25 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Сергей, там два $Iter-а: один во вспомогательной функции Unacceptable?
(распознает присутствие равных смежных подстрок), он действительно по
(половине) длины строк и соответствует моему образцу vA vA e, а другой -
внутри основной функции Extend?, он всего на 3 итерации и соответствует
моему клэшу: 'abc' : e sX e, т.е. перебор веток . Эта функция Extend? в
конце "предложения" рекурсивно себя вызывает. Но это не хвостовая рекурсия,
хоть и стоит в "конце хвоста" - поскольку она откатная, стоит через
запятую, и все, что перед ней, должно удерживаться в стеке (это, как
минимум, старое e.String и s.Digit). Один уровень стека на каждый очередной
символ. Поэтому глубина стека будет пропорциональна s.N - размеру
результирующей строки.
Да, наверно можно запрограммировать c $iter без стека, но тогда надо явно
выражать состояние "стека" обхода дерева решений, а это строка символов
s.Digit, фактически та же e.String. Кстати, это было бы интересно записать,
но это будет другой алгоритм.
Аркадий

PS. Вот. только что пришло письмо, кто-то (не понял кто) уже кажется сделал
это на Рефале-2.
Я как раз писал что-то подобное на Рефале-6, чуть позже напишу.

пн, 25 февр. 2019 г. в 17:45, Sergei M. Abramov abram_AT_botik.ru <
refal@botik.ru>:

> День добрый, всем!
>
> > Решение на Рефал Плюс из руководства тоже жадно до стека.
> > Интересно, какие там пределы?
>
> Я не очень понял, какой там стек...  Там явно $iter по переменной s.N
> напрашивается.
>
> Всего доброго,
>
> Сергей Абрамов
>
>


Re: Сравнение веток Рефала

2019-02-25 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Я не только дочитал, наконец, но и внес свои правки-дополнения (в раздел по
Рефал-6, и чуток по Рефал Плюс), поместив этот замечательный текст в
doc-файл, который можно взять по ссылке:

https://www.dropbox.com/s/eq4yv9g7atu59d7/CompareRefals.doc?dl=0

Я подумал, что хорошо бы моему примеру последовали и "держатели" других
диалектов.
Александр, поручаю Вам быть "хозяином" этого файла, можете забрать его и
выложить где-то от себя. Мои добавки, помеченные цветом и префиксом "АрК",
можете в своем стиле адоптировать.
Будет замечательно, если Вы сможете сделать из этого публикацию в ближайшее
время. Призываю всех, кто чем может (правками, замечаниями и тп), этому
посодействовать.
***
Я по ходу решил еще раз почитать документацию-руководство по Рефалу Плюс. У
меня сложное отношение к нему, то есть он как-то всегда был сложен для
меня. Как я сейчас понял, возможно это из-за специфического описания
синтаксиса, содержащего понятия "тропы" и "хвосты". Они очень похожи, и я
всегда их путал и не мог привыкнуть различать. Для этого было бы полезно
видеть их семантическое различие, чем я не владею. А описание языка
такового не предлагает. Остается только "зазубривать" формальные
особенности, напрягая свою внутреннюю "нейросеть". Хорошо бы те, кто
владеют семантическим пониманием хвостов и троп Рефала Плюс, если таковое
существует, его как-то эксплицировали.
***
В руководстве мне встретился интересный пример - задача "о цепочках" (из
Вирта), раздел 1.10. Надо породить строку из трех знаков (a, b, c), чтобы в
ней не было одинаковых смежных подстрок.
Решение довольно мутное, тем более оно дважды использует $Iter, который я
не люблю (вероятно, авторы, хотели именно его иллюстрировать этим
примером). И мне захотелось переписать его в более "чистых" терминах. И вот
что у меня получилось:
--
файл abc.ref
//  - расширить строку eS влево sN знаками a,b,c,
//не допуская повторов смежных подстрок
EX {
   0 eS = eS;
   sN eS , 'abc' : e sX e , sX eS : eR : # vA vA e,  eR>;
   };

Это рефал-6, но думаю, можно по аналогии и на Плюсе написать (может даже и
так пройдет).
Функция EX откатная, при успехе выдает продолженную строку, иначе откат.
Образец e sX e перебирает три варианта продолжения, образец vA vA e под
отрицанием проверяет, что выражение не начинается с двух одинаковых
непустых подстрок, дальше идет рекурсивный вызов, все через запятую
прозрачно для откатов.
Назвал функцию заглавными покороче, чтобы в интерактивной моде вызывать:
d:\ref6\TEST>d:\ref6\rix.exe i+abc+*ask -S100 -T100 -H100
#>ex 5
'acaba'
#>ex 10
'bcacbacaba'
#>ex 100
'cacbacabacbabcabacabcbabcacbacabacbabcabacabcacbabcabacbabcacbacabacbabcabacabcacbacabacbabcacbacaba'
#>ex 1000
'acbabcacbacabacbabcbacbcabacbabcacbacabacbabcabacabcbabcabacbabcacbacabacbabcabacabcacbabcabacbabcacbacabacbabcabacabcbabcacbacabacbabcbacbcabacbabcabacabcacbabcabacbabcbacabacbabcabacabcacbabcabacbabcacbacabacbabcabacabcacbabcabacbabcbacabacbabcacbacabacbabcbacabacbcacbacabacbabcacbacabacbcacbabcabacabcacbabcabacbabcbacabacbabcabacabcacbabcabacbabcacbacabacbabcabacabcacbabcabacbabcbacabacbabcacbacabacbabcbacbcabacbabcabacabcacbabcabacbabcbacabacbabcabacabcacbabcabacbabcacbacabacbabcabacabcacbabcabacbabcbacabacbabcacbacabacbabcbacabacbcacbacabacbabcacbacabacbcacbabcabacabcacbabcabacbabcbacabacbabcabacabcacbabcabacbabcacbacabacbabcabacabcacbabcabacbabcbacbcabacbabcabacabcacbabcabacbabcbacabacbabcabacabcacbabcabacbabcacbacabacbabcabacabcacbabcabacbabcbacabacbabcacbacabacbabcbacbcabacbabcabacabcacbabcabacbabcbacabacbabcabacabcacbabcabacbabcacbacabacbabcabacabcacbabcabacbabcbacabacbabcabacabcacbacabacbabcabacabcbabcacbacabacbabcabacabcacbabcabacbabcacbacabacbabcabacabcacbacabacbabcacbacaba'
#>ex 1
EVAL: *** SYSTEM: Reference counter overflow
The referenced object is: *EX
EVAL: Act Vf Fre Run [n]Step [n]Trc Evl Chg Kil New Inf M W D H cLr Quit>

Пришлось задать большой стек S и таблицу элементов Т (по 100 элементов,
по 16 и 8 байтов соответственно), и 1 ГБ (H Kb) общей памяти, иначе стеки
быстро переполнялись. Здесь на каждый следующий элемент строки вводится
уровень в стеке из-за возможности откатов. Но все равно на аргументе 1
сломалось - по переполнению счетчика ссылок на объект *EX (символ функции).
По-видимому, каждый уровень стека содержал несколько экземпляров ссылок, а
всего в реализации счетчик ссылок не может превысить 2^15.

Хороший тест получился. Показал некоторые пределы реализации.

Решение на Рефал Плюс из руководства тоже жадно до стека. Интересно, какие
там пределы?

На получение строки наибольшей длины (около 6500) ушло чуть меньше секунды.
По-видимому, на последней версии Рефала Плюс будет быстрее: либо из-за не
копирований eS и eR (благодаря "дыркам"), либо из-за более оптимального
отождествления vA vA e: уравнения 

Re: Re[4]: Немного статистики

2019-02-22 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Антон, спасибо,
я тоже решил на этом коде немного поупражняться в чтении и понимании
Рефала-Плюс, что дается мне нелегко. Вроде все разобрал, но при этом мне
показалось, что тут есть ошибка (в смысле, что результат не лучший). А
именно, что будет в результате

?
Я бы ожидал результат (VVAR), но тут  вроде получится (EVAR). Корректно,
конечно, но обобщение не лучшее (не самое тесное).
Или я что-то не понимаю в этом коде?
Или такого входа быть не может? Например, если комбинации e t e заранее
заменяются на v?
Аркадий



>
> *From:* Anton Orlov orlovan_AT_gmail.com 
> *Sent:* Friday, February 22, 2019 9:43 AM
> *To:* refal@botik.ru
> *Cc**:* Александр Гусев 
> *Subject:* Re: Re[4]: Немного статистики
>
>
>
> Александр,
>
>
>
> Я, пожалуй, просто вставлю сюда код :)
>
> Он не самодостаточен, но алгоритм из него читаем.
>
> */**
>
> * * MSG-Exprs (e.Format1) e.Format2*
>
> * * Return e.Format3 -- most specific generalizing of formats 1 and 2.*
>
> * */*
>
> *MSG_Exprs* {
>
>   ((*FAIL*)) *e*.Fe2 = *e*.Fe2;
>
>   (*e*.Fe1) (*FAIL*) = *e*.Fe1;
>
>   (*t*.Ft1 *e*.Fe1) *t*.Ft2 *e*.Fe2 \*?*
>
> */**
>
> * * IF both t.Ft1 and t.Ft2 are hard terms and aren't $const'ants then*
>
> * * split them out with MSG-Terms.*
>
> * */*
>
> {
>
>   *t*.Ft1 : \{ (*EVAR*); (*VVAR*); (*CONST* *e*); } \*!* *$fail*;
>
>   *t*.Ft2 : \{ (*EVAR*); (*VVAR*); (*CONST* *e*); } \*!* *$fail*;
>
>   <*MSG_Terms* *t*.Ft1 *t*.Ft2> <*MSG_Exprs* (*e*.Fe1) *e*.Fe2>;
>
> };
>
>   (*e*.Fe1 *t*.Ft1) *e*.Fe2 *t*.Ft2 \*?*
>
> */**
>
> * * IF both t.Ft1 and t.Ft2 are hard terms and aren't $const'ants then*
>
> * * split them out with MSG-Terms.*
>
> * */*
>
> {
>
>   *t*.Ft1 : \{ (*EVAR*); (*VVAR*); (*CONST* *e*); } \*!* *$fail*;
>
>   *t*.Ft2 : \{ (*EVAR*); (*VVAR*); (*CONST* *e*); } \*!* *$fail*;
>
>   <*MSG_Exprs* (*e*.Fe1) *e*.Fe2> <*MSG_Terms* *t*.Ft1 *t*.Ft2>;
>
> };
>
>   ((*CONST* *t*.name) *e*.Fe1) *e*.Fe2, {
>
> *e*.Fe2 : (*CONST* *t*.name) *e*.Rest = (*CONST* *t*.name) <*MSG_Exprs* 
> (*e*.Fe1) *e*.Rest>;
>
> <*MSG_Exprs* (<*Format_Exp* <*Lookup* &*Const* *t*.name>> *e*.Fe1) 
> *e*.Fe2>;
>
>   };
>
>   (*e*.Fe1 (*CONST* *t*.name)) *e*.Fe2, {
>
> *e*.Fe2 : *e*.Rest (*CONST* *t*.name) = <*MSG_Exprs* (*e*.Fe1) *e*.Rest> 
> (*CONST* *t*.name);
>
> <*MSG_Exprs* (*e*.Fe1 <*Format_Exp* <*Lookup* &*Const* *t*.name>>) 
> *e*.Fe2>;
>
>   };
>
>   (*e*.Fe1) (*CONST* *t*.name) *e*.Fe2 =
>
> <*MSG_Exprs* (*e*.Fe1) <*Format_Exp* <*Lookup* &*Const* *t*.name>> 
> *e*.Fe2>;
>
>   (*e*.Fe1) *e*.Fe2 (*CONST* *t*.name) =
>
> <*MSG_Exprs* (*e*.Fe1) *e*.Fe2 <*Format_Exp* <*Lookup* &*Const* 
> *t*.name>>>;
>
>   (*e*.Fe1) *e*.Fe2, {
>
> <*IsEmpty_Expr* *e*.Fe1>, <*IsEmpty_Expr* *e*.Fe2> = */*empty*/*;
>
> */* *
>
> * * If both e.Fe1 and e.Fe2 have non-(EVAR) terms then we can unify*
>
> * * them to (VVAR). Be VERY careful! We can meet &C, but it easy can be*
>
> * * that it points to empty expression.*
>
> * */*
>
> \*?*
>
> *e*.Fe1 : *e* *t*.Ft1 *e*, *t*.Ft1 : \{
>
>   (*VVAR*);
>
>   (*CONST* *t*.name), # <*IsEmpty_Const* *t*.name>;
>
> } \*!*
>
>   *e*.Fe2 : *e* *t*.Ft2 *e*, *t*.Ft2 : \{
>
> (*VVAR*);
>
> (*CONST* *t*.name), # <*IsEmpty_Const* *t*.name>;
>
>   } =
>
>   (*VVAR*);
>
> */**
>
> * * Else at least one of expressions has form of (EVAR)...(EVAR). So we*
>
> * * should return (EVAR).*
>
> * */*
>
> (*EVAR*);
>
>   };
>
> };
>
>
>
> *MSG_Terms* {
>
>   (*PAREN* *e*.Fe1) (*PAREN* *e*.Fe2) = (*PAREN* <*MSG_Exprs* (*e*.Fe1) 
> *e*.Fe2>);
>
>   *t*.Ft *t*.Ft = *t*.Ft;
>
>   *s* *s* = (*SVAR*);
>
>   (*SVAR*) *s* = (*SVAR*);
>
>   *s* (*SVAR*) = (*SVAR*);
>
>   (*SVAR*) (*SVAR*) = (*SVAR*);
>
>   (*REF* *e*) *s* = (*SVAR*);
>
>   *s* (*REF* *e*) = (*SVAR*);
>
>   (*REF* *e*) (*SVAR*) = (*SVAR*);
>
>   (*SVAR*) (*REF* *e*) = (*SVAR*);
>
>   *t* *t* = (*TVAR*);
>
> };
>
>
>
> Хотел бы просто дать ссылку на исходники, но, к сожалению, сайт с ними
> лежит (что с ним довольно регулярно случается, так как никто не замечает,
> когда он падает).
>
>
>
> Антон
>
>
>
>
>


Re: Re[4]: Немного статистики

2019-02-20 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Вопрос интересный, попытаюсь ответить за Антона как я планировал, если б
занялся погружением рефала-6 в ту инфраструктуру.
Первый вариант - да, все функции имеют общий формат
$func eX = eX;
Затем, возможны варианты, один из которых - что-то типа псевдокомментариев.
Интересен также вариант отображения после полусуперкомпилятора, который
форматы порождает.
Но более продвинутая схема - проводить анализ на уровне абстрактного
синтаксиса и повышать арность автоматически, и тогда это можно было б
сделать один раз на все входные диалекты. Собственно, в этом и была задумка
- чтобы писать разные сложные анализы и преобразования уже в
диалекто-независимой форме.
С уважением,
Аркадий Климов

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

ср, 20 февр. 2019 г. в 12:51, Александр Коновалов a.v.konovalov87_AT_mail.ru
:

> Добрый день, Антон!
>
> *«С исполнением разных диалектов на одной платформе основная проблема —
> не входной язык, а библиотека стандартных функций. Они везде разные, и все
> их поддержать — довольно много возни.»*
>
> А проблему отсутствия форматов функций в других диалектах (Рефал-5,
> Рефал-6) Вы как решили (или предполагали решать)? Считать все функции как
>
> $func eX = eX;
>
> и плевать на производительность? Или форматы задаются в псевдокомментариях?
>
>
>
> С уважением,
> Александр Коновалов
>
> *From:* Anton Orlov orlovan_AT_gmail.com 
> *Sent:* Thursday, February 14, 2019 9:49 PM
> *To:* refal@botik.ru
> *Cc:* Александр Гусев 
> *Subject:* Re: Re[4]: Немного статистики
>
>
>
>
>
>
>
> On Thu, Feb 14, 2019 at 7:27 AM Arkady Klimov arkady.klimov_AT_gmail.com <
> refal@botik.ru> wrote:
>
> Насколько я знаю, в каком-то законченно-оформленном виде такой информации
> сейчас нет.
>
>
>
> Сейчас у меня появилась мысль, и хочу всем апологетам того или иного
> диалекта, написать небольшой текст в свободной форме на 2-3-5 страниц с
> описанием особенностей их "любимых" версий языка и их реализаций - что было
> бы полезно знать потенциальным юзерам. Эти тексты (ссылки) можно было бы
> разместить на сайте refal.net на страницах, связанных с каждой
> версией-диалектом. В этой переписке по рефалу+ уже много информации
> появилось, осталось ее собрать и оформить. Наверно, это было бы полезно.
>
>
>
> А также неплохо бы единый бенчмарк составить. И какие-то сравнительные
> таблицы.
>
>
>
> А еще когда-то была установка на создание единого инструментария по
> реализации разных диалектов с единым промежуточным синтаксисом AST, с
> возможностью любой входной диалект на любую платформу положить. Насколько я
> понимаю, рефал+ свою часть пути в основном прошел и там это представление
> задокументировано. Хотел бы пройти свою часть для рефала-6, но на это
> конечно нужно время. Которого, увы, нет.
>
>
>
> Кстати, AST, используемый в Р+ (
> http://wiki.botik.ru/Refaldevel/AbstractImperativeLanguage), специально в
> какой-то момент правился, чтобы включить особенности Рефала-6 (но поскольку
> парсер из Рефала-6 так и не был приделан, то, возможно, ещё какие-то
> тонкости остались).
>
>
>
> С исполнением разных диалектов на одной платформе основная проблема -- не
> входной язык, а библиотека стандартных функций. Они везде разные, и все их
> поддержать -- довольно много возни.
>
>
>
> Антон
>
>
>
>
>
> Аркадий
>
>
>
> чт, 14 февр. 2019 г. в 09:59, Александр Гусев gusev_aleksandr_AT_mail.ru <
> refal@botik.ru>:
>
> Спасибо, Аркадий!
>
> А существует где-то краткая информация по сравнению веток рефала? Статья,
> может быть какая-то.
>
> А то есть рефал-2, рефапл-5, рефал-6 и рефал-плюс - это только те, что
> поименованы.
>
> У каждой версии свои сторонники и блюстители. Или всё-таки придётся в
> каждую вникать?
>
> Среда, 13 февраля 2019, 20:41 +03:00 от Arkady Klimov
> arkady.klimov_AT_gmail.com :
>
> Здравствуйте, Александр!
>
> Прошу прощения за некоторую задержку, пришлось немного повозиться, приводя
> в порядок версию дистрибуции. В принципе, есть все на сайте refal.net, но
> сильно старое, с тех пор довольно много было правок. Вот та страничка:
>
> http://refal.net/~arklimov/refal6/index.html
>
> Документацию (описание языка) смотрите там, в ней ничего нового.
>
> А дистрибутив пока у меня в дропбоксе возьмите:
>
> https://www.dropbox.com/s/gh4hdcagl0swltm/ref6.zip?dl=0
>
> Как и раньше, инструкция в help/readme.txt.
>
> Главное - распакуйте в папку ...ref6, пропишите ее в PATH и
> откорректируйте путь в ri.bat соответственно.
>
> Затем вызовите test/hello.bat.
>
> В ближайшее время надеюсь переправить его на сайт, а также обновлю архивы
> исходников там.
>
> Рефал-часть почти не изменилась с тех пор, а вот С-часть обновилась
> существенно.
>
> Спрашивайте, не стесняйтесь, если будут проблемы.
>
> С уважением,
>
> Аркадий Климов
>
>
>
>
>
>
>
>
>
>
>
> пт, 8 февр. 2019 г. в 23

Re: Потенциальная востребованность

2019-02-20 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Дмитрий, комплекс Ваших пожеланий к "вводному учебнику для начинающих" мне
не очень понятен. Не могли бы Вы привести пример существующего такого рода
учебника по какому-то из других распространенных языков, который можно было
бы рассматривать как образец для подражания.
Также хотелось бы услышать более предметную критику моего варианта:
http://refal.net/~arklimov/refal6/manual.htm
С уважением,
Аркадий Климов

вс, 17 февр. 2019 г. в 10:41, Dmitry Ponyatov dponyatov_AT_gmail.com <
refal@botik.ru>:

> Добрый день
>
>
>> Никто не знает как это на самом деле нужно сделать, но если иметь такую
>> цель, то можно сосредоточиться на её достижении. Момент сейчас
>> благоприятный, я бы сказал, очень благоприятный.
>>
>
> 1.
>
> Полноценный вводный учебник для начинающих, не справочник по языку, и не
> поток сознания
> (мои впечатления от всей сейчаствующей литературы по языку)
> Написанный человеческим языком, что-то типа сборника cookbook решения
> очень коротких практических задач.
> Вторая часть -- реализация Рефала с нуля на ходовом императивном языке, Си
> или лучше всего JavaScript (не нужно ничего устанавливать)
>
> т.е. рассматривать Рефал не как готовую реализацию (которую еще фиг
> найдешь или установишь),
> а как _технологию программирования на других mainstream языках_,
> причем добавляемую элементарными кусочками, а не как отдельную
> рантайм-библиотеку
>
> 2.
>
> online среду разработки (хотя бы интерпретатор с простейшим редактором)
> а-ля https://www.tutorialspoint.com/
> (на своем хостинге, или на готовой площадке)
>
> как вариант -- полностью браузерная реализация на JavaScript которую
> пользователь может дернуть с GitHub Pages
> не требующая backend-части
>
>
> --
> С уважением, Понятов Дмитрий, Icbcom, инженер IoT/embedded, тел. +7 917 10
> 10 818
>


Re: Сравнение веток Рефала

2019-02-14 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Леонид, а на какой предмет мы хотим тут сравнивать? Просто как пишется,
визуально? Или по эффективности выполнения? Если второе, то не слишком ли
мелкий пример? Надо бы, как сейчас говорят, нагруженное
приложение-вычисление предлагать. Чтобы и времени и памяти надо было много
(а не просто линейно от размера входа, как в данном примере). При том,
чтобы программа, конечно была короткой, на страницу. Есть такой пример? В
численке это, например, умножение матриц, или решение СЛАУ (N^3 против
N^2). А у нас?
Аркадий

чт, 14 февр. 2019 г. в 12:46, Eisymont Leonid verger-lk_AT_yandex.ru <
refal@botik.ru>:

> Переменные есть, числа можно взять целые и вещественные. Можно упростить,
> на вход поступают только правильные арифметические выражения. Программа
> должна быть короткой, на страницу. У меня такая программа на рефале-2 была,
> постараюсь переслать.
>
> 14.02.2019, 12:40, "Александр Коновалов a.v.konovalov87_AT_mail.ru" <
> refal@botik.ru>:
>
> Добрый день, Леонид!
>
> Спасибо за хорошую идею. Постараюсь в выходные написать простейший
> подобный компилятор.
>
> Стоит уточнить задачу: есть ли переменные, какие знаки операций
> поддерживаются, на сколько подробными должны быть сообщения об ошибках,
> должен ли компилятор восстанавливаться…
>
>
>
> С уважением,
> Александр Коновалов
>
>
>
> *From:* Eisymont Leonid verger-lk_AT_yandex.ru 
> *Sent:* Thursday, February 14, 2019 12:33 PM
> *To:* refal@botik.ru
> *Subject:* Re: Сравнение веток Рефала
>
>
>
> Будет действительно весело. А делать надо, дождались. Рекомендую взять
> какой - нибудь пример и на нем это сравнивать. Иначе будет пустой
> болтовней. А вот какой пример - пока не соображу, м.б. перевод
> арифметических выражений в линеаризованную польскую запись, например, в
> триады? Но этот перевод должен начинаться с лексического анализа со
> спариванием скобок. Обычно перевод в польскую запись хорошо воспринимался
> на лекциях по рефалу. Кстати, рефал-2 рассказывался обычно за
> десять-пятнадцать минут, даже чиновникам и генералам. Сколько потребуется
> времени на рассказ  о "коллапсирующих джунглях" подумать страшно. Вот она
> жизнь и заскорузлая практика.
>
> Л.Эйсымонт
>
>
>
> 14.02.2019, 11:57, "Александр Коновалов a.v.konovalov87_AT_mail.ru" <
> refal@botik.ru>:
>
> Добрый день, Александр!
>
> К сожалению, обзора разных диалектов Рефала я нигде не встречал. Диалекты
> и реализации Рефала не совсем корректно называть «ветками» или «версиями»,
> они разрабатывались независимо, общей кодовой базы, на сколько я знаю,
> не имеют, имеют разный синтаксис, построены на разных принципах
> и идеологиях (особенно, Рефал Плюс).
>
> Сам я его могу написать, но, наверное, не сегодня. И, если напишу, то он
> будет неизбежно субъективным. Но обсудить будет весело.
>
> В выходные тогда напишу, если никто не напишет раньше меня.
>
>
>
> С уважением,
> Александр Коновалов
>
>
>
> *From:* Александр Гусев gusev_aleksandr_AT_mail.ru 
> *Sent:* Thursday, February 14, 2019 9:59 AM
> *To:* refal@botik.ru
> *Subject:* Re[4]: Немного статистики
>
>
>
> Спасибо, Аркадий!
>
> А существует где-то краткая информация по сравнению веток рефала? Статья,
> может быть какая-то.
>
> А то есть рефал-2, рефапл-5, рефал-6 и рефал-плюс - это только те, что
> поименованы.
>
> У каждой версии свои сторонники и блюстители. Или всё-таки придётся в
> каждую вникать?
>
>
> Среда, 13 февраля 2019, 20:41 +03:00 от Arkady Klimov
> arkady.klimov_AT_gmail.com :
>
> Здравствуйте, Александр!
>
> Прошу прощения за некоторую задержку, пришлось немного повозиться, приводя
> в порядок версию дистрибуции. В принципе, есть все на сайте refal.net, но
> сильно старое, с тех пор довольно много было правок. Вот та страничка:
>
> http://refal.net/~arklimov/refal6/index.html
>
> Документацию (описание языка) смотрите там, в ней ничего нового.
>
> А дистрибутив пока у меня в дропбоксе возьмите:
>
> https://www.dropbox.com/s/gh4hdcagl0swltm/ref6.zip?dl=0
>
> Как и раньше, инструкция в help/readme.txt.
>
> Главное - распакуйте в папку ...ref6, пропишите ее в PATH и
> откорректируйте путь в ri.bat соответственно.
>
> Затем вызовите test/hello.bat.
>
> В ближайшее время надеюсь переправить его на сайт, а также обновлю архивы
> исходников там.
>
> Рефал-часть почти не изменилась с тех пор, а вот С-часть обновилась
> существенно.
>
> Спрашивайте, не стесняйтесь, если будут проблемы.
>
> С уважением,
>
> Аркадий Климов
>
>
>
>
>
>
>
>
>
>
>
> пт, 8 февр. 2019 г. в 23:43, Александр Гусев gusev_aleksandr_AT_mail.ru <
> refal@botik.ru>:
>
> Аркадий, Спасибо за ответ!
>
> Да, я читал переписку, не до самых глубин, конечно.
>
> Пока прошу актуальную ссылку на Рефал-6 - почитать и хоть что-то
> попробовать, если возможно. Вроде Hello, world на трёх языках.
>
> То, что я имел ввиду о музыке, это тоже формульные вычисления, конечно.
>
> Возможно, но наверно уже на "символьном уровне", до которого еще надо
> входной сигнал поднять.
>
>
> С уважением,
> Александр Гусев
> gusev_aleksa...@mail.ru
> 

Re: Сравнение веток Рефала

2019-02-14 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Я не успел вовремя заметить появление новой ветки, поэтому теперь копирую
сюда свой ответ Александру Гусеву (с небольшими стилистическими правками).
---

А существует где-то краткая информация по сравнению веток рефала? Статья,
может быть какая-то.

Насколько я знаю, в каком-то законченно-оформленном виде такой информации
сейчас нет.

Сейчас у меня появилась мысль, и хочу всем апологетам того или иного
диалекта ее предложить: написать небольшой текст в свободной форме на 2-3-5
страниц с описанием особенностей их "любимых" версий языка и их реализаций
- что было бы полезно знать потенциальным пользователям. Эти тексты
(ссылки) можно было бы разместить на сайте refal.net на страницах,
связанных с каждой версией-диалектом. В этой переписке по Рефалу+ уже много
информации появилось, осталось ее собрать и оформить. Наверно, это было бы
полезно.

А также неплохо бы единый бенчмарк составить. И какие-то сравнительные
таблицы.

А еще когда-то была установка на создание единого инструментария по
реализации разных диалектов с единым промежуточным синтаксисом AST, с
возможностью любой входной диалект на любую платформу положить. Насколько я
понимаю, Рефал+ свою часть пути в основном прошел и там это представление
задокументировано. Я хотел бы пройти свою часть для Рефала-6, но на это
конечно нужно время. Которого, увы, нет.

Аркадий

чт, 14 февр. 2019 г. в 12:46, Eisymont Leonid verger-lk_AT_yandex.ru <
refal@botik.ru>:

> Переменные есть, числа можно взять целые и вещественные. Можно упростить,
> на вход поступают только правильные арифметические выражения. Программа
> должна быть короткой, на страницу. У меня такая программа на рефале-2 была,
> постараюсь переслать.
>
> 14.02.2019, 12:40, "Александр Коновалов a.v.konovalov87_AT_mail.ru" <
> refal@botik.ru>:
>
> Добрый день, Леонид!
>
> Спасибо за хорошую идею. Постараюсь в выходные написать простейший
> подобный компилятор.
>
> Стоит уточнить задачу: есть ли переменные, какие знаки операций
> поддерживаются, на сколько подробными должны быть сообщения об ошибках,
> должен ли компилятор восстанавливаться…
>
>
>
> С уважением,
> Александр Коновалов
>
>
>
> *From:* Eisymont Leonid verger-lk_AT_yandex.ru 
> *Sent:* Thursday, February 14, 2019 12:33 PM
> *To:* refal@botik.ru
> *Subject:* Re: Сравнение веток Рефала
>
>
>
> Будет действительно весело. А делать надо, дождались. Рекомендую взять
> какой - нибудь пример и на нем это сравнивать. Иначе будет пустой
> болтовней. А вот какой пример - пока не соображу, м.б. перевод
> арифметических выражений в линеаризованную польскую запись, например, в
> триады? Но этот перевод должен начинаться с лексического анализа со
> спариванием скобок. Обычно перевод в польскую запись хорошо воспринимался
> на лекциях по рефалу. Кстати, рефал-2 рассказывался обычно за
> десять-пятнадцать минут, даже чиновникам и генералам. Сколько потребуется
> времени на рассказ  о "коллапсирующих джунглях" подумать страшно. Вот она
> жизнь и заскорузлая практика.
>
> Л.Эйсымонт
>
>
>
> 14.02.2019, 11:57, "Александр Коновалов a.v.konovalov87_AT_mail.ru" <
> refal@botik.ru>:
>
> Добрый день, Александр!
>
> К сожалению, обзора разных диалектов Рефала я нигде не встречал. Диалекты
> и реализации Рефала не совсем корректно называть «ветками» или «версиями»,
> они разрабатывались независимо, общей кодовой базы, на сколько я знаю,
> не имеют, имеют разный синтаксис, построены на разных принципах
> и идеологиях (особенно, Рефал Плюс).
>
> Сам я его могу написать, но, наверное, не сегодня. И, если напишу, то он
> будет неизбежно субъективным. Но обсудить будет весело.
>
> В выходные тогда напишу, если никто не напишет раньше меня.
>
>
>
> С уважением,
> Александр Коновалов
>
>
>
> *From:* Александр Гусев gusev_aleksandr_AT_mail.ru 
> *Sent:* Thursday, February 14, 2019 9:59 AM
> *To:* refal@botik.ru
> *Subject:* Re[4]: Немного статистики
>
>
>
> Спасибо, Аркадий!
>
> А существует где-то краткая информация по сравнению веток рефала? Статья,
> может быть какая-то.
>
> А то есть рефал-2, рефапл-5, рефал-6 и рефал-плюс - это только те, что
> поименованы.
>
> У каждой версии свои сторонники и блюстители. Или всё-таки придётся в
> каждую вникать?
>
>
> Среда, 13 февраля 2019, 20:41 +03:00 от Arkady Klimov
> arkady.klimov_AT_gmail.com :
>
> Здравствуйте, Александр!
>
> Прошу прощения за некоторую задержку, пришлось немного повозиться, приводя
> в порядок версию дистрибуции. В принципе, есть все на сайте refal.net, но
> сильно старое, с тех пор довольно много было правок. Вот та страничка:
>
> http://refal.net/~arklimov/refal6/index.html
>
> Документацию (описание языка) смотрите там, в ней ничего нового.
>
> А дистрибутив пока у меня в дропбоксе возьмите:
>
> https://www.dropbox.com/s/gh4hdcagl0swltm/ref6.zip?dl=0
>
> Как и раньше, инструкция в help/readme.txt.
>
> Главное - распакуйте в папку ...ref6, пропишите ее в PATH и
> откорректируйте путь в ri.bat соответственно.
>

Re: Re[4]: Немного статистики

2019-02-14 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Насколько я знаю, в каком-то законченно-оформленном виде такой информации
сейчас нет.

Сейчас у меня появилась мысль, и хочу всем апологетам того или иного
диалекта, написать небольшой текст в свободной форме на 2-3-5 страниц с
описанием особенностей их "любимых" версий языка и их реализаций - что было
бы полезно знать потенциальным юзерам. Эти тексты (ссылки) можно было бы
разместить на сайте refal.net на страницах, связанных с каждой
версией-диалектом. В этой переписке по рефалу+ уже много информации
появилось, осталось ее собрать и оформить. Наверно, это было бы полезно.

А также неплохо бы единый бенчмарк составить. И какие-то сравнительные
таблицы.

А еще когда-то была установка на создание единого инструментария по
реализации разных диалектов с единым промежуточным синтаксисом AST, с
возможностью любой входной диалект на любую платформу положить. Насколько я
понимаю, рефал+ свою часть пути в основном прошел и там это представление
задокументировано. Хотел бы пройти свою часть для рефала-6, но на это
конечно нужно время. Которого, увы, нет.

Аркадий

чт, 14 февр. 2019 г. в 09:59, Александр Гусев gusev_aleksandr_AT_mail.ru <
refal@botik.ru>:

> Спасибо, Аркадий!
>
> А существует где-то краткая информация по сравнению веток рефала? Статья,
> может быть какая-то.
>
> А то есть рефал-2, рефапл-5, рефал-6 и рефал-плюс - это только те, что
> поименованы.
>
> У каждой версии свои сторонники и блюстители. Или всё-таки придётся в
> каждую вникать?
>
>
> Среда, 13 февраля 2019, 20:41 +03:00 от Arkady Klimov
> arkady.klimov_AT_gmail.com :
>
> Здравствуйте, Александр!
> Прошу прощения за некоторую задержку, пришлось немного повозиться, приводя
> в порядок версию дистрибуции. В принципе, есть все на сайте refal.net, но
> сильно старое, с тех пор довольно много было правок. Вот та страничка:
> http://refal.net/~arklimov/refal6/index.html
> Документацию (описание языка) смотрите там, в ней ничего нового.
> А дистрибутив пока у меня в дропбоксе возьмите:
> https://www.dropbox.com/s/gh4hdcagl0swltm/ref6.zip?dl=0
> Как и раньше, инструкция в help/readme.txt.
> Главное - распакуйте в папку ...ref6, пропишите ее в PATH и
> откорректируйте путь в ri.bat соответственно.
> Затем вызовите test/hello.bat.
> В ближайшее время надеюсь переправить его на сайт, а также обновлю архивы
> исходников там.
> Рефал-часть почти не изменилась с тех пор, а вот С-часть обновилась
> существенно.
> Спрашивайте, не стесняйтесь, если будут проблемы.
> С уважением,
> Аркадий Климов
>
>
>
>
>
> пт, 8 февр. 2019 г. в 23:43, Александр Гусев gusev_aleksandr_AT_mail.ru <
> refal@botik.ru 
> >:
>
> Аркадий, Спасибо за ответ!
>
> Да, я читал переписку, не до самых глубин, конечно.
>
> Пока прошу актуальную ссылку на Рефал-6 - почитать и хоть что-то
> попробовать, если возможно. Вроде Hello, world на трёх языках.
>
> То, что я имел ввиду о музыке, это тоже формульные вычисления, конечно.
>
> Возможно, но наверно уже на "символьном уровне", до которого еще надо
> входной сигнал поднять.
>
>
> С уважением,
> Александр Гусев
> gusev_aleksa...@mail.ru
> 
>
>
>
> --
> ___
> *С уважением, *
> *Аркадий Климов,*
> *с.н.с. ИППМ РАН,*
> *+7(499)135-32-95*
> *+7(916)072-81-48*
>
>
>
> С уважением,
> Александр Гусев
> gusev_aleksa...@mail.ru
> 
>
>
>
> --
> ___
> *С уважением, *
> *Аркадий Климов,*
> *с.н.с. ИППМ РАН,*
> *+7(499)135-32-95*
> *+7(916)072-81-48*
>
>
>
> С уважением,
> Александр Гусев
> gusev_aleksa...@mail.ru
>


-- 
___
*С уважением, *
*Аркадий Климов,*
*с.н.с. ИППМ РАН,*
*+7(499)135-32-95*
*+7(916)072-81-48*


Re: Re[2]: Немного статистики

2019-02-13 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Здравствуйте, Александр!
Прошу прощения за некоторую задержку, пришлось немного повозиться, приводя
в порядок версию дистрибуции. В принципе, есть все на сайте refal.net, но
сильно старое, с тех пор довольно много было правок. Вот та страничка:
http://refal.net/~arklimov/refal6/index.html
Документацию (описание языка) смотрите там, в ней ничего нового.
А дистрибутив пока у меня в дропбоксе возьмите:
https://www.dropbox.com/s/gh4hdcagl0swltm/ref6.zip?dl=0
Как и раньше, инструкция в help/readme.txt.
Главное - распакуйте в папку ...ref6, пропишите ее в PATH и откорректируйте
путь в ri.bat соответственно.
Затем вызовите test/hello.bat.
В ближайшее время надеюсь переправить его на сайт, а также обновлю архивы
исходников там.
Рефал-часть почти не изменилась с тех пор, а вот С-часть обновилась
существенно.
Спрашивайте, не стесняйтесь, если будут проблемы.
С уважением,
Аркадий Климов





пт, 8 февр. 2019 г. в 23:43, Александр Гусев gusev_aleksandr_AT_mail.ru <
refal@botik.ru>:

> Аркадий, Спасибо за ответ!
>
> Да, я читал переписку, не до самых глубин, конечно.
>
> Пока прошу актуальную ссылку на Рефал-6 - почитать и хоть что-то
> попробовать, если возможно. Вроде Hello, world на трёх языках.
>
> То, что я имел ввиду о музыке, это тоже формульные вычисления, конечно.
>
> Возможно, но наверно уже на "символьном уровне", до которого еще надо
> входной сигнал поднять.
>
>
> С уважением,
> Александр Гусев
> gusev_aleksa...@mail.ru
> 
>
>
>
> --
> ___
> *С уважением, *
> *Аркадий Климов,*
> *с.н.с. ИППМ РАН,*
> *+7(499)135-32-95*
> *+7(916)072-81-48*
>
>
>
> С уважением,
> Александр Гусев
> gusev_aleksa...@mail.ru
>


-- 
___
*С уважением, *
*Аркадий Климов,*
*с.н.с. ИППМ РАН,*
*+7(499)135-32-95*
*+7(916)072-81-48*


Re: Синтаксический анализ в Рефале

2019-02-13 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
То, о чем написал Сергей действительно полезно на практике. У меня написана
некая система работы с полиномами, и там обрабатываются неравенства вида
P(x,y,...) < K, где K - целое число, а P не содержит свободного члена. В
списке таких неравенств часто надо находить неравенства с общей левой
частью (подобные). Конечно, полиномы должны иметь канонизированное
представление. Тогда, джунгли очень даже полезны будут при поиске пар
подобных неравенств посредством образца
   e1 (tA e) e2 (tA e) e3
Ну и память экономится, если таких пар много.

А насчет сборки мусора - так Антон и написал же, что ее нет, а есть
счетчики ссылок. А нужна она только чтобы зависшие ящики подчищать. Но мне
кажется, что это особо и не нужно - всегда можно руками вовремя обнулить.
А если и вводить, то надо и "слабые" ссылки вводить.

Другое дело, что возможно счетчики ссылок будут мешать распараллеливанию
"над общей памятью". Даже если функции чистые и формально независимые, при
параллельном выполнении придется корректировки ссылок делать защищенно,
скажем atomic. Вопрос к залу: это не очень тормозить будет? Не потеряется
ли эффект от распараллеливания? Надо б проверить.
Аркадий К.


вт, 12 февр. 2019 г. в 17:22, Eisymont Leonid verger-lk_AT_yandex.ru <
refal@botik.ru>:

> Так это массивное представление оправдало себя или нет? В сухом остатке
> ведь - сборка мусора на ровном месте(раньше не было), какие-то переполнения
> стеков. А в программах копирования списков не так уж и много, откуда этот
> миф? Ради чего?
> Наукообразия? Кто в больших программах про эти "джунгли" думать будет?
> Имеются несколько недоработанных реализаций? Какая лучше всех, чем
> пользоваться можно? Бенчмарки были или нет? М.б. просто рефал-2 взять и все
> дела. Восстановить распараллеливание там хотя бы через машинные операции и
> все. Прирост скорости будет в сотни раз на современных системах, а не
> проценты или разы. Как быть?
> Л.Эйсымонт
>
>
>
>
> 12.02.2019, 15:53, "Sergei M. Abramov abram_AT_botik.ru" :
>
> День добрый, всем!
>
> Антон, спасибо за детали. Думаю снято много обвинений в сторону
> массивного представления ;-)
>
> Коллеги, и это не все фенечки еще описаны. Как мелкий пример: как мне
> помнится (Антон поправит), были еще реализованы "коллапсирующие
> джунгли" или "табулирование сравнения термов-скобок".
>
> Суть простая:
>
> 0. Терм-скобка это поинтер на первое звено p и длина L.
>
> 1. У сравнения двух термов-скобок на равенство есть масса быстрых слуюаев:
> 1.0 Если L1 == 0 && L2==0, то термы равны
> 1.1 Если L1 /= L2, то термы не равны,
> 1.2 Если p1==p2 && L1==L2, то термы равны
>
> 2. Наконец, если нам пришлось делать длинное сравнение и в конце
> выяснилось, что термы таки равны, то мы делаем "коллапсирующие
> джунгли" -- делаем присваивание: p2 = p1, L2=L1 (второе лишнее, но
> пусть будет). Тут и память освободилась и следующий раз сравнение на
> равенство пройдет быстрее ;-)
>
> О! Ран-тайм рефала плюс полировался с любовью ;-)
>
> Всего доброго,
>
> Сергей Абрамов
>
>
>
> Anton Orlov orlovan_AT_gmail.com.
>
> Вы писали 11 февраля 2019 г., 21:39:24:
>
>
>  Добрый день!
>
>
>
>  On Mon, Feb 11, 2019 at 12:50 PM Arkady Klimov
>  arkady.klimov_AT_gmail.com  wrote:
>
>
>
>  Может ли кто ответить на такие вопросы по реализации Рефал+ на C++
>  (в статье они не обсуждается - не тот уровень абстракции):
>
>
>
>
>  1.Какая организована работа с памятью? Какой менеджер памяти
>  используется? Свой или каждый новый чанк через malloc запрашивается?
>
>
>
>
>
>  Сделан свой аллокатор по алгоритму близнецов, описанному Кнутом
>  (https://en.wikipedia.org/wiki/Buddy_memory_allocation). Это делал
> Андрей Слепухин.
>
>  2.Используются ли счетчики ссылок? Или полная сборка мусора время от
> времени? Какой сборщик мусора?
>
>
>
>
>
>  Используются счётчики ссылок. Полной сборки мусора нет, поэтому
>  память может течь (например, возможны циклы через ящики). Сборка
>  мусора была в планах, но так и не была реализована (на практике
> надобность в ней не ощущалась).
>
>  3.Есть ли версия конкатенации inplace (когда память для выражения
>  взята "с запасом")? Андрей уже ответил частично.
>
>
>
>
>
>  В алгоритме близнецов все выделяемые куски имеют размер 2^n.
>  Выражение помещается посередине нового куска, а справа и слева
>  естественным образом получается запас по месту. При конкатенации,
>  если этой дырки рядом с одним из выражений достаточно, то копируется
>  только одно из выражений, а новая память не выделяется.
>
>
>
>
>  Например, если выражение длины N строится дописыванием в
>  конец/начало по одному терму, то это требует O(log N) аллокаций
>  (амортизированная стоимость O(1)).
>
>
>
>
>  Антон
>
>
>
>
>  P.S. Помимо списков и массивов есть ещё потенциально интересные
>  структуры данных для представления выражений. Например, rope
>  (https://en.wikipedia.org/wiki/Rope_(data_structure)) и Finger tree
>  (https://en.wikipedia.org/wiki/Finger_tree), но серьёзно для
>  рефальского применения их никто не исследовал, насколько я знаю.
>
>

Re: Синтаксический анализ в Рефале

2019-02-11 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Может ли кто ответить на такие вопросы по реализации Рефал+ на C++ (в
статье они не обсуждается - не тот уровень абстракции):

1.Какая организована работа с памятью? Какой менеджер памяти используется?
Свой или каждый новый чанк через malloc запрашивается?
2.Используются ли счетчики ссылок? Или полная сборка мусора время от
времени? Какой сборщик мусора?
3.Есть ли версия конкатенации inplace (когда память для выражения взята "с
запасом")? Андрей уже ответил частично.

Буду благодарен за разъяснения.
Аркадий

пн, 11 февр. 2019 г. в 11:12, Sergei M. Abramov abram_AT_botik.ru <
refal@botik.ru>:

> > Замысловатый ответ ни о чем.  Так какой результат, если есть статьи,
> > то ссылки где?.
>
> http://www.botik.ru/PSI/RCMS/publications/publications.html
>
> А далее Гуугл "site:www.botik.ru/PSI/RCMS/publications Рефал Плюс"
>
> И там сразу находим:
>
> http://www.botik.ru/PSI/RCMS/publications/publ-texts/04-Abramov-Novyj-podkhod-p-373.pdf
>
> С уважением,
>
> Абрамов С.М.
> ab...@botik.ru
> мобильный: +7(903)2928308
>
>

-- 
___
*С уважением, *
*Аркадий Климов,*
*с.н.с. ИППМ РАН,*
*+7(499)135-32-95*
*+7(916)072-81-48*


Re: Немного статистики

2019-02-08 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Вы читали недавнюю переписку под заголовком "Синтаксический анализ в
рефале"? Там была некоторая информация о некоторых реализация. Например, в
моих письмах от 1 февраля.

пт, 8 февр. 2019 г. в 18:35, Александр Гусев gusev_aleksandr_AT_mail.ru <
refal@botik.ru>:

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

>
> 2. Вижу, что возникают вопросы по производительности. Что значит тут
> "медленно" и "быстро"?
>
Применяемые в этой области алгоритмы таковы, что за счет улучшения
алгоритма можно получать гораздо больший прирост, чем за счет повышения
скорости самого рефала. Поэтому я считаю, что скорость эта тут не критична.
Тем более что за последние 25 лет прогресс в железе привел к тому, что та
же самая реализация (например, Рефал-6) сегодня работает примерно в 1000
раз быстрее чем тогда. Правда уже лет 10 как этот фактор больше не
работает, поскольку мы так и не научились использовать многоядерность
(параллелизм)

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

>
> 4. Существуют ли разные реализации, с которыми можно ознакомиться? У меня
> есть скачанный с сайта строчный компилятор для Windows. Возможно, это очень
> архаично, я не знаю пока.
>
Я могу говорить только за Рефал-6.

>
> 5. Я должен принять решение, насколько это может быть полезным, и, очень
> надеюсь, ели это имеет практический смысл, заняться серверным
> интерпретатором языка. Возможно, кому-то эта тема может показаться
> привлекательной и мы найдём общий интерес в этом.
>
Я не понял, что значит "серверный интерпретатор языка"? Нельзя ли чуть
поподробнее. Будет ли там актуальным порождение рефал-кода в динамике?

>
> Приложил свою фотографию для порядку, какую нашёл. Ей лет пять, правда, но
> музыкальная обработка - это то, что тоже может быть посильно Рефалу, как я
> предполагаю.
>
Возможно, но наверно уже на "символьном уровне", до которого еще надо
входной сигнал поднять.

>
> С уважением,
> Александр Гусев
> gusev_aleksa...@mail.ru
>


-- 
___
*С уважением, *
*Аркадий Климов,*
*с.н.с. ИППМ РАН,*
*+7(499)135-32-95*
*+7(916)072-81-48*


Re: Плохой суперкомпилятор Рефала как неплохой оптимизатор

2019-02-06 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
вт, 5 февр. 2019 г. в 18:00, Александр Коновалов a.v.konovalov87_AT_mail.ru
:

>
> И ещё вопрос: почему суперкомпилятор Николая Кондратьева называется
> «полусуперкомпилятором»?
>
> Наверно, потому же, почему вы свой называете "плохим".
Просто, чтобы не претендовать на полноценность.
Аркадий

>
>
> *From:* Александр Коновалов a.v.konovalov87_AT_mail.ru 
> *Sent:* Thursday, January 31, 2019 6:22 PM
> *To:* refal@botik.ru
> *Subject:* RE: Плохой суперкомпилятор Рефала как неплохой оптимизатор
>
>
>
> Добрый вечер, Аркадий!
>
> *«Что интересно, такой проект существовал (может вы уже слышали о нем?),
> его инициировал Николай Кондратьев на рубеже 80/90-х, и я немного лепты
> внёс.»*
>
> Об этом суперкомпиляторе Вы когда-то писали, но деталей (почему он
> полусуперкомпилятор, что он делает и зачем) Вы не уточняли.
>
> *«И делал он примерно то, о чём вы написали.»*
>
> Всё уже украдено придумано до нас.
>
> *«Всё работало, но довольно тяжеловесно: приходилось результат
> прикомпилировать к основному интерпретатору ri.exe „на правах“ встроенных
> функций (на практике имело смысл полусуперкомпилировать лишь основные
> внутренние время-ёмкие функции).»*
>
> Точно также работает компилятор Конышева, который преобразует граф,
> порождённый SCP4, в программу на Си.
>
> *«И давало для типовых задач ускорение в 4-5 раз. Главным образом за счёт
> а) форматов и б) компиляции в прямой код.»*
>
> Про форматы оценить не могу, но компиляция в код на Си даёт примерно
> двухкратное ускорение. У меня Рефал-5λ может компилировать в RASL и C++.
>
> *«В принципе исходники все у меня лежат, только комментариев там маловато,
> а отчёты, к сожалению, были утеряны.»*
>
> Отчёты были бы интереснее, поскольку реконструировать идеи из исходников
> весьма трудоёмко. Жалко, что они утеряны.
>
> Значит, идеи работы нужно извлекать путём изучения исходников
> и экспериментируя с самой программой. Индустриальная археология
> ,
> да.
>
> *«Там в рамках отображения возникла одна очень интересная задачка — выбор
> эффективной разметки параметров и результатов по принципу actual — ghost.
> Для списка актуальный — это когда его можно перестраивать, ghost — только
> „видимость“ — когда можно только читать и если вставить надо, то надо
> скопировать. Был придуман алгоритм, но реализован не был.»*
>
> Очень ценная оптимизация для Рефала-6 с подвешенными скобками. Но я
> изначально предполагал оптимизацию для массивного представления, где все
> параметры неизменяемые.
>
> *«Если будет интересно, готов всё предоставить, что есть (с согласия
> Коли).»*
>
> Можно с этим не торопиться. Вряд ли руки дойдут изучать, к сожалению.
> Последнее время руки ни до чего не доходят.
>
> *«Но вам наверно, будет интересно все самим сделать заново и в рамках
> своей же системы, да? Тоже нормально.»*
>
> Может, когда-нибудь и сделаю.
>
>
>
> Спасибо,
> Александр Коновалов
>
>
>
> *From:* Arkady Klimov arkady.klimov_AT_gmail.com 
> *Sent:* Wednesday, January 30, 2019 4:07 PM
> *To:* refal@botik.ru
> *Subject:* Re: Плохой суперкомпилятор Рефала как неплохой оптимизатор
>
>
>
> Вы правы, Александр. Что интересно, такой проект существовал (может вы уже
> слышали о нем?), его инициировал Николай Кондратьев на рубеже 80/90-х, и я
> немного лепты внес. Собственно, оттуда и пошел Рефал-6.
>
> Но кроме собственно Рефала-6, который и сейчас активно используется (по
> меньшей мере мной), был еще и проект т.наз. полусуперкомпилятора. И делал
> он примерно то, о чем вы написали. Прежде всего это форматы  - местность и
> ко-местность. Ну и немного безусловной прогонки.
>
> Мне выпало поучаствовать в виде выходного отображения: из остаточного
> графа программы в язык С. Все работало, но довольно тяжеловесно:
> приходилось результат прикомпилировать к основному интерпретатору ri.exe
> "на правах" встроенных функций (на практике имело смысл
> полусуперкомпилировать лишь основные внутренние время-емкие функции). И
> давало для типовых задач ускорение в 4-5 раз. Главным образом за счет а)
> форматов и б) компиляции в прямой код.
>
> В принципе исходники все у меня лежат, только комментариев там маловато, а
> отчеты, к сожалению, были утеряны.
>
> Там в рамках отображения возникла одна очень интересная задачка - выбор
> эффективной разметки параметров и результатов по принципу actual - ghost.
> Для списка актуальный - это когда его можно перестраивать, ghost - только
> "видимость" - когда можно только читать и если вставить надо, то надо
> скопировать. Был придуман алгоритм, но реализован не был. (Пришлось
> заниматься другим). Ручные эксперименты обещали ускорение еще раза в 2.
>
> Если будет интересно, готов все предоставить, что есть (с согласия Коли).
> Но вам наверно, будет интересно все самим сделать заново и в рамках своей
> же системы, да? Тоже нормально.
>
> С уважением,
>
> Аркадий Климов
>
>
>
> ср, 30 янв. 2019 г. в 00:12, Alexander Konovalov aka Маздайщик
> mazdaywik_AT_yandex.ru :
>
> 

Fwd: Синтаксический анализ в Рефале

2019-02-02 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Пересылаю в группу письмо Игоря. Он пишет, что писал в группу, но
безрезультатно.
Да, я оттуда тоже это письмо не получал. Может у Игоря что-то не так с
доступом?
Аркадий

-- Forwarded message -
From: Щенков Игорь 
Date: сб, 2 февр. 2019 г. в 12:54
Subject: Re: Синтаксический анализ в Рефале
To: 


Алик, я написал письмо на refal@botik.ru, но оно почему-то до сих пор не
пришло. Поэтому шлю тебе. Ниже - текст письма.


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

Да, я переносил сравнительно большую программу с Рефала-2 на Рефал-6 (если
не ошибаюсь, порядка 5000 строк с малым количеством комментариев). Причина
выбора Рефала-6 - хотелось сделать все быстро, при этом немаловажную роль
играла совместимость библиотеки функций. Рефал-6 подходил для этого лучше,
чем Рефал+, который был единственной альтернативой. Кроме того, у Рефала+
довольно сложный язык, в то время как для Рефала-6 удалось сделать
сравнительно простую программу-перекодировщик. Библиотека функций Рефала-2
была вполне удобной и адекватной, эта же библитека с некоторыми
расширениями была повторена в Рефале-6. Для адаптации библиотеки Рефала-6
под библиотеку Рефала-2 использовались как средства системы Рефала-6 для
переименования функций, так и небольшой программный код (буквально пара
десятков строк).

Были проблемы со спецификаторами переменных при обратном отождествлении.
Пришлось вручную вводить дополнительные функции, обеспечивающие обратный
перебор термов в обусловленных подвыражениях.

Например, для текста на Рефале-2

st-locate-brac-
  r  sa (e(/leaf//brac-r//brac-l/r)u ev) (ew) =+
  

на Рефале-6 пришлось написать следующее:

ST-LOCATE-BRAC-
 sA (e1) (eW) =  : eU (eV) =
;

FIRST-SOME
 {
  e1 (s3 e4),
{
 s3 : {*LEAF; *BRAC-R; *BRAC-L;};
  : 'R' s;
} = ;
  e;
 };

Здесь нужно также учесть, что функция TYPE - это переформатированная
функция Рефала-6 под формат Рефала-2.

Переносимая система основана на многоуровневом языке, когда результат
построений (вычислений) также может рассматриваться в общем случае как
текст на исходном языке, т.е. вычисления являются многоуровневыми. Поэтому
лексеринг и парсеринг выполняются совместно. Однако это не повлияло на
принципиальную сложность самого интерпретатора языка, который, во-первых,
является рекурсивным, а, во-вторых, имеет, я бы сказал, элементы
компиляции, поскольку лексемы сразу переводятся в адекватный и удобный
программный код, также могут вычисляться сколь угодно большие подвыражения.
При этом все, что не является синтаксически правильной лексемой, считается
ошибкой. "Диагностические" предложения стоят после основных, поэтому на
читабельность текста интерпретатора это влияет мало.

По моему опыту Рефал-6 концептуально является весьма удобным, выразительным
и лаконичным языком семейства Рефалов. Это утверждение также основано на
утверждении Турчина, что его Рефал-5 ПРИНЦИПИАЛЬНО уже улучшить нельзя
(если я правильно понял). А дальнейшие шаги в отношении Рефала - это только
суперкомпиляция.

  ИЩ




..
Александр правильно подметил, что в новых рефалах нет спецификаторов,
которые были в рефале-2. Мне кажется, они тоже подталкивают на не очень
хороший стиль, когда вместо отдельно описанного лексера, распознавание
лексем разбросано по всему парсеру. В этом смысле интересен опыт и мнение
Игоря Щенкова - кажется единственного пользователя, которые реально
переходил с Рефала-2 на Рефал-6 с большим комплексом программ.
Раньше был существен вопрос об эффективности лексера - отсюда и
спецификаторы.
.
-- 
Щенков Игорь


-- 
___
*С уважением, *
*Аркадий Климов,*
*с.н.с. ИППМ РАН,*
*+7(499)135-32-95*
*+7(916)072-81-48*


Re: Синтаксический анализ в Рефале

2019-02-01 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Машинные операции - мы сейчас обычно используем термин "встроенные функции"
- обычные более менее, распараллеливания нет. В явском варианте, наверно,
нетрудно сделать что-то через RPC (remote procedure call)
Есть ящики-вектора (модифицируемые), хранящие плотно упакованные выражения
по 4 байта на символ (в отличие от 12 байтов в двусторонних списках).
Есть работа с неограниченными целыми числами как с битовыми строками
(модифицируемыми, любой длины, но кратной 16). Такие строки хранятся
массивно-плотно, а не списками двусвязными. Аналогично с символьными
строками.
Можно вывести (в текстовом виде) и ввести обратно любое выражение, в том
числе с символами-ссылками.
Можно динамически ковыряться в коде функций (на этом отладчик-трассировщик
построен, достаточно удобный), по ходу породить и скомпилировать код.
По соотношению скорости с рефалом-2 сказать не могу, можно Игоря спросить.
Он систему Сантра переносил, с Р2 на Р6.
К сожалению, в ИПМ с ним не продлили договор (статей за ним не было).
Сейчас он безработный пенсионер (с осени). Было бы неплохо для него
какое-то оплачиваемое занятие найти. Я об этом думаю.
Думаю, что протестировано уже неплохо.  Память внутренняя до 2 ГБ (это 160М
звеньев), почему не до 4 ГБ сейчас затрудняюсь сказать. Предел памяти можно
заказывать при вызове.
Аркадий

пт, 1 февр. 2019 г. в 17:50, Eisymont Leonid verger-lk_AT_yandex.ru <
refal@botik.ru>:

> Спасибо. Для СБИС мы моделировали на уровне временных диаграмм выполнения
> команд, это уже проходили много раз, последнее - в НИР Вектор (заказчик -
> Квант) и НИР Беркут(заказчик Министерство)  в НИЦЭВТ-е.
> Нормально работает. Самое главное, что это не кропотливое программирование
> на Си, быстрота создания и изменения в процессе исследования.
> Аркадий, ты не сказал про библиотеки машинных операций в новых
> реализациях. Распараллеливания, как понимаю нет?
> Еще меня давно занимает вопрос, ну а по скорости работы как соотносится с
> Рефалом-2 на одних и тех же платформах?
> Ну и конечно, насколько хорошо оттестировано, кто сопровождает реализацию.
> Игорь Щенков активно работает, какие у него успехи?
> Л.Эйсымонт
>
> 01.02.2019, 17:25, "Arkady Klimov arkady.klimov_AT_gmail.com" <
> refal@botik.ru>:
>
> Да наверно можно пользоваться любым из упомянутых, хотя лично я, конечно
> же, привержен рефалу-6, как его соавтор в какой-то мере. Документацию
> (подробное описание входного языка с примерами) можно посмотреть на сайте
> refal.net:
> http://refal.net/~arklimov/refal6/manual.htm
> Там есть и дистрибутив, но если начинать пользоваться, то лучше, наверно,
> брать у меня.
> К сожалению, все никак не дойдут руки на github выложить.
> Готовый вариант есть для Windows-32, если нужен для других ОС, надо будет
> компилировать и собирать с исходников на С.
> Любителям Java могу рекомендовать версию Refal-Java. Входной язык там
> практически такой же, добавлены межмодульные связи в стиле Java. Скорость
> выше в 2-3 раза. И "машинные операции" легко добавлять. Но есть проблемы:
> например, стек может переполниться.
> И по большому счету им еще никто не пользовался.
> А у варианта на С под виндами есть пока два полноценных пользователя: я и
> И.Щенков. Еще в прошлом году ошибки, обнаруженные Игорем, исправлял.
> По применению к моделированию СБИС не понятно, что тут может быть - не
> логику же потактовую  на рефале крутить! Еще понимаю, если компилятор с
> языка специфического делать, да?
> Аркадий
>
> пт, 1 февр. 2019 г. в 16:32, Eisymont Leonid verger-lk_AT_yandex.ru <
> refal@botik.ru>:
>
> Аркадий, интересно было бы посмотреть, чем сейчас реально можно
> пользоваться.
> Есть ли опыт использования новых Рефалов в больших проектах типа тех, где
> использовался ранее Рефал-2. Я совершенно серьезно говорил о том, что
> вероятность применения Рефала в работах по созданию новых СБИС на этапах
> моделирования и отработки архитектуры или микроархитектуры , а также ПО
> достаточно высока. Я сейчас в Модуле и Кванте, возможны очень крупные
> совместные работы, вижу, что необходимость в этом назревает.
> В общем, здравствуйте опять 70-80-е годы.
> Л.Эйсымонт
> PS - Рефал-2 у нас сохранился с очень богатой библиотекой, в нем даже
> доделали некоторые примитивы MPI через машинные операции, есть еще
> экспериментальная реализация Александра Фролова с динамическим
> распараллеливанием конкретизаций (это все НИЦЭВТ уже был начало 2000-х). На
> этой реализации мы хорошо "руку набили".
>
> 01.02.2019, 16:14, "Arkady Klimov arkady.klimov_AT_gmail.com" <
> refal@botik.ru>:
>
> Интересно услышать, что практикующие (практиковавшие в прошлом)
> рефал-программисты считают сложным в новых версиях языка (5-6-плюс-7).
> Вложенные блоки? Откаты? Условия?
> Сам я считаю лишними только разные экзотический элементы вроде
> отсечений-заборов, отрицаний, $iter, двойного двоеточия.
> Откаты-блоки-условия считаю полезными.
> Откатность явная или неявная? Можно спорить, это также зависит от
> семантики "=".
> Форматы  функций? Сам не использую, оценить не могу. В рефале-6 их 

Re: Синтаксический анализ в Рефале

2019-02-01 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Добрый вечер, Александр!

пт, 1 февр. 2019 г. в 18:56, Александр Коновалов a.v.konovalov87_AT_mail.ru
:

> Добрый вечер, Аркадий!
>
> *«Интересно услышать, что практикующие (практиковавшие в прошлом)
> рефал-программисты считают сложным в новых версиях языка (5-6-плюс-7).»*
>
> Интересный вопрос. Я в некотором смысле программировал только на Рефале-5,
> начинал с базисного подмножества, потом добавился вызов функций
> по указателю, потом вложенные функции, потом условия (в порядке появления
> выразительных конструкций в моих компиляторах Рефала — Модульном и 5λ).
> Поэтому оценивать некоторые вещи я могу только спекулятивно.
> С динамическими ящиками и другими мутабельными структурами данных
> не работал, копилкой и статическими ящиками не пользуюсь (хоть они есть) —
> предпочитаю функциональный стиль.
>
> На мой взгляд, сложность возникает, когда условия/откаты/неуспехи начинают
> сочетаться с побочным эффектом. Например, вот эта функция вычисляет все
> непустые подстроки заданной строки:
>
> AllSubstrings {
>   e.String,  (e.Middle)> : /* пусто */
> , e.Middle : t.3
> , e.End : /* пусто */
> = ;
> }
>
> Например, вызов
>
> 
>
> вычислит
>
> ('a') ('ab') ('abc') ('abcd') ('abcde') ('abcdef')
> ('b') ('bc') ('bcd') ('bcde') ('bcdef')
> ('c') ('cd') ('cde') ('cdef')
> ('d') ('de') ('def')
> ('e') ('ef')
> ('f')
>
> И это только Рефал-5. На Рефале-6 или Рефале-Плюс с неуспехами можно
> запутать ещё больше (не конкретный пример, а вообще).
>
Конечно, побочные эффекты - это всегда усложнение, затруднение понимания,
только не языка, а кода. Просто не надо так программировать. А тут
понимание логики еще зависит от знания, что функция Br выдает пустоту.
Мой любимый пример на сложные переборы через условия - функция Select,
которая из списка строк формирует одну строку, которая содержит ровно один
символ из каждой входной строки, причем так, чтобы в ней не было повторов.
Если не удается, то откат.

Select {
(en) e.Sets, e.Sets : {
= en;
(e1 sa e2) e.Sets1, en: # e3 sa e4 , ;
}
};

Это рефал-6, здесь точки не обязательны (если индекс однобуквенный), #
перед образцом - отрицание, блоки всегда откатные (откат подавляется
проходом через "="). Кстати, индексы в e1,e2,e3,e4 тут можно опустить.
Обращение: .
Например:  
==> ('fedcba')
Выполняется за один "шаг".
Кто продрался, тому дальше никакие навороты не страшны.
Кстати, в отличие от вашего стиля, у меня активно используется
горизонтальное измерение - для движения вдоль путей, через запятую.
Вертикальное измерение я стараюсь использовать (пока в экран помещаюсь)
только для альтернатив. В этом смысле рефал - существенно двумерный язык, в
отличие от традиционных C, Java, где горизонтальное измерение используется
в лучшем случае для арифметических выражений да списков параметров.
А вам, вижу, пришлось вставить пустую строку, чтобы перейти как бы в
"вертикальную моду" (а-ля ТеХ).

Поэтому в идеале нужна разметка функций как чистых vs
недетерминированных/с побочным
> эффектом — последние запрещать в тех контекстах, где возможен откат. Но это
> моё частное мнение.
>
> *«Сам я считаю лишними только разные экзотический элементы вроде
> отсечений-заборов, отрицаний, $iter, двойного двоеточия.»*
>
> Тут надо правильно понимать контекст. Заборы-отсечения и отрицания
> появились в Рефале-4, который замкнут относительно операции прогонки.
> Оттуда они перенеслись в Рефал Плюс и Рефал-6. В Рефале для пользователя,
> они, наверное, не нужны (хотя Абрамов и Романенко могут со мной поспорить),
> а во внутреннем языке какого-нибудь ядрёного оптимизатора они полезны.
>
> А квадроточие за что? В Рефале Плюс оно играет важную роль — вводит
> любимые Абрамовым льезон-переменные для выходного формата вызова функции.
> Его можно заменить обычным двоеточием, но это снизит быстродействие
> и надёжность программ. Квадроточие в Рефале-6 играет меньшую роль
> и полезно, разве что, с точки зрения стиля: если программист записал R ::
> P, то он имеет ввиду, что данный клэш выполняется всегда (не является
> условием, проверкой).
>
> *«Форматы  функций? Сам не использую, оценить не могу. В рефале-6 их нет.
> Но для более эффективного интерфейса с **C** наверно полезны.»*
>
> В Рефале Плюс они нужны, ибо используется массивное представление
> с дорогой конкатенацией. Без них вместо естественного вызова  Z> придётся писать .
>
> Но форматы функций это не только артефакт массивного представления,
> но и полезная идиома. Я её подробно описал здесь:
>
> https://bmstu-iu9.github.io/refal-5-lambda/A-formats-and-types.html
>
> На мой взгляд, форматы функций полезно писать в комментариях к entry-функциям
> (не больше и не меньше). И неплохо бы разработать верификаторы таких
> комментариев-форматов (моя давняя мечта).
>
Со всем сказанным выше согласен.

> *«Анонимные функции не считаю полезными, на мой взгляд они даже вредны —
> толкают на плохой стиль (потакают экономить на придумывании имён и понятий,
> тогда как хорошие имена и понятия облегчают читабельность и дал

Re: Синтаксический анализ в Рефале

2019-02-01 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Да наверно можно пользоваться любым из упомянутых, хотя лично я, конечно
же, привержен рефалу-6, как его соавтор в какой-то мере. Документацию
(подробное описание входного языка с примерами) можно посмотреть на сайте
refal.net:
http://refal.net/~arklimov/refal6/manual.htm
Там есть и дистрибутив, но если начинать пользоваться, то лучше, наверно,
брать у меня.
К сожалению, все никак не дойдут руки на github выложить.
Готовый вариант есть для Windows-32, если нужен для других ОС, надо будет
компилировать и собирать с исходников на С.
Любителям Java могу рекомендовать версию Refal-Java. Входной язык там
практически такой же, добавлены межмодульные связи в стиле Java. Скорость
выше в 2-3 раза. И "машинные операции" легко добавлять. Но есть проблемы:
например, стек может переполниться.
И по большому счету им еще никто не пользовался.
А у варианта на С под виндами есть пока два полноценных пользователя: я и
И.Щенков. Еще в прошлом году ошибки, обнаруженные Игорем, исправлял.
По применению к моделированию СБИС не понятно, что тут может быть - не
логику же потактовую  на рефале крутить! Еще понимаю, если компилятор с
языка специфического делать, да?
Аркадий

пт, 1 февр. 2019 г. в 16:32, Eisymont Leonid verger-lk_AT_yandex.ru <
refal@botik.ru>:

> Аркадий, интересно было бы посмотреть, чем сейчас реально можно
> пользоваться.
> Есть ли опыт использования новых Рефалов в больших проектах типа тех, где
> использовался ранее Рефал-2. Я совершенно серьезно говорил о том, что
> вероятность применения Рефала в работах по созданию новых СБИС на этапах
> моделирования и отработки архитектуры или микроархитектуры , а также ПО
> достаточно высока. Я сейчас в Модуле и Кванте, возможны очень крупные
> совместные работы, вижу, что необходимость в этом назревает.
> В общем, здравствуйте опять 70-80-е годы.
> Л.Эйсымонт
> PS - Рефал-2 у нас сохранился с очень богатой библиотекой, в нем даже
> доделали некоторые примитивы MPI через машинные операции, есть еще
> экспериментальная реализация Александра Фролова с динамическим
> распараллеливанием конкретизаций (это все НИЦЭВТ уже был начало 2000-х). На
> этой реализации мы хорошо "руку набили".
>
> 01.02.2019, 16:14, "Arkady Klimov arkady.klimov_AT_gmail.com" <
> refal@botik.ru>:
>
> Интересно услышать, что практикующие (практиковавшие в прошлом)
> рефал-программисты считают сложным в новых версиях языка (5-6-плюс-7).
> Вложенные блоки? Откаты? Условия?
> Сам я считаю лишними только разные экзотический элементы вроде
> отсечений-заборов, отрицаний, $iter, двойного двоеточия.
> Откаты-блоки-условия считаю полезными.
> Откатность явная или неявная? Можно спорить, это также зависит от
> семантики "=".
> Форматы  функций? Сам не использую, оценить не могу. В рефале-6 их нет. Но
> для более эффективного интерфейса с С наверно полезны.
> Анонимные функции не считаю полезными, на мой взгляд они даже вредны -
> толкают на плохой стиль (потакают экономить на придумывании имен и понятий,
> тогда как хорошие имена и понятия облегчают читабельность и дальнейшее
> сопровождение). Понимаю, что есть и другие мнения.
>
> Александр правильно подметил, что в новых рефалах нет спецификаторов,
> которые были в рефале-2. Мне кажется, они тоже подталкивают на не очень
> хороший стиль, когда вместо отдельно описанного лексера, распознавание
> лексем разбросано по всему парсеру. В этом смысле интересен опыт и мнение
> Игоря Щенкова - кажется единственного пользователя, которые реально
> переходил с Рефала-2 на Рефал-6 с большим комплексом программ.
> Раньше был существен вопрос об эффективности лексера - отсюда и
> спецификаторы. Теперь он столь остро не стоит. (А в случае большой нужды
> можно применить полусуперкомпиляцию и отображение в С).
>
> Насчет простоты - рефал-6 тоже не громоздок.
> Интерпретирующая реализация - около 10 тыс. строк на С и компилятор - 1.5
> тыс строк на рефале.
> В варианте Refal-Java: рантайм - 4.5 тыс. строк на Java, компилятор - 2.5
> тыс строк на рефале.
>
> С уважением,
> Аркадий Климов.
>
> чт, 31 янв. 2019 г. в 23:55, Eisymont Leonid verger-lk_AT_yandex.ru <
> refal@botik.ru>:
>
> У меня в письме главным другое было...
>
> 31.01.2019, 22:00, "Александр Коновалов a.v.konovalov87_AT_mail.ru" <
> refal@botik.ru>:
>
> *«Балансировка скобок одновременно шла с лексическим анализом. Прохода два
> было.»*
>
> Поэтому я употребил слово *«концептуально»*. Потому что можно проводить
> синтаксический анализ, не выделяя явно скобки. В Рефале-05 я так и сделал
> (ссылка в предыдущем письме).
>
> На Рефале вообще скобки можно сильно по-разному обрабатывать. Особенно,
> в компиляторах Рефала.
>
> Можно лексический анализ делать одновременно с синтаксическим — иметь
> функцию NextToken, которая возвращает очередной токен программы, и её
> вызывать в тот момент, когда требуется следующий токен. Можно вообще
> смешать лексический и синтаксический анализ — строить синтаксическое дерево
> сразу из потока символов.
>
> *«Последующие версии Рефала мне явно не нравятся, сложные.»*
>
> Упомянутый м

Re: Синтаксический анализ в Рефале

2019-02-01 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Интересно услышать, что практикующие (практиковавшие в прошлом)
рефал-программисты считают сложным в новых версиях языка (5-6-плюс-7).
Вложенные блоки? Откаты? Условия?
Сам я считаю лишними только разные экзотический элементы вроде
отсечений-заборов, отрицаний, $iter, двойного двоеточия.
Откаты-блоки-условия считаю полезными.
Откатность явная или неявная? Можно спорить, это также зависит от семантики
"=".
Форматы  функций? Сам не использую, оценить не могу. В рефале-6 их нет. Но
для более эффективного интерфейса с С наверно полезны.
Анонимные функции не считаю полезными, на мой взгляд они даже вредны -
толкают на плохой стиль (потакают экономить на придумывании имен и понятий,
тогда как хорошие имена и понятия облегчают читабельность и дальнейшее
сопровождение). Понимаю, что есть и другие мнения.

Александр правильно подметил, что в новых рефалах нет спецификаторов,
которые были в рефале-2. Мне кажется, они тоже подталкивают на не очень
хороший стиль, когда вместо отдельно описанного лексера, распознавание
лексем разбросано по всему парсеру. В этом смысле интересен опыт и мнение
Игоря Щенкова - кажется единственного пользователя, которые реально
переходил с Рефала-2 на Рефал-6 с большим комплексом программ.
Раньше был существен вопрос об эффективности лексера - отсюда и
спецификаторы. Теперь он столь остро не стоит. (А в случае большой нужды
можно применить полусуперкомпиляцию и отображение в С).

Насчет простоты - рефал-6 тоже не громоздок.
Интерпретирующая реализация - около 10 тыс. строк на С и компилятор - 1.5
тыс строк на рефале.
В варианте Refal-Java: рантайм - 4.5 тыс. строк на Java, компилятор - 2.5
тыс строк на рефале.

С уважением,
Аркадий Климов.

чт, 31 янв. 2019 г. в 23:55, Eisymont Leonid verger-lk_AT_yandex.ru <
refal@botik.ru>:

> У меня в письме главным другое было...
>
> 31.01.2019, 22:00, "Александр Коновалов a.v.konovalov87_AT_mail.ru" <
> refal@botik.ru>:
>
> *«Балансировка скобок одновременно шла с лексическим анализом. Прохода два
> было.»*
>
> Поэтому я употребил слово *«концептуально»*. Потому что можно проводить
> синтаксический анализ, не выделяя явно скобки. В Рефале-05 я так и сделал
> (ссылка в предыдущем письме).
>
> На Рефале вообще скобки можно сильно по-разному обрабатывать. Особенно,
> в компиляторах Рефала.
>
> Можно лексический анализ делать одновременно с синтаксическим — иметь
> функцию NextToken, которая возвращает очередной токен программы, и её
> вызывать в тот момент, когда требуется следующий токен. Можно вообще
> смешать лексический и синтаксический анализ — строить синтаксическое дерево
> сразу из потока символов.
>
> *«Последующие версии Рефала мне явно не нравятся, сложные.»*
>
> Упомянутый мной Рефал-05 семантически проще Рефала-2:
> https://github.com/Mazdaywik/Refal-05/
>
> Но, впрочем, я этот диалект промышленным не считаю. Это был эксперимент
> по написанию минималистичного компилятора Рефала.
>
> А Рефал-5λ действительно громоздок и сложен, тут согласен.
>
> *«Программы компиляторов были огромные и сложные по реализуемым алгоритмам
> и целевой архитектуре, там было не до витиеватости средств Рефала.»*
>
> Можно витиеватыми средствами и не пользоваться.
>
> На Рефале-2 удобно писать лексические анализаторы благодаря тому, что язык
> поддерживает спецификации переменных. Другие Рефалы возни требуют больше.
>
>
>
> С уважением,
> Александр Коновалов
>
>
>
> *From:* Eisymont Leonid verger-lk_AT_yandex.ru [mailto:refal@botik.ru]
> *Sent:* Thursday, January 31, 2019 9:06 PM
> *To:* refal@botik.ru
> *Subject:* Re: Синтаксический анализ в Рефале
>
>
>
> Балансировка скобок одновременно шла с лексическим анализом. Прохода два
> было.
>
> А вот действительно не для каждого языка это можно было применить,
> неприятным был язык Си, там другое применяли.
>
> А вставка скобок была удобна и далее в процессе кодогенерации.
>
> У меня такое впечатление, что сейчас это придется все вспоминать, как в
> 70-е - 90-е года, в этот 20-летний период. Потом было использование лет
> пять в НИР Беркут, это уже середина первой декады 2000-х.  Сейчас причина -
> необходимость быстрой разработки новых микропроцессорных СБИС и их ПО,
> особенно в России. Это уже связано с обеспечением национальной
> безопасности, доигрались.
>
> Явно потребуется быстродействующая реализация Рефала с глубоким
> распараллеливанием выполнения программ. Я бы даже ориентировался просто на
> Рефал-2 с небольшими инженерными расширениями и богатому набору машинных
> операций. Собственно, к тому, куда развилась наша реализация с Колей
> Мансуровым.
>
> Последующие версии Рефала мне явно не нравятся, сложные. Опираюсь на опыт
> разработки компиляторов на Рефале около 30 лет. Программы компиляторов были
> огромные и сложные по реализуемым алгоритмам и целевой архитектуре, там
> было не до витиеватости средств Рефала.
>
> Л.Эйсымонт
>
>
>
> 31.01.2019, 20:25, "Александр Коновалов a.v.konovalov87_AT_mail.ru" <
> refal@botik.ru>:
>
> Добрый вечер, Леонид!
>
> Вообще-то, я писал про суперкомпиляцию… Но и про компил

Re: визуализация исходного кода и структур данных

2019-01-30 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Хм, возможно Вам будет интересен вот этот проект

https://blockly-demo.appspot.com/static/demos/code/index.html?lang=en#znbt8h


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

ср, 30 янв. 2019 г. в 16:56, Dmitry Ponyatov dponyatov_AT_gmail.com <
refal@botik.ru>:

> Добрый день
>
> Заранее извините за возможный оффтопик, спрошу по теме не относящейся
> напрямую к РЕФАЛу
>
> Кто-нибудь знает хоть какую-то библиотеку визуализации _нечисловых_ данных
> для JavaScript (фронтенд, в браузере)?
>
> Никак не могу найти средств отображения структурных данных, характерных
> для представления исходного кода:
> функции, переменные с областями видимости, иерарические диаграммы, потоки
> данных, графы вызов,
> в том числе отображение состояния структур данных в динамике типа вот
> такого:
>
> https://bcaptain.files.wordpress.com/2013/06/ddd.png?w=625
>
> По работе занимаюсь реинжинирингом исходного кода прошивок для
> микроконтроллерных устройств,
> так и не смог найти адекватный инструмент для отображения карты объектов
> кода на Си,
> чтобы можно было рисовать что-то типа карт в виде направленных графов.
>
> Кое-как обхожусь GraphViz (входной формат удобен для копипасты имен
> функций/переменных с минимум дополнительного ручного ввода),
> но задумка более масштабная: парсить исходники на произвольных языках
> (диалекты Си/С++ и файлы сборки Makefile итп)
> в объектно-графовую БД и иметь возможность гонять по этой БД структурные
> запросы
> (тоже придется реализовать через унификацию, для хранилища ничего готового
> из СУБД тоже не нашлось).
>
> Соответственно вопрос: а как сделать хотя бы визуализацию для вручную
> введенных структур?
>
> Возможно есть какая-то библиотека расширения для D3.js которая не
> нагуглилась.
> UML и подобная БД-ориентированная ересь не интересует, нужна хорошая
> кастомизация для специфичной области embedded software
> (конечные автоматы, представление исходного кода, атрибутные грамматики и
> т.п.)
>
> --
> С уважением, Понятов Дмитрий, Icbcom, инженер IoT/embedded, тел. +7 917 10
> 10 818
>
>

-- 
___
*С уважением, *
*Аркадий Климов,*
*с.н.с. ИППМ РАН,*
*+7(499)135-32-95*
*+7(916)072-81-48*


Re: Плохой суперкомпилятор Рефала как неплохой оптимизатор

2019-01-30 Пенетрантность Arkady Klimov arkady . klimov_AT_gmail . com
Вы правы, Александр. Что интересно, такой проект существовал (может вы уже
слышали о нем?), его инициировал Николай Кондратьев на рубеже 80/90-х, и я
немного лепты внес. Собственно, оттуда и пошел Рефал-6.
Но кроме собственно Рефала-6, который и сейчас активно используется (по
меньшей мере мной), был еще и проект т.наз. полусуперкомпилятора. И делал
он примерно то, о чем вы написали. Прежде всего это форматы  - местность и
ко-местность. Ну и немного безусловной прогонки.
Мне выпало поучаствовать в виде выходного отображения: из остаточного графа
программы в язык С. Все работало, но довольно тяжеловесно: приходилось
результат прикомпилировать к основному интерпретатору ri.exe "на правах"
встроенных функций (на практике имело смысл полусуперкомпилировать лишь
основные внутренние время-емкие функции). И давало для типовых задач
ускорение в 4-5 раз. Главным образом за счет а) форматов и б) компиляции в
прямой код.
В принципе исходники все у меня лежат, только комментариев там маловато, а
отчеты, к сожалению, были утеряны.
Там в рамках отображения возникла одна очень интересная задачка - выбор
эффективной разметки параметров и результатов по принципу actual - ghost.
Для списка актуальный - это когда его можно перестраивать, ghost - только
"видимость" - когда можно только читать и если вставить надо, то надо
скопировать. Был придуман алгоритм, но реализован не был. (Пришлось
заниматься другим). Ручные эксперименты обещали ускорение еще раза в 2.
Если будет интересно, готов все предоставить, что есть (с согласия Коли).
Но вам наверно, будет интересно все самим сделать заново и в рамках своей
же системы, да? Тоже нормально.
С уважением,
Аркадий Климов

ср, 30 янв. 2019 г. в 00:12, Alexander Konovalov aka Маздайщик
mazdaywik_AT_yandex.ru :

> *(Похоже, что моё письмо опять дошло не всем. Дублирую с другого почтового
> ящика)*
>
> Добрый вечер всем!
>
> Пишу, чтобы проверить рассылку, а также, чтобы поделиться некоторым
> соображением.
>
> Соображение такое: «плохой» суперкомпилятор Рефала может использоваться
> для оптимизации программ, в частности, для повышения местности функций.
>
> Разворачиваю мысль. Для Рефала придумано (и реализовано) несколько
> способов представления в памяти объектных выражений: двусвязные списки,
> двусвязные списки с подвешенными скобками, односвязные кольцевые списки,
> массивы. Можно спекулятивно придумать ещё несколько вариантов, но мы этого
> делать не будем.
>
> Каждое представление имеет свои преимущества и недостатки. Общий
> недостаток у всех — пагубное влияние на стиль программирования. Если
> не учитывать свойства реализации (стоимость копирования или конкатенации),
> то программа будет медленнее работать (иногда существенно медленнее). Если
> учитывать — программа отходит от ясного декларативного стиля.
>
> Наиболее эффективное представление — массивное с дешёвым копированием,
> но дорогой конкатенацией. И из-за дорогой конкатенации приходится либо все
> e-переменные в аргументах функции заворачивать в скобки, или явным
> образом описывать формат функций, как в Рефале Плюс.
>
>
>
> Собственно, к чему я веду. При суперкомпиляции местность функций
> повышается — местность функции в остаточной программе равна числу
> параметров в соответствующей компоненте факторизации. Можно написать
> «плохой» суперкомпилятор, который даёт остаточную программу, близкую
> к исходной, работает быстро (рано свистит) и использовать его как
> дополнительный оптимизирующий проход. В результате мы автоматически получим
> остаточную программу повышенной местности, даже если при написании
> программы о её местности мы не заботились (т.е. не заворачивали
> искусственно e-переменные в скобки и не описывали форматы функций в явном
> виде).
>
> Если этот «плохой» суперкомпилятор будет делать анализ выходного формата
> функции, как это делает SCP4, то ещё лучше — будет повышать ещё
> и коместность.
>
> Кроме того, такой «плохой» суперкомпилятор сможет делать несложные
> оптимизации вроде встраивания функций, распространения констант, обрезки
> некоторых недостижимых ветвей и т.д.
>
>
>
> Т.е. нужно писать компилятор Рефала со встроенным «плохим»
> суперкомпилятором как оптимизирующим проходом. Приемлемую степень
> «плохизны» (или «худобы», от слова «хуже»), мне кажется, нужно определять
> экспериментально. Чтобы работал быстро, не сильно раздувал остаточную
> программу и при этом хорошо повышал местность (и коместность, если
> дополнить его анализом выходного формата).
>
>
>
> С уважением,
> Александр Коновалов
>
> P.S. Не пишу в metacomputation...@googlegroups.com, потому что (а)
> подписчики пересекаются и не хочу лишний раз спамить, (б) письмо больше про
> Рефал, чем про метавычисления.
>