Добрый вечер, Аркадий! Причина: есть программы на Рефале-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λ?