Andrey.Slepuhin (pooh@msu.ru)
Tue, 28 Sep 1999 20:47:56 +0400
День добрый всем!
При попытке собрать FLAC под Linux'ом были выявлены
следующие ошибки в Рефале+:
1) Функция rleq() (проверка на равенство объектных выражений;
используется,
в частности, при вычислении перестроек /оператор ":"/) работает
некорректно для символов типа WORD. Насколько я понимаю, причина в
том, что если слово коротокое, то за терминирующим строку нулем
может лежать мусор, который вызывает различия при вызове memcmp().
Я исправил ошибку, подставив в rleq() вызов rlcmp(), которая работает
правильно и написана гораздо более аккуратно. По идее, никаких
особых потерь производительности быть не должно. Будет время -
может быть исправлю ошибку по месту.
2) Наблюдаются глюки со входными форматами. Мне с большим трудом
удалось локализовать ошибку, имея под рукой лишь автоматически
сгенерированные из FLAC'а рефальские тексты. В итоге получился следующий
пример:
====================8<========================
$use Stdio;
$func F (e.lc) (e.lr) t.p (e.ls) t.u = e.res ;
* $func F e = e ;
$func G e = e ;
Main =
1 :: t.p,
2 :: e.l,
3 :: t.u,
<G t.p e.l t.u>;
G {
t.p e.l t.u,
<WriteLN t.p>
<WriteLN e.l>
<WriteLN t.u>
<F (e.l) ( ) t.p (e.l) t.u>;
};
F {
(e.lc) (e.lr) t.p (e.ls) t.u,
<WriteLN e.lr>,
<WriteLN e.ls>;
};
====================8<========================
pooh@thicket:~/work/flac$ rfp test.rf
Refal Plus Compiler Version 1.8.00.8b-32bit 1991 R.F.Gurin,
S.A.Romanenko
and RCMS PSI AS RUSSIA, Pereslavl-Zalessky,1993 Copyright (c)
/usr/bin/gcc -g -c test.s
Dynamic memory 6708
Max dynamic memory 12076
test : No errors
/usr/bin/gcc -g test.o /usr/refal-plus/inc/rfp.a -o test.out
File test.out created
pooh@thicket:~/work/flac$ ./test.out
1
2
3
3
pooh@thicket:~/work/flac$
Должно быть (получается, если использовать закомментированное
объявление функции F):
pooh@thicket:~/work/flac$ ./test.out
1
2
3
2
pooh@thicket:~/work/flac$
Более подробно на код я еще не смотрел. Если у кого-нибудь есть идеи -
буду очень благодарен.
Когда эта ошибка будет исправлена - выложу обновленные RPM'ы.
Всего доброго,
Андрей.
This archive was generated by hypermail 2.0b3 on Tue Sep 28 1999 - 20:49:31 MSD