-
Notifications
You must be signed in to change notification settings - Fork 35
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Удалить устаревшие функции Простого Рефала из Library(Ex) #58
Comments
Комментарий к старой постановке задачи. |
Комментарий к старой постановке задачи. |
Они псевдонимы соответственно для Open-Auto, WriteBytes, ReadBytes.
Вызовы заменены на Close. Функция Close, конечно, не реагирует на некорректные дескрипторы, но это не важно.
Функция cookie_ns::close(), которая вызывалась и из Close, и из FClose, больше не нужна — её тело упрощено и встроено в Close. Коммит удобно смотреть с игнорированием пробелов.
Для единообразия переименованы вхождения и в тех автотестах, где они никакой роли в принципе не играют. Аналогично, для примеров раскраски синтаксиса. Тесты для функции ReadLine → Card сохранены, поскольку они нагляднее теста в папке autotests/compatibility. Тест Library-WriteLine.sref после замены в нём WriteLine → Prout ничего нового не даёт по сравнению с тестом в compatibility. Напротив, тест Library-Prout-Expr.sref проверяет корректность вывода квадратных скобок и замыканий, чего в тестах совместимости быть не может.
Тема уточнена, чтобы соответствовать постановке задачи. Тем более, что в постановке задачи фигурируют не только функции ввода-вывода. |
Простой Рефал не проверяет переполнение в целочисленных литералах, поэтому нельзя просто заменить FastIntFromStr на Symb. Нужно учесть особенность поведения IntFromStr при переполнении.
Пришлось написать элементы синтаксического разбора в двух точках её использования: compiler/Config.ref и lexgen/DFA-Lexer.ref. Удаление из Library.ref формальное — нужно будет провести рефакторинг.
Теперь вхождения строки StrFromInt встречаются только в исторической документации. Для единообразия переименованы вхождения в opt-pattern{2,4}.sref. В реализации Library.ref эта функция используется, поэтому была переименована в более адекватную StrFromMacroDigit.
Цель
Предлагается избавиться от устаревших функций Простого Рефала (на букву
F
которые). Дублирующие — удалить, остальные переименовать.Мотивация
Простой Рефал не нужен, ибо устарел. И избыточные функции в стандартной библиотеке тоже не нужны.
Задача
FClose
— дублируетClose
.FReadLine
— дублируетGet
.FWriteLine
— дублируетPutout
.ReadLine
— дублируетCard
.WriteLine
— дублируетProut
.IntFromStr
— частично дублируетNumb
. В отличие отNumb
производит элементы синтаксического анализа, но может отделить только одну макроцифру (что является артефактом Простого Рефала). Синтаксический анализ нужно проводить явно, поэтому функцияIntFromStr
не нужна.FastIntFromStr
— вызываетIntFromStr
и падает, если неSuccess
. Не нужна вместе сIntFromStr
.StrFromInt
— дублируетSymb
. Но сама функцияSymb
реализована черезStrFromInt
, поэтому пока достаточно удалить у неё$ENTRY
.Y
— комбинатор неподвижной точки. Сложная и непонятная функция с неудобным интерфейсом для того, чтобы создавать рекурсивные безымянные функции. Я ей не пользуюсь, т.к. функция себя не оправдывает. Циклы по последовательности успешно реализуютсяMap
,MapAccum
,Reduce
. Для циклов общего вида можно рассмотреть интерфейс вроде экспериментальных отсюда:https://gist.github.com/Mazdaywik/69a574565dc3e2904b6bbeb61e30c781
FOpen
→Open-Auto
. Отличия в именахOpen
иFOpen
ничего не говорят о различии их семантики. Заманчиво, конечно, было бы переименоватьOpen
вReOpen
, но нельзя — это встроенная функция Рефала-5.FWriteBytes
→WriteBytes
. А вообще, она нужна? Ведь<Write s.File <Chr e.Bytes>>
справляется не хуже. Оставим для симметрии сReadBytes
.FReadBytes
→ReadBytes
.MapReduce
→MapAccum
, уже давно она deprecated и является синонимом дляMapAccum
, давно пора удалить.Seq
→Pipe
. АналогичноMapReduce
.SymbCompare
— эффективная функция для сравнения символов, эмулировать её при помощиCompare
громоздко и медленно.FTell
,FSeek
— лучше имена не придумаешь.Tell
иSeek
выглядят не так понятно,FileSeek
,FileTell
— громоздко.RenameFile
— симметричнаRemoveFile
.Старая постановка задачи
Предлагается следующий пакет изменений.
Стандартная библиотека пополняется функциями
DebugDump
иDebugDump-T
, которые выводят объектное выражение в файловый поток (включая#STDOUT
и#STDERR
, см. далее) в виде однозначного дампа. Их реализация просто вызываетrefalrts::debug_print_expr
.Библиотечные функцииWriteLine
иFWriteLine
смогут печатать только потоки char’ов: будут падать на выражениях, содержащих что-либо ещё.В качестве файловых дескрипторов для библиотечных функций
FWriteLine
иFReadLine
можно будет передавать идентификаторы#STDIN
,#STDOUT
,#STDERR
#stdin
,#stdout
,#stderr
. ФункцииLoadFile
иSaveFile
будут получать первым параметромt.FileTarget
:Если функция первым параметром получает дескриптор, то она, соответственно, читает или пишет строки, но не закрывает его в конце.
Функции
FWriteLine
иFReadLine
не возвращают файловый дескриптор.Для вывода объектных выражений в читабельном виде в
LibraryEx
будут предусмотрены функцииWriteExpr
,FWriteExpr
,SaveFile-Expr
,StrFromExpr
, вLibrary
—StrFromAtom
. Последняя функция похожа наStrFromInt
, формирует текстовое представление атома. ФункцияStrFromExpr
, реализованная черезStrFromAtom
, выводит выражение по следующим правилам:WriteLine
).Имя\…[N]
, гдеN
— количество ссылок на функцию. Содержимое замыкания не печатается.*XXXX…XX
, гдеX
— шестнадцатеричная цифра.[ADT]
, т. е. его содержимое не печатается.The text was updated successfully, but these errors were encountered: