Добрый вечер, Аркадий!

Причина: есть программы на Рефале-5, которые жёстко зашиты на этот «уродливый» 
формат. И я их хочу поддерживать без изменений исходного кода. Например, для 
Рефала-5 есть генератор случайных синтаксически корректных программ, написанный 
Андреем Немытых, он у меня используется в компиляторе Рефала-5λ для тестов. А 
вот в нём строчка, где используется «уродливый» формат:

https://github.com/bmstu-iu9/refal-5-lambda/blob/master/src/nemytykh-random-program-generator/random.ref#L304

На Рефале-6 с адаптированной библиотекой встроенных функций эта программа не 
запустится.

Не удивлюсь, если подобные засады есть и в SCP4.

Кроме того, Рефал-5λ может рассматривать .rsl-ки классического Рефала-5 как 
исходники (они сначала декомпилируются, а потом компилируются). А в двоичном 
формате .rsl-ек зашито представление числа как машинного целого.

 

Кстати, я недавно придумал пример, где длинная арифметика на макроцифрах 
работает просто идеально. Это вычисление хэш-кода строки:

/*
  <StrHash e.String> == s.Hash
  e.String ::= s.CHAR*
  s.Hash ::= s.NUMBER
*/
StrHash {
  e.String = <Mod (1 <Ord e.String>) 43>;
}

Функция Ord преобразует строку в последовательность ASCII-кодов — макроцифр. 
Для однозначности в начало строки добавляется макроцифра 1 (вдруг строка 
начинается с нулевых байтов). Цепочка макроцифр рассматривается как длинное 
число, от которого берётся остаток деления на некоторое простое число. Без 
длинной арифметики на явных макроцифрах хеш-функцию написать будет сложнее. 
Написать, конечно, можно (сам писал), но более громоздко и менее эффективно. 

 

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

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

Кстати, а какие у Вас числа в Рефале-6: двойной или одинарной точности?

 

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

 

From: Arkady Klimov arkady.klimov_AT_gmail.com [mailto:refal@botik.ru] 
Sent: Wednesday, November 27, 2019 10:36 PM
To: refal@botik.ru
Subject: Re: Нужны ли вещественные числа в Рефале?

 

 А я не понимаю, почему для совместимости с Р5 нужно было вводить в Р5λ целые 
числа в том же уродливом формате, как в Р5. Вот например в Р6 целое это всегда 
символ, но это не мешает для выполнения под Р6 программ на Р5 сделать 
переопределение нужных функций. В Р6 я так сделал все переопределения в 
отдельном модуле совместимости. Главное, чтоб можно было переопределять под 
старым именем, сохраняя доступ к родным функциям внутри таких определений. В 
итоге для Р5 у меня положительное число это всегда s, а отрицательное '-' s. 
Только программа на Р5 не вправе опираться на размер макроцифры.

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

Аркадий

 

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

Здесь речь о том, что, если бы они были в Рефале-5, то мне бы их _пришлось_ 
добавить и в Рефал-5λ. Даже если они мне не нужны сами по себе. В частности, 
мне пришлось добавить длинную арифметику по этой причине. И для совместимости с 
актуальной реализацией и учебником Турчина, длинная арифметика добавлена в виде 
макроцифр по основанию 2³². 
Александр Коновалов

-----Original Message-----
From: Boyko Bantchev boykobb_AT_gmail.com [mailto:refal@botik.ru 
<mailto:refal@botik.ru> ] 
Sent: Wednesday, November 27, 2019 8:10 PM
To: refal@botik.ru <mailto:refal@botik.ru> 
Subject: Re: Нужны ли вещественные числа в Рефале?

> У меня (Рефал-5λ) их нет, поскольку (а) мне они не требовались, (б) их нет в 
> Рефале-5, с которым должен быть совместим Рефал-. Добавлять или не добавлять 
> — я думаю. Поэтому и спросил.

А какого рода несовместимость появилась бы, если бы у Рефала-5λ были 
вещественные числа?  Т.е.,  программы на Рефале-5 имели бы ошибочное (с точки 
зрения Рефала-5) истолкование в Рефале-5λ?

  • Нуж... Александр Коновалов a . v . konovalov87_AT_mail . ru
    • ... Boyko Bantchev boykobb_AT_gmail . com
      • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
        • ... Arkady Klimov arkady . klimov_AT_gmail . com
          • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
          • ... Boyko Bantchev boykobb_AT_gmail . com
            • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
            • ... Mikhail Kovtun mikhail . kovtun_AT_duke . edu
              • ... Boyko Bantchev boykobb_AT_gmail . com
                • ... Arkady Klimov arkady . klimov_AT_gmail . com
                • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
                • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
                • ... Arkady Klimov arkady . klimov_AT_gmail . com
                • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
    • ... Eisymont Leonid verger-lk_AT_yandex . ru

Ответить