Re: Про параллелизм в Рефале

2019-12-02 Пенетрантность Andrei Klimov andrei_AT_klimov . net
пн, 2 дек. 2019 г., 1:26 Boyko Bantchev boykobb_AT_gmail.com :

> On Sun, 1 Dec 2019 at 23:24, Andrei Klimov andrei_AT_klimov.net
>  wrote:
> >
> > вс, 1 дек. 2019 г., 15:31 Александр Коновалов a.v.konovalov87_AT_mail.ru
> :
> >>
> >> Кстати, вопрос к знатокам терминологии параллельного и/или
> функционального программирования. Вот есть понятие чистая функция — это
> детерминированная функция без побочного эффекта. У этого понятия есть
> антоним в русском языке, кроме словосочетания «грязная» функция? Я пишу
> «грязная» в кавычках, поскольку в литературе его не встречал.
> >
> >
> > Александр, устно мы всегда говорили и говорим "грязная функция".
> >
> > В русском письменном языке более скованные традиции, чем в английском.
> Там они легко тащат разговорный жаргон в профессиональную терминологию. А
> мы что-то из себя изображаем.
> >
> > Я бы приветствовал использование "грязный" в текстах, но не знаю,
> сложилась ли уже такая традиция.
>
> Я бы предложил чистая/нечистая.  Мне кажется, это и лучше соответствует
> английским словам pure/impure. По-английски не dirty function же, всё-таки
> :)
>

Да, "нечистая" - это хорошо. Особенно для письменного текста. А устно я по
себе замечаю, что все время говорю "грязная". Не знаю, какая "фрейдуха" в
это замешана. Может, для яркости речи.若 Или чтоб шпильку
"грязно-функциональные" отпустить?浪

Андрей

>


Re: Про параллелизм в Рефале

2019-12-01 Пенетрантность Boyko Bantchev boykobb_AT_gmail . com
On Sun, 1 Dec 2019 at 23:24, Andrei Klimov andrei_AT_klimov.net
 wrote:
>
> вс, 1 дек. 2019 г., 15:31 Александр Коновалов a.v.konovalov87_AT_mail.ru 
> :
>>
>> Кстати, вопрос к знатокам терминологии параллельного и/или функционального 
>> программирования. Вот есть понятие чистая функция — это детерминированная 
>> функция без побочного эффекта. У этого понятия есть антоним в русском языке, 
>> кроме словосочетания «грязная» функция? Я пишу «грязная» в кавычках, 
>> поскольку в литературе его не встречал.
>
>
> Александр, устно мы всегда говорили и говорим "грязная функция".
>
> В русском письменном языке более скованные традиции, чем в английском. Там 
> они легко тащат разговорный жаргон в профессиональную терминологию. А мы 
> что-то из себя изображаем.
>
> Я бы приветствовал использование "грязный" в текстах, но не знаю, сложилась 
> ли уже такая традиция.

Я бы предложил чистая/нечистая.  Мне кажется, это и лучше соответствует
английским словам pure/impure. По-английски не dirty function же, всё-таки :)


Re: Про параллелизм в Рефале

2019-12-01 Пенетрантность Andrei Klimov andrei_AT_klimov . net
вс, 1 дек. 2019 г., 15:31 Александр Коновалов a.v.konovalov87_AT_mail.ru <
refal@botik.ru>:

> Кстати, вопрос к знатокам терминологии параллельного и/или функционального
> программирования. Вот есть понятие *чистая функция* — это
> детерминированная функция без побочного эффекта. У этого понятия есть
> антоним в русском языке, кроме словосочетания «грязная» функция? Я пишу
> «грязная» в кавычках, поскольку в литературе его не встречал.
>

Александр, устно мы всегда говорили и говорим "грязная функция".

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

Я бы приветствовал использование "грязный" в текстах, но не знаю, сложилась
ли уже такая традиция.

Андрей

>


Re: Про параллелизм в Рефале

