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

2019-02-26 Пенетрантность Anton Orlov orlovan_AT_gmail . com
On Fri, Feb 22, 2019 at 6:38 AM Arkady Klimov arkady.klimov_AT_gmail.com <
refal@botik.ru> wrote:

> Антон, спасибо,
> я тоже решил на этом коде немного поупражняться в чтении и понимании
> Рефала-Плюс, что дается мне нелегко. Вроде все разобрал, но при этом мне
> показалось, что тут есть ошибка (в смысле, что результат не лучший). А
> именно, что будет в результате
> 
> ?
>
Я бы ожидал результат (VVAR), но тут  вроде получится (EVAR). Корректно,
> конечно, но обобщение не лучшее (не самое тесное).
>

Аркадий, да Вы правы. Основной смысл этой операции был в том, чтобы не
склеивать выражения там, где не нужно (по выходу из блока). Обобщение
(EVAR)...(EVAR) я либо оставил на потом и забыл, либо не стал делать из
каких-то ещё соображений (но сейчас, даже подумав некоторое время, не смог
сообразить, из каких).

Антон

P.S. Юра Климов восстановил доступ к сайту с исходниками. Например,
обсуждаемый код здесь:
http://trac.botik.ru/refal/browser/to-imperative/trunk/compiler/refal/org/refal/plus/compiler/rfp_format.rf


Или я что-то не понимаю в этом коде?
> Или такого входа быть не может? Например, если комбинации 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: Сравнение веток Рефала

2019-02-26 Пенетрантность Александр Коновалов 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λ. :) 

 

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

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 
mailto:refal@botik.ru> >:

Переменные есть, числа можно взять целые и вещественные. Можно упростить, на 
вход поступают только правильные арифметические выражения. Программа должна 
быть короткой, на страницу. У меня такая программа на рефале-2 была, постараюсь 
переслать.

 

14.02.2019, 12:40, "Александр Коновалов a.v.konovalov87_AT_mail.ru 
 " mailto:refal@botik.ru> >:

Добрый день, Леонид!

Спасибо за хорошую идею. Постараюсь в выходные написать простейший подобный 
компилятор.

Стоит уточнить задачу: есть ли переменные, какие знаки операций поддерживаются, 
на сколько подробными должны быть сообщения об ошибках, должен ли компилятор 
восстанавливаться…

 

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

 

From: Eisymont Leonid verger-lk_AT_yandex.ru mailto:refal@botik.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 
 " mailto:refal@botik.ru> >:

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

К сожалению, обзора разных диалектов Рефала я нигде не встречал. Диалекты и 
реализации Рефала не совсем корректно называть «ветками» или «версиями», они 
разрабатывались независимо, общей кодовой базы, на сколько я знаю, не имеют, 
имеют разный синтаксис, построены на разных принципах и идеологиях (особенно, 
Рефал Плюс).

Сам я его могу написать, но, наверное, не сегодня. И, если напишу, то он будет 
неизбежно субъективным. Но обсудить будет весело.

В выходные тогда напишу, если никто не напишет раньше меня.

 

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

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 Пенетрантность Andrei Klimov andrei_AT_klimov . net
On Tue, Feb 26, 2019 at 2:17 PM Arkady Klimov arkady.klimov_AT_gmail.com <
refal@botik.ru> wrote:

> Нет ли тут каких эффектов, что если мы по длинному списку бежим быстрее
> (меньше действий), то все начинает работать медленнее? Может из-за каких-то
> свойств кэша?
>

Да, кеш – первый подозреваемый на такой эффект. Интересно, было бы провести
измерения с небольшим шагом (как сделал Юра в недавнем письме или еще чаще)
и увидеть скачок, когда проходится некоторый размер. Чем меньше действий на
один доступ к памяти, тем сильнее он обычно виден.

Андрей


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

2019-02-26 Пенетрантность 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; }, > 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 Пенетрантность Yuri Klimov yuri_AT_klimov . net
Да, аргумент 1.

С уважением,
Юрий Климов

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; }, > 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-26 Пенетрантность 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; },  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-ами, пожалуйста.  Хочется и на текст
> полюбоваться, и на прогон.
>
> Под руками системы нет, а в сухую (без воды в бассейне) и облажаться
> могу...
>
> Всего доброго,
>
> Сергей Абрамов
>
>


abc_book.rf
Description: Binary data


abc1.rf
Description: Binary data


abc.rf
Description: Binary data