EditWYSIWYGAttachPrintable
r12 - 07 Mar 2006 - 08:19:18 - OrloVYou are here: TWiki >  Refaldevel Web > BugsAndArrearage

Ошибки и недоделки

Нужна функция =StdIO.Flush!

Функции ввода/вывода из StdIO должны, по-возможности, работать с буферизованными потоками. Соответственно, нужен способ контролировать буферизацию. Думаю, надо сделать так:

  • функции, работающие со стандартными входным и выходным потоками (Print, Write, Read, ...), автоматически сбрасывают содержимое буферов при окончании работы;
  • функции, для которых явно указывается канал (Print!, Write!, Read!, ...), открывают потоки в режиме по умолчанию (т.е. обычно в построчном для интерактивных устройств и в полностью буферизованном для остальных);
  • поток, связанный с любым каналом, можно синхронизировать с помощью функции Flush!;
  • если очень потребуется, можно потом добавить аналог setvbuf(3) для установки режима буферизации после открытия канала.

-- OrloV - 24 Aug 2005

$use construction in interfaces

Надо запретить использовать $use в интерфейсах.

Сейчас если написать два интерфейса, использующих друг друга, то парсер циклится.

-- OrloV - 17 Mar 2005

С++: Order of global objects initialization

Необходимо для каждого глобального объекта заводить отдельную инициализирующую функцию. Перед инициализацией (также глобального) выражения с использованием некого объекта, его инициализирующая функция должна быть вызвана.

Пример правильного подхода см. в library/StdIO/std_channels.cc и library/Stream/Stream.cc.

Неработающий тестовый пример: samples/Syntax/mutual*.

-- OrloV - 17 Mar 2005

С++: Escape C++ trigraphs.

Пример:
<PrintLN "Quote: 'To be or not???'">;
Работать не будет (не должно - проверить!), потому что последовательность символов ??' имеет в С++ особый смысл -- заменяется на некий одиночный символ. В результате будет напечатано не то, что требовалось.

-- OrloV - 14 Oct 2004

Encoding of refal source.

Необходим способ указать, в какой кодировке написан тот или иной рефал-файл, или даже его часть. Например, сейчас невозможно скомпилировать файл rfp_const.rf, если текущая локаль отлична KOI8-R. Он содержит русские комментарии, и парсер на них ломается.

-- OrloV - 21 Jul 2004

Исправленные ошибки и доделанные фичи

C++: Не всегда работают ссылки на функции из других модулей

Если есть ссылка на функцию с форматом отличным от e = e, то компилятор генерирует функцию-переходник. Конвертор в С++ помещает её в тот же namespace, в котором находится изначальная функция, но не квалифицирует дополнительно имена объектов из того namespace'а, куда помещается переходник, и которыми переходник пользуется. Возникает ошибка на этапе компиляции C++-кода.

Пример: samples/Syntax/ref1.rf.

-- OrloV - 24 Aug 2005

Исправлено.

ToDo Протестировать ссылки на фукнции с одним именем, но из разных модулей.

-- OrloV - 07 Mar 2006

Binding for the system() C function.

Требуется функция System, которая раньше была в модуле UniStd.

-- OrloV - 12 Jul 2004

Сделано. Заодно реализована StdIO.Erase-File.

ToDo Эти функции не описаны ни в книжке, ни в дополнении к ней. Надо описать их!

-- OrloV - 07 Mar 2006

C++: Не реализована =Dos.Randomize

Забыли. Надо сделать.

-- OrloV - 24 Aug 2005

Сделано. Заодно реализована Dos.GetEnv, которой тоже не было.

-- OrloV - 07 Mar 2006

С++: Segfault with UTF-8 locale

Если при запуске программы, скомпилированной с новым рантаймом, локаль выставлена в UTF-8, то происходит segfault внутри glibc-шной функции mbstowcs() на стадии заведения глобальных объектов.

-- OrloV - 12 Jul 2004

Сбой происходил при попытке сконвертировать строку обычных символов в уникод. Дело в том, что бывают такие (мультибайтные) символы, конвертация которых происходит в несколько этапов. Для передачи состояния от одного этапа к другому используется вспомогательная переменная типа mbstate_t. Эта переменная (назовём её state) у нас не инициализировалась, т.е. изначально содержала некий мусор. Иногда этот мусор заставлял думать функцию, осуществляющую непосредственно конвертацию, что она находится в неком промежуточном состоянии при обработке какого-нибудь мультибайтного символа. Это и приводило к падению.

После добавления инициализации состояния нулями:

memset(&state, '\0', sizeof(mbstate_t));
глюки исчезли.

-- OrloV - 21 Jul 2004

Edit | WYSIWYG | Attach | Printable | Raw View | Backlinks: Web, All Webs | History: r13 < r12 < r11 < r10 < r9 | More topic actions...
 
R+

This site is powered by the TWiki collaboration platformCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback