Спасибо за ответ, Леонид!
(Начал писать ответ на предыдущее незаконченное письмо.)
«Александр, мы с Сергеем Бычковым учились в одной группе в МИФИ и в 1973 году его заканчивали в совместной разработке компилятора языка Симула-1 в язык АЛМО на БЭСМ-6, это было реализовано на Рефале. У меня в этой разработке была большая часть…»
В книжке про Симулу-67 не упомянули Сергея Бычкова, видимо, там идёт речь о другой реализации или о другой версии Симулы. Но Задыхайло всё-таки упоминается, как научный руководитель одного из соавторов книги. Возможно, некоторые фамилии из благодарностей авторов книги будут знакомы и другим подписчикам.
«Но меня тогда захватила идея разработки аппаратной реализации Рефала, особенно его параллельной реализации.»
Когда у Вас будет время, рекомендую почитать в диссертации Дибвига пятую главу (ту её часть, где описывается семантика FFP-машин), я уверен, что Вас это заинтересует. Потому что для тех гипотетических параллельных машин так и просится Рефал в качестве нативного языка. По моему дилетантскому мнению, FFT-машины очень близки к одномерным клеточным автоматам Фон-Неймана, может быть, являются разновидностью последних. В общем, наследие Gyula A. Mago в этом смысле полезно изучить. Или хотя бы познакомиться с ним.
Но вообще, эту диссертацию интересно и любопытно почитать всем тем, кому интересна компиляция функциональных языков программирования. Мне, например, понравилось её читать. Идея реализации замыканий, к которой Дибвиг подходит окольными путями в четвёртой главе, мне казалась самоочевидной с самого начала.
«Это был своеобразный "эксперимент на людях", мы в рамках работ по символьеому процессору этим доказали, что это средство разработки настолько сильно, что можно очень ограниченным коллективом и за короткий срок разаботать такое сложное ПО. Убедили, это также в мою диссертацию вошло.»
И это доказывает преимущество функционального программирования для задач символьных вычислений. :-)
«Однако здесь есть коварный подводный камень - побочные эффекты выполнения функций из-за введенных статических и динамических ящиков. Даже если с ними работа не так интенсивна, они резко затрудняют динамическое распараллеливание программ на уровне функций. С этим я экспериментировал на живом компиляторе. В итоге удалось такую проблему обойти за счет введения специальных средств работы с ящиками типа мониторов. Не так уж это и обременительно было, ведь работа с ящиками не является основным стилем, легко локализуется и налаживается для параллельной программы.»
У Скоробогатова в неопубликованной рукописи этот вопрос рассматривается. У него недетерминированные функции и функции с побочным эффектом помечаются специальным ключевым словом, и при распараллеливании они учитываются особым образом. Т.е. если в правой части есть несколько вызовов функций, то зависимость между чистыми функциями выстраивается только по данным (результаты одних → аргументы других), для нечистых учитывается ещё и порядок справа-налево.
«Сразу скажу, ящики выбрасывать не стоит из-за проблем работы с ними.»
Когда я реализовывал свой компилятор Простого Рефала, статических ящиков и копилки не было в синтаксисе в принципе. И ничего, написал самоприменимый компилятор. И сейчас ни копилкой, ни статическими ящиками не пользуюсь. Предпочитаю религиозно чистый функциональный подход, из идейных соображений.
«В общем, первая статья по глубокому распараллеливанию рефал-программ была в 1977 году в киевском журнале "Управляющие системы и машины"»
Видел ссылку на неё в презентации. «Эйсымонт Л.К. О возможности параллельных схем реализации одного языка для описания задач переработки текстовой информации. — Управляющие Системы и Машины, Киев, 1977, с.56-64». На сколько мне известно, в то время Турчин был выехавшим в США диссидентом, и поэтому фамилия Турчина и слово Рефал были запрещены по политическим соображениям. Поэтому статья была про «один язык».
«Была оценка, что на сорок лет.»
Пришло время, надо продолжать работать. Надо и мне привлекать студентов к этой тематике.
«Сейчас параллелить рефал можно на существующих микропроцессорах, в том числе и графических, но лучше на специализированных типа мультитредовых с глобально адресуемой памятью.»
Чтобы этим заниматься, мне надо самому научиться как минимум программировать графические процессоры. А то я в этом малость не компетентен.
«Такими процессорами я занимался - в интернете есть много ссылок на эти работы - суперкомпьютер стратегического назначения, СКСН, "Ангара".»
Почитаю, когда поднадоедят метавычисления и развитие компилятора Рефала-5λ.
«В общем, восстанавливаем то, как работа по новой технике была построена в старые добрые времена в СССР, инициатива снизу.»
Замечательно, дай бог, чтобы не заглохло.
«Посылаю статью своего сына c его товарищами по микропроцессору NM6408, я им немного помогал в написании.»
Статью изучу позже и отпишусь.
Хочу написать немножко офтопика. Тем, кому этот офтопик не понравится, пишите мне напрямую или в рассылку — и я больше не буду.
Вообще, про Симулу-67 интересно почитать. В языках программирования есть две ветки ООП — ветвь Smalltalk (динамическая типизация) и ветвь Simula-67 (статическая типизация). Я говорю только о мейнстриме, про параметрический полиморфизм (Haskell, Rust, в некотором смысле и CLOS) я не пишу.
Про ветвь Smalltalk я рассказывать не буду, хотя это тоже интересная вещь. Скажу лишь, что наследниками этой идеологии являются в разной степени Ruby, Python, _javascript_, Lua и т.д.
Расскажу о своих впечатлениях от знакомства с Симулой-67. Симула-67 является объектно-ориентированным расширением Алгола-60 (не 68!). Поскольку она действительно является расширением Алгола-60, и новые концепции, внедрённые в неё, являются по современным понятиям объектно-ориентированными (не знаю точно, знали ли о ООП авторы Симулы). Потомками Симулы можно назвать прежде всего C++, потом уже Java, C#, Kotlin, Ceylon и много чего ещё.
Для себя я вывел такую довольно точную формулу:
C++ = C ∪ (Simula-67 \ Algol-60).
Речь идёт о раннем C++, вернее даже, о C with Classes. (Был такой препроцессор для Си Бьерна Страуструпа, непосредственный предшественник Си++.) Потому что действительно, когда читаешь описание Симулы (в книжке из предыдущего письма), возникает впечатление, что авторы Симулы внесли объектно-ориентированные концепции в Алгол, а Страуструп внёс эти же концепции в Си, причём в духе языка Си (очистив их от Алгола). Что в общем-то так и есть, он об этом сам пишет в книге «Дизайн и эволюция C++». Но когда знаком с синтаксисом и семантикой Алгола-60, знаешь Си и Си++, чтение описания Симулы даёт просто стереоскопическое ощущение. Тот же оператор new, наследование, производные классы…
Да, на самом деле более точная формула такая:
C++ = C ∪ (Simula-67 \ Algol-60) ∪ subset(Algol-68)
Потому что Страуструп знал Алгол-68 (о чём он пишет в упомянутой книжке) и притащил в Си++ некоторые концепции оттуда. Например if (Widget *w = getWidged()) …. На самом деле и в самом Си есть идеи из Алгола-68, те же x += a;.
Но вообще, забавно изучать историю языков программирования. Многие современные языки пытаются объединить понятия «выражения» и «оператора» (к примеру, Kotlin, Rust, расширения GCC в Си). Идея объединения операторов и выражений для «классических» императивных языков впервые предложена в Алголе-68 — посередь выражения можно было вставить и if, и while.
Вернусь к Симуле-67. ООП Симулы воплощён в Си++ Страуструпа. Концепции Си++ воплощены в Java и C#. Идеи двух последних воплощены, к примеру, в Ceylon, Kotlin и много где ещё. Когда-то давно смотрел презентацию по языку Ceylon, в которой преподносилось как новшество то, что определение класса можно рассматривать как определение функции. И конструктор как особый метод не нужен: можно написать что-то вроде class Widget(int x, string y), где параметры в скобках — параметры неявного конструктора. В Kotlin точно такой же синтаксис. Блин! Это же то, что Страуструп не перенёс в Си++ из Симулы-67. Там определение класса было разновидностью процедуры Алгола-60! С точно такой же семантикой.
В общем, мораль. Изучать историю любопытно, потому что история склонна к повторению. Американцы придумали AMBIT, французы из INRIA придумали Tom, оба языка с рефальским отождествлением.
А вообще, можно ещё привести примеры, как концепции некоторых старых, основополагающих языков программирования (Algol-60, Algol-68, Smalltalk, наверное, какие-то диалекты Фортрана (не знаком с ними)) заново повторно и иногда независимо воплощаются в современных языках программирования.
Progress, far from consisting in change, depends on retentiveness. When change is absolute there remains no being to improve and no direction is set for possible improvement: and when experience is not retained, as among savages, infancy is perpetual. Those who cannot remember the past are condemned to repeat it. (George Santayana)
С уважением,
Александр Коновалов
From: Eisymont Leonid [mailto:verger-lk@yandex.ru]
Sent: Friday, February 23, 2018 8:00 PM
To: refal@botik.ru
Subject: Re: Не понял про ограниченный РЕФАЛ
Ошибочно переслал письмо, немного допишу.
23.02.2018, 19:02, "Eisymont Leonid" <verger...@yandex.ru>:
Александр, мы с Сергеем Бычковым, он был моим близким другом, учились в одной группе в МИФИ и в 1973 году его заканчивали в совместной разработке компилятора языка Симула-1 в язык АЛМО на БЭСМ-6, это было реализовано на Рефале. Мы даже еще рефал-интерпретатор Олюнина-Флоренцева еще использовали, который мне пришлось по двоичным кодам по ходу дела изучать и немного править ошибки. Симула-1 в этой разработке был реализован в СССР впервые, люди брались за него, но сделать не смогли. У нас был научный руководитель, Слава Фисун, который с нами возился как дядька-воспитатель, т.е. не только по технике, направлял и по жизни. Да и вообще, коллектив отдела, тогда это был отдел 9 Михаила Романовича Шура-Бура, к нам по отечески отнесся, очень нас это поддержало.
У меня в этой разработке была большая часть, поскольку к этому времени я уже успел сделать компилятор языка Фортран-ЦЕРН, его с Сашей Красовским делали. Потом мы взялись вместе за компилятор языка Симула-67. Но меня тогда захватила идея разработки аппаратной реализации Рефала, да и вообще специализированных компьютеров, особенно параллельные реализации. Я оставил эту разработку компилятора Симула-67 Сергею, она была в самом начале, на него лег огромный груз. Он с этим блестяще справился, сумел организовать рабочий коллектив из сотрудников сектора 7 отдела 12, зав. сектором был Игорь Борисович Задыкайло. Сергей так и остался работать в МИФИ, а я к тому времени перешел в ИПМ и стал непосредственно с Задыхайло работать по теме разработки символьного процессора. Защищался также по этой теме, по входному языку символьного процессора, который был расширением Рефала-2. До 1983 года, в русле работ по символьному процессору я с сотрудниками ИПМ сделал полный аналог компилятора Фортран 4 (G) фирмы IBM, но на языке Рефал-2. Это был своеобразный "эксперимент на людях", мы в рамках работ по символьеому процессору этим доказали, что это средство разработки настолько сильно, что можно очень ограниченным коллективом и за короткий срок разаботать такое сложное ПО. Убедили, это также в мою диссертацию вошло. Ну а после 1983 года уже начался Буран и другие работы стратегического характера с использованием Рефала. Об этом я рассказывал.
Сергей Бычков блестяще защитился на компиляторе Симула-67 в МИФИ. Это ПО было, например, применено в процессе проектирования специального суперкомпьютера Булат, за этот суперкомпьютер его разработчики получили потом Ленинскую премию. Сергей, к сожалению, очень рано ушел, умер во время операции. У него остался сын Константин, который работает в области микроэлектроники в МЦСТ, очень способный специалист, а также дочь.
Что касается параллельных реализаций Рефала, то то, о чем Вы упоминаете, на совсем крошечных микропроцессорах, это также хороший вариант. Та логика, которая была для одномерных клеточных автоматов, годится и в этом случае.
Распараллеливание на уровне выполнения функций - первое, что бросается в глаза. Однако здесь есть коварный подводный камень - побочные эффекты выполнения функций из-за введенных статических и динамических ящиков. Даже если с ними работа не так интенсивна, они резко затрудняют динамическое распараллеливание программ на уровне функций. С этим я экспериментировал на живом компиляторе. В итоге удалось такую проблему обойти за счет введения специальных средств работы с ящиками типа мониторов. Не так уж это и обременительно было, ведь работа с ящиками не является основным стилем, легко локализуется и налаживается для параллельной программы. Сразу скажу, ящики выбрасывать не стоит из-за проблем работы с ними.
Вобщем, первая статья по глубокому распараллеливанию рефал-программ была в 1977 году в киевском журнале "Управляющие системы и машины", ее автором был я, у меня есть ее скан. Если честно, то тогда параллелить было рановато, не было соответствующих аппаратных возможностей. Мы явно поторопились. Была оценка, что на сорок лет. Забавно, но потом с экспертами, кто давал эту оценку мне пришлось работать по другим темам. Я их поздравил с тем, насколько они были точны. Правда они про эти свои оценки уже и забыли.
Сейчас параллелить рефал можно на существующих микропроцессорах, в том числе и графических, но лучше на специализированных типа мультитредовых с глобально адресуемой памятью. Такими процессорами я занимался - в интернете есть много ссылок на эти работы - суперкомпьютер стратегического назначения, СКСН, "Ангара". Очень надеюсь работы этого типа продолжить, хотя сейчас основные заботы немного о другом. Сам не успею доделать - доделают другие, я сейчас их готовлю. Если есть желание - подключайтесь. У нас не только по Рефалу темы. Посылаю статью своего сына c его товарищами по микропроцессору NM6408, я им немного помогал в написании.
Пока у нас складывается сотрудничество: ЗАО"НТЦ"Модуль" - ФГУП"НИИ"Квант" - МФТИ. Надеемся соединить усилия и с ИСП им.В.П.Иванниикова РАН, ну и конечно сотрудничаем с ИПМ им.М.В.Келдыша РАН. Вобщем, восстанавливаем то, как работа по новой технике была построена в старые добрые времена в СССР, инициатива снизу.
Л.Эйсымонт
23.02.2018, 15:45, "Александр Коновалов" <a.v.konovalo...@mail.ru>:
Добрый день, Леонид!
Собрался с мыслями, чтобы ответить на это письмо.
О параллельной реализации Рефала и других архитектурах
Посмотрел приложенные презентацию и статью. Крупнозернистое распараллеливание (параллельное вычисление нескольких функций) — вещь довольно очевидная вообще для функциональных языков. И внедрить такой параллелизм для Рефала сравнительно несложно для распространённых многоядерных PC. В 2008 году Сергей Скоробогатов [неопубликовано] предлагал распараллеливаемое представление и язык сборки для своего компилятора Рефала-7. У меня есть его довольно интересная рукопись, но без его разрешения я её переслать не могу (кстати там он ссылается на публикацию А.С. Фролова и Л.К. Эйсымонта в журнале «Информационные технологии»). Не помню на счёт реализации — была ли она или были только прототипы — надо у него спросить.
Мелкозернистое распараллеливание на PC реализовывать бессмысленно, даже, наверное, на видеокартах бессмысленно (хотя я на них не программировал). Тут уже нужны совсем другие компьютерные архитектуры. Один из вариантов предлагаете Вы — одномерные клеточные автоматы Фон-Неймана. Я о них прочитал (в статье и презентации), но мало что понял, поскольку не умею мыслить в терминах этих автоматов.
Другой интересный вариант, на котором хорошо пошёл бы Рефал — это FFP-машины, предложенные Gyula A. Mago (я затрудняюсь траслитировать это имя). Это машины редукции строк, построенные на большом количестве маленьких процессоров, объединённых в древовидную структуру. Я затрудняюсь кратко и понятно описать их в письме, поэтому отсылаю к диссертации Р. Кента Дибвига (1987 год), где они подробно и ясно описаны в пятой главе:
https://mazdaywik.github.io/direct-link/dybvig-disser.pdf
Диссертация вообще посвящена тремя моделям компиляции Scheme: с использованием промежуточного представления на односвязных списках, с использованием системного стека в виде массива и компиляцию Scheme для вот этих вот гипотетических машин. Когда я читал вот эту последнюю главу, только и думал о том, что для программирования этих машин куда лучше подошёл бы Рефал, нежели Scheme. Для Лиспа эти гипотетические машины — прокрустово ложе, а Рефал ложится красиво. Будет время — почитайте.
О реализациях компиляторов на Рефале в советские годы
У меня есть книжка Андрианов А. Н., Бычков С. П., Хорошилов А. И. Программирование на языке симула-67. — М.: Наука. Глав. ред. физ.-мат. лит., 1985. — 288 с. В ней описывается язык Симула-67 и две его реализации на советских машинах. И между делом упоминается, что обе реализации написаны на Рефале (кажется, я об этом писал в рассылку):
«При реализации компиляторов широко применялся язык рефал [5], ориентированный на программирование сложных символьных преобразований. Наличие на машинах БЭСМ-6 и ЕС ЭВМ реализаций рефала [5, 14], практически полностью совместимых по входному языку, позволило значительно сократить трудоемкость разработки симула-компиляторов, особенно компилятора для ЕС ЭВМ, основу которого составили программы ранее разработанного транслятора с языка симула-67 для БЭСМ-6.» (стр. 169)
«Авторы считают приятным долгом выразить благодарность своим научным руководителям доц. И. Б. Задыхайло, проф. Л. Т. Кузину, проф. А. Н. Мямлину за постоянное внимание и поддержку в работе по реализации языка симула-67. Искреннюю благодарность авторы выражают И. М. Седовой, Г. В. Попковой, А. Л. Пытелю, А. Е. Шестакову, участвовавшим в разработке трансляторов с языка симула-67, А. А. Веденову, С. А. Романенко, А. Е. Фирсову за помощь в использовании рефал-систем на БЭСМ-6 и ЕС ЭВМ, а также всем пользователям, чьи замечания способствовали совершенствованию трансляторов с языка симула-67 на ЕС ЭВМ и БЭСМ-6.» (стр. 8)
Выделение жирным моё. Других упоминаний Рефала в книжке я уже не помню. Такую длинную цитату благодарностей я написал на случай — может Вам знакомы перечисленные фамилии (мне известна только фамилия Романенко в списке).
С уважением,
Александр Коновалов
From: Eisymont Leonid [mailto:verger...@yandex.ru]
Sent: Monday, January 22, 2018 10:03 PM
To: refal@botik.ru
Subject: Re: Не понял про ограниченный РЕФАЛ
Здравствуйте, Александр.
Я занимался более двадцати лет в ИПМ им.М.В.Келдыша АН СССР практическими приложениями Рефала. Это были разные компиляторы для изделий новой техники, среди них бортовой компьютер МТКК Буран и несколько в то время засекреченных суперкомпьютеров с нестандартной архитектурой.
Некоторым образом это описано в приложенных файлах, в 2012 году мы об этом рассказали.
Еще я занимался проблемой аппаратной реализации рефала, это все про рефал-2 я говорю.
Там были две линии. Одна - это микропрограммная реализация языка сборки Сергея Романенко. Вторая - параллельная версия, в которой распараллеливание происходит на нескольких уровнях. Идея эта была опубликована еще в конце семидесятых годов, у меня есть скан этой статьи в журнале Управляющие системы и машины. Перешлю потом. Эта тема также отображена в присоединенных файлах.
В начале восьмидесятых годов такую реализацию пришлось забросить, поскольку она сильно опережала время, а меня попросили заняться актуальной проблематикой МТКК Буран, связанной с баллистическими вычислениями, потом пошли другие темы, связанные с суперкомпьютерами, сейчас - со специализированными СБИС для суперкомпьютеров специального назначения. Это все есть в сети под моей фамилией, так что можно посмотреть. Параллельный рефал на уровне выполнения функций был реализован моим дипломником, Сашей Фроловым в МИФИ в начале двухтысячных годов, его диплом у меня есть. Есть и исходные тексты, но он сейчас на другую тематику переключился, хотя, если найдутся энтузиасты, то он, по-моему, мог бы помочь и тему передать.
Тема параллельного отождествления и замены на линейке клеточных автоматов так и зависла пока. Я порываюсь ею время от времени заняться, но другие дела оказываются важнее, отнимают все время.
Вот такая пока история. Я очень надеюсь, что язык типа рефала-два , есть еще близкий американский вариант, язык AMBIT, мог бы стать внутренним языком функционального суперкомпьютера не фон-Неймановского типа на пост-Муровской элементной базе. Но пока все не складывается этим заняться, да и более очевидные проекты типа мультитредовых микропроцессоров невозможно запустить.
Л.Эйсымонт
22.01.2018, 20:34, "Александр Коновалов" <a.v.konovalo...@mail.ru>:
Добрый вечер, Леонид!
«Заодно вопрос, какие очаги деятельности по Рефалу сейчас остались?»
За себя отвечу. Я преподаю в МГТУ имени Баумана и на кафедре ИУ9 «Теоретическая информатика и компьютерные технологии» по мере сил развиваю Рефал. Сам разрабатываю компилятор Рефала-5λ:
https://github.com/bmstu-iu9/simple-refal
Нормальная документация к нему сейчас пишется, основные отличия от классического Рефала-5 (все они являются расширениями) записаны в README.md (внизу страницы сразу после списка файлов).
И студентов привлекаю к реализации той или иной функциональности в этом компиляторе (курсовые, дипломы). Вот здесь можно найти устаревшую документацию и записки студентов:
https://github.com/bmstu-iu9/simple-refal/tree/master/doc
А другие очаги Рефала, если они есть в рассылке, пускай сами за себя отписываются.
«Что-то мне внутренний голос говорит, что он снова станет актуальным из-за работ по пост-кремниевым технологиям в этом десятилетии. Заманчиво воскресить работу по параллельному рефалу да еще на клеточных автоматах. Такие автоматы, например, в сверхпроводниковой электронике любят.»
Понятия не имею, о чём Вы говорите. Но курсовой по параллельному Рефалу могу, наверное, дать на следующий год.
Коллега с соседней кафедры (ИУ8) как-то говорил мне, что Рефал надо компилировать в прошивки для ПЛИС. Я немного знаком с программированием ПЛИСов, но представления не имею, как ПЛИСы скрестить с Рефалом.
С уважением,
Александр Коновалов
From: Eisymont Leonid [mailto:verger...@yandex.ru]
Sent: Monday, January 22, 2018 5:26 PM
To: refal@botik.ru
Subject: Re: Не понял про ограниченный РЕФАЛ
Ну, я рад за вас. Да еще любимую книгу из ЦНИПИАС-а процитировали. Заодно вопрос, какие очаги деятельности по Рефалу сейчас остались? Что-то мне внутренний голос говорит, что он снова станет актуальным из-за работ по пост-кремниевым технологиям в этом десятилетии. Заманчиво воскресить работу по параллельному рефалу да еще на клеточных автоматах. Такие автоматы, например, в сверхпроводниковой электронике любят.
Л.Эйсымонт
22.01.2018, 16:52, "Andrei Klimov" <kli...@keldysh.ru>:
2018-01-22 7:58 GMT+03:00 Eisymont Leonid <verger...@yandex.ru>:
Настоящие ученые, один в 4.16 вопрос задал, другой в 6.59 ответил.
Леонид, какой ты наблюдательный! 🤗
Да, засиделся: хотел уже ложиться спать, а тут редкий вопрос по Рефалу пришел...😳
Душа радуется, нас не победить.
Да, еще держимся! 🤓
Андрей Климов
А что за книга про Симулу-67, кто написал?
По модели машин под функциональный язык была знаменитая Тьюринговская лекция Бэкуса - Может ли быть программирование избавлено от фортрановского стиля. Кстати, Бэкус и есть автор Фортрана. В лекции он, можно сказать, слегка извиняется за Фортран и описывает функциональный язык программирования, под который и надо делать компьютеры. После этого был ряд статей про эти компьютеры.
За ссылки на работы отдельное большое спасибо.
Еще, насколько помню, когда появился Симула-67объектно-ориентированных языков еще не было. Все с него началось.
Л.Эйсымонт
23.02.2018, 21:18, "Александр Коновалов" <a.v.konovalo...@mail.ru>:
- Re: Не понял про ограни... Arkady Klimov
- RE: Не понял про ог... Александр Коновалов
- Re: Не понял п... Arkady Klimov
- RE: Не понял п... Александр Коновалов
- Re: Не понял п... Arkady Klimov
- RE: Не понял про ограни... Александр Коновалов
- RE: Не понял про ог... Александр Коновалов
- RE: Не понял про ог... Александр Коновалов
- Re: Не понял п... Eisymont Leonid
- RE: Не понял п... Александр Коновалов
- Re: Не понял п... Eisymont Leonid
- Re: Не понял п... Eisymont Leonid
- Re: Не понял п... Boyko Bantchev
- Re: Не понял п... Eisymont Leonid
- RE: Не понял п... Александр Коновалов
- RE: Не понял ... and
- RE: Не понял п... Александр Коновалов
- RE: Не понял про ограниченный РЕФАЛ Александр Коновалов