Добрый вечер, Николай Викторович! Вот и всплыл в интернете ещё один фрагмент мозаики в истории Рефала.
На сайте refal.ru есть такие слова Аркадия Климова: В середине 80-х В. Турчиным предложен язык Рефал-5, который содержит Базисный рефал в качестве подмножества. Расширения языка Рефал-5 качественно меняют стиль программирования, поэтому можно говорить о нем как о новом поколении языка. В настоящее время существует две реализации языка Рефал-5: одна выполнена Д. Турчиным, другая - Н. Кондратьевым и Арк. Климовым. Обе имеют практически один и тот же входной язык, но отличаются рядом особенностей реализации. Вторая известна также под названием Рефал-6, однако следует помнить, что это название не языка, а его реализации. Параллельно, С. Романенко разработал язык Рефал Плюс, основанный в принципе на тех же расширениях, что и Рефал-5, но доведенный до концептуальной полноты. В нем основным можно назвать расширение рефала средствами обработки неуспехов. Впоследствии ряд нововведений Рефала Плюс в несколько пересмотренном виде был перенесен Арк.Климовым в реализацию Рефала-6. В настоящее время (1999) продолжается работа по унификации входных языков Рефал Плюс и Рефал-6. Отсюда: http://refal.ru/intro-ref.htm. Выделение моё. Стало быть, когда-то была реализация Рефала-6, гораздо более близкая к Рефалу-5, чем нынешняя реализация Аркадия Климова (которая приобрела ряд черт Рефала Плюс и некоторых своих, уникальных черт). Ваши исходники позволяют получить представление о том, как эта реализация могла выглядеть. Судя по исходникам, в ней ещё не было «действий» Рефала-6, опирающихся на понятие неуспеха, а были классические условия и блоки — в исходных текстах компилятора используются только они. Хотя файл tsyn.ref уже демонстрирует поддержку «результатных блоков». Однако, точно сказать, какие расширения синтаксиса поддерживаются в Refal-6b, я сказать не могу, т.к. не разбирал исходники на столько подробно. В документации к Рефалу-6 Аркадий писал, что вся поддержка модульности (загрузки и выгрузки модулей) реализована кодом на Рефале, поддержки со стороны рантайма нет. Изучая загрузчики Рефала-6b, (refal.dynldr и refal.sys), я понял, в чём там хитрость. Аркадий Валентинович мне как-то рассказывал, что в 90-е годы был написан суперкомпилятор Рефала-6 в Си (он называл его «полусуперкомпилятором», на сколько я помню), и у Аркадия Валентиновича есть его исходники. Данный суперкомпилятор умел повышать местность функций и распознавал «параметры-призраки» — параметры, при передаче значений в которые не нужно инкрементировать счётчики ссылок. Сейчас это называется «заимствованием» (borrowing) и применяется в таких языках как Rust и Lobster (memory management in Lobster). Интересно было бы проверить этот суперкомпилятор на Рефале-6b и для Рефала-6b. Интересно сравнить исходные тексты Рефалов-6(b), Рефала-5 PZ и FLAC. Есть ли между какими-то из них точные заимствования фрагментов? А также сравнить Рефал-6 и Refal-6b, сколько кода там наоборот различается и сколько сохранилось общего. Как-нибудь сравню и напишу в рассылку. Спасибо! Александр Коновалов 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 был передан Аркадию Климову для дальнейшей с ним работы, язык довольно сильно изменился, что не всегда мне нравилось. В своей работе я использовал имеющуюся у меня реализацию, в которой тоже понемногу происходили изменения, наиболее важным из которых была длинная арифметика. Я считал, что в реализации Рефала неограниченное целое число должно быть одним символом с точки зрения языка. Поскольку на мой взгляд реализация достаточно устойчива, я решил сделать ее доступной для Рефал-сообщества. Вся документация на русском языке. Тексты программ должны быть в ASCII. Рефал-6b находится на моем домашнем компьютере, который доступен по ссылке: http://nkon04.ddns.net/refal6b/ Реализация состоит из файлов: refal (refal.exe для Windows) refal.sys refal.comp refal.dynldr refal.tracer Все они должны находиться в одном каталоге файловой системы. Это либо каталог Windows, Либо /usr/local/bin/ под Linux Все замечания приветствуются. Успехов. Николай Кондратьев