2019-12-01 Пенетрантность Eisymont Leonid verger-lk_AT_yandex . ru
Параллелить в Рефале можно гораздо больше, это описано в статье конца семидесятых в УСИМе.То, что описано в Вашем письме, нами пройдено в начале восьмидесятых, я об этих ловушках и говорил.Все описано в упомянутых публикациях и в моей диссертации, которую мне разрешили защитить перед работами по Бурану. Это май 1983 года.Л.Эйсымонт01.12.2019, 15:31, "Александр Коновалов a.v.konovalov87_AT_mail.ru" :Добрый день, Леонид, ещё раз!Выношу в отдельную тему обсуждение параллелизма. «С функциями с побочным эффектом надо быть осторожными. То, что Вы говорите, сводит на нет все распараллеливание по чистым конкретизациям.»Напишу подробнее, что же мы планируем со студентом получить (добавил его в копию).В Рефале можно параллелить три вещи: вызовы функций, сопоставления с образцами разных предложений и элементарные операции сопоставления в самом образце. Мы будем параллелить не зависящие по данным вызовы функций.Параллелизм предполагается неявный. Программист ничего не думает о потоках, синхронизации и прочих радостях бытия, он просто пишет программу на Рефале. А уже сам рантайм будет конкретизации раскидывать по потокам. Т.е. никаких функций вроде CreateThread, примитивов синхронизации, сообщений между потоками в API не будет в принципе.В основе параллельной реализации лежит базисный Рефал с полем зрения, которое изменяется по шагам. Функции делятся на две категории — функции, написанные на Рефале, и встроенные функции (написанные на Си). Функции, написанные на Рефале, за один шаг заменяют свой вызов в поле зрения на правую часть соответствующего предложения, в которой тоже могут быть новые термы конкретизации. Встроенные функции за один шаг заменяются на пассивное выражение.В такой модели можно параллельно вычислять, во-первых, любые функции на Рефале, во-вторых, чистые функции на Си. «Грязные» встроенные функции, вроде ввода-вывода и копилки, должны, тем не менее, вычисляться строго последовательно слева-направо.Новшество нашей со Станиславом работы в механизме, который позволяет параллелить вызовы, но при этом гарантирует правильный порядок «грязных» функций. Если кратко, идея в том, что все термы конкретизации в поле зрения провязаны двумя способами: древовидно, что отражает зависимости по данным, и линейно в том порядке, в каком они выполнялись бы последовательно. Термы конкретизации активируются (помещаются в очередь потока), когда их аргументы становятся пассивными. Но при выполнении «грязных» функций на Си, они «приостанавливаются». Повторно они активируются потоком, который бежит по линейному последовательному списку и тогда-то они выполняются.  Кстати, вопрос к знатокам терминологии параллельного и/или функционального программирования. Вот есть понятие чистая функция — это детерминированная функция без побочного эффекта. У этого понятия есть антоним в русском языке, кроме словосочетания «грязная» функция? Я пишу «грязная» в кавычках, поскольку в литературе его не встречал.  С уважением,Александр Коновалов From: Eisymont Leonid verger-lk_AT_yandex.ru [mailto:refal@botik.ru]Sent: Friday, November 29, 2019 5:25 PMTo: refal@botik.ruSubject: Re: Нужны ли вещественные числа в Рефале? С указателями на числа все неправильно. Именно надо работать с тем, на что ссылаемся, на 64-х разрядные числа. При реализации у нас даже мыслей таких не было, это не практично. Ссылки на ящики - совсем другое. Кстати, в реализации того рефала были введены ссылки на хеш-таблицы и даже на вектора. Это сильно помогло при оптимизации быстродействия.С функциями с побочным эффектом надо быть осторожными. То, что Вы говорите, сводит на нет все распараллеливание по чистым конкретизациям. Это мы проходили в начале 80-х годов. Хорошее распараллеливание в эксперименте удалось получить лишь при работе не просто с переменными и копилками, а, по-существу, с объектами типа мониторов Хоара и формируемых уникальных ID обращений к ним. Эти ID в таком объекте использовались для внутреннего упорядочивания действий с такими объектами. Есть препринт ИПМ  того времени по распараллеливанию модельного компилятора на имитационной модели параллельной рефал-машины. Я эту модель сделал на базе реализации Романенко-Климова для БЭСМ-6, просто по другому конкретизации запускал из дерева конкретизаций , используя предоставленный ими интерфейс.Про читаемость можно действительно  не обсуждать, но мне эти идентификаторы через точку при свободных переменных никогда не нравились, они "замыливают" видимость всей структуры области конкретизации, а это важно и для Рефала принципиально. Для информативности в смысле "что какая свободная переменная означает" использование идентификаторов явно недостаточно. У нас использовалась технология другая - была документация, хоть и рукописная, к наиболее важным функциям, где структура строки обращения подробно расписывалась.Еще требование - часть этой информации выносилась в  основной комментарий к функции типа структура входа и выхода. Более мелкие функции снабжались комментариями для каждого рефал-предложения.Это мы использовали в 

