r7 - 05 Mar 2005 - 05:10:00 - OrloVYou are here: TWiki >  Refaldevel Web > CppBackend > CygwinCppBackend
refal-plus.zip (516k): Distributive for Cygwin
(27 Apr 2004)

Постепенно устаревающая версия системы, работающая под Cygwin.

Разработку этой ветви проекта было решено прекратить, обеспечив вместо неё корректную работу со свободно доступным компилятором C++ от Microsoft (cм. Visual Cpp Backend Guide).


При переносе системы под Cygwin обнаружились следующие нестыковки.

  1. В Cygwin не реализована функция getline().
    Реализацию getline() можно позаимствовать отсюда: http://www.klid.dk/pub/gnu/gnu-utils/gnu/txtutil1.22/lib/getline.c. Однако следует помнить, что она GPL, поэтому на программы, полученные при помощи нашего компилятора под Cygwin, будут накладываться GPL'ные ограничения.
  2. В Cygwin не работают функции mbsrtowcs, wcstombs, wcstol,
    вместо них использованы функции strlen, wcslen, wcrtomb.
    Конкретнее:
    • Если функции mbsrtowcs в качестве первого аргумента передается null, она всегда возвращает 0 (должна возвращать длину строки). Вместо нее используется функция strlen. Нет уверенности, что это корректно при всех конфигурациях локали.
    • Функция wcstombs в cygwin отсутствует (проверить!). Вместо неё используется wcslen, затем wcrtomb в цикле.
    • Функция wcstol вроде не всегда работает правильно. Проверить! Сейчас вместо неё используется преобразование в цикле делением на 10.
  3. В связи с ограничениями на использование памяти, накладываемое Cygwin, размеры стэка и хипа уменьшены до 64 Мб. Конкретнее: хип уменьшен с 512 до 64 Mb, стек и хип помещаются вплотную друг к другу в куске размера 128 Mb.
  4. В классе Integer добавлены методы create_epxr(int), create_expr(size_t), create_expr(uintptr_t)
  5. В cygwin отсутствует функция mremap. В связи с этим (в классе HeapAllocator) не используется метод expand класса Heap, а сразу mmap-ится кусок памяти максимального размера.
  6. Класс pxx::Stream не используется (для того чтобы скомпилировать его под Cygwin, надо добавить operator << (wchar_t), а не хочется). В связи с этим, в классе pxx::String удалены операторы <<, которые не используютя в рефал-рантайме.
  7. В Cygwin отсутствует функция swprintf. Написана функция strtowstr, преобразующая char* в wchar_t*, вызывая в цикле mbrtowc. В классах rfrt::Box, rfrt::Vector, rfrt::Channel, rfrt::Table, rfrt::Object изменен метод to_string (использует функцию strtowstr вместо swprintf).
  8. Не понятно, откуда Cygwin берет информацию о текущей локали. Не работают функции ввода-вывода unicode символов, преобразования char в wchar_t и обратно, а так же функции, определяющие класс unicode символов, такие как iswalpha.
Show attachmentsHide attachments
Topic attachments
I Attachment Action Size Date Who Comment
zipzip refal-plus.zip manage 516.8 K 27 Apr 2004 - 16:19 Luba Parmyonova Distributive for Cygwin
Edit | WYSIWYG | Attach | Printable | Raw View | Backlinks: Web, All Webs | History: r7 < r6 < r5 < r4 < r3 | 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