Про параллелизм в Рефале

2019-12-01 Пенетрантность Александр Коновалов a . v . konovalov87_AT_mail . ru
Добрый день, Леонид, ещё раз!

Выношу в отдельную тему обсуждение параллелизма.

 

«С функциями с побочным эффектом надо быть осторожными. То, что Вы говорите, 
сводит на нет все распараллеливание по чистым конкретизациям.»

Напишу подробнее, что же мы планируем со студентом получить (добавил его в 
копию).

В Рефале можно параллелить три вещи: вызовы функций, сопоставления с образцами 
разных предложений и элементарные операции сопоставления в самом образце. Мы 
будем параллелить не зависящие по данным вызовы функций.

Параллелизм предполагается неявный. Программист ничего не думает о потоках, 
синхронизации и прочих радостях бытия, он просто пишет программу на Рефале. А 
уже сам рантайм будет конкретизации раскидывать по потокам. Т.е. никаких 
функций вроде CreateThread, примитивов синхронизации, сообщений между потоками 
в API не будет в принципе.

В основе параллельной реализации лежит базисный Рефал с полем зрения, которое 
изменяется по шагам. Функции делятся на две категории — функции, написанные на 
Рефале, и встроенные функции (написанные на Си). Функции, написанные на Рефале, 
за один шаг заменяют свой вызов в поле зрения на правую часть соответствующего 
предложения, в которой тоже могут быть новые термы конкретизации. Встроенные 
функции за один шаг заменяются на пассивное выражение.

В такой модели можно параллельно вычислять, во-первых, любые функции на Рефале, 
во-вторых, чистые функции на Си. «Грязные» встроенные функции, вроде 
ввода-вывода и копилки, должны, тем не менее, вычисляться строго 
последовательно слева-направо.

Новшество нашей со Станиславом работы в механизме, который позволяет 
параллелить вызовы, но при этом гарантирует правильный порядок «грязных» 
функций. Если кратко, идея в том, что все термы конкретизации в поле зрения 
провязаны двумя способами: древовидно, что отражает зависимости по данным, и 
линейно в том порядке, в каком они выполнялись бы последовательно. Термы 
конкретизации активируются (помещаются в очередь потока), когда их аргументы 
становятся пассивными. Но при выполнении «грязных» функций на Си, они 
«приостанавливаются». Повторно они активируются потоком, который бежит по 
линейному последовательному списку и тогда-то они выполняются. 

 

Кстати, вопрос к знатокам терминологии параллельного и/или функционального 
программирования. Вот есть понятие чистая функция — это детерминированная 
функция без побочного эффекта. У этого понятия есть антоним в русском языке, 
кроме словосочетания «грязная» функция? Я пишу «грязная» в кавычках, поскольку 
в литературе его не встречал. 

 

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

 

From: Eisymont Leonid verger-lk_AT_yandex.ru [mailto:refal@botik.ru] 
Sent: Friday, November 29, 2019 5:25 PM
To: refal@botik.ru
Subject: Re: Нужны ли вещественные числа в Рефале?

 

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

С функциями с побочным эффектом надо быть осторожными. То, что Вы говорите, 
сводит на нет все распараллеливание по чистым конкретизациям. Это мы проходили 
в начале 80-х годов. Хорошее распараллеливание в эксперименте удалось получить 
лишь при работе не просто с переменными и копилками, а, по-существу, с 
объектами типа мониторов Хоара и формируемых уникальных ID обращений к ним. Эти 
ID в таком объекте использовались для внутреннего упорядочивания действий с 
такими объектами. Есть препринт ИПМ  того времени по распараллеливанию 
модельного компилятора на имитационной модели параллельной рефал-машины. Я эту 
модель сделал на базе реализации Романенко-Климова для БЭСМ-6, просто по 
другому конкретизации запускал из дерева конкретизаций , используя 
предоставленный ими интерфейс.

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

Еще требование - часть этой информации выносилась в  основной комментарий к 
функции типа структура входа и выхода. Более мелкие функции снабжались 
комментариями для каждого рефал-предложения.

Это мы использовали в течение 30-40 лет при написании более 20 компиляторов и 
имитационных моделей. Потом настала перестройка и все обвалилось. Сейчас 
пытаемся эту практику восстановить. Очень хочется успеть самому и научить 
молодежь.

Л.Эйсымонт

 

 

29.11.2019, 15:51, "Александр Коновалов a.v.konovalov87_AT_mail.ru"