OberonCore
https://forum.oberoncore.ru/

Что-то странное с компилятором ББ
https://forum.oberoncore.ru/viewtopic.php?f=2&t=6378
Страница 1 из 1

Автор:  hothing [ Понедельник, 08 Апрель, 2019 18:44 ]
Заголовок сообщения:  Что-то странное с компилятором ББ

Речь о ББ 1.7.1
  • При компиляции больших списков модулей падает, если символьные файлы не созданы.
    Трап, странный и не рабочий - мешанина символов.
  • Компилятор встроенный в исполняемый модуль не компилирует модули с импортом COM.
    В исходниках DevCPT увидел, что при его импорте проверяется флаги DevCPM.options.
    Но не нашел где флаги инициализируются.

Кто-нибудь знает где инициализируется DevCPM.options?

Автор:  Иван Денисов [ Понедельник, 08 Апрель, 2019 19:02 ]
Заголовок сообщения:  Re: Что-то странное с компилятором ББ

Чтобы компилировать модули с COM обязательно надо линковать в компилятор WinOle, кажется. Сталкивался с этой проблемой. Поищу, уточню.

"встроенный в исполняемый модуль" это что значит?

Автор:  Иван Денисов [ Понедельник, 08 Апрель, 2019 19:09 ]
Заголовок сообщения:  Re: Что-то странное с компилятором ББ

hothing писал(а):
[list][*] При компиляции больших списков модулей падает, если символьные файлы не созданы.
Трап, странный и не рабочий - мешанина символов.[/*]

Это скорее всего из-за коллизии при создании временных файлов.

Вот мы обсуждали как-то эту проблему. Если создается больше 200 временных файлов в секунду. То это теоретически может объяснить баг.
Код:
   PROCEDURE CreateFile (f: File; VAR res: INTEGER);
      VAR num, n: INTEGER;
   BEGIN
      IF f.name = "" THEN
         num := WinApi.GetTickCount(); n := 200;
         REPEAT
            GetTempFileName(f.loc.path, f.name, num); INC(num); DEC(n);
            OpenFile(create, f.name, f.ref, res)
         UNTIL (res # fileExistsErr) & (res # alreadyExistsErr) & (res # paramErr) OR (n = 0)
      ELSE
         OpenFile(f.state, f.name, f.ref, res)
      END
   END CreateFile;

Это реально слабое место в системе. Но пока так.

В версии для Linux вот так сделано

Код:
   PROCEDURE GetTempFileName (IN path: FullName; OUT name: FullName; num: INTEGER);
      VAR i: INTEGER; str: ARRAY 16 OF CHAR;
   BEGIN
      str := tempName; i := 7;
      WHILE i > 2 DO
         str[i] := CHR(num MOD 10 + ORD("0")); DEC(i); num := num DIV 10
      END;
      Append(path, str, "", 8, name)
   END GetTempFileName;
   
   PROCEDURE CreateFile (f: File; VAR res: INTEGER);
      VAR num, n: INTEGER;
   BEGIN
      IF f.name = "" THEN
         num := LinLibc.clock(); n := 200;
         REPEAT
            GetTempFileName(f.loc.path, f.name, num); INC(num); DEC(n);
            OpenFile(create, f.name, f.ref, res)
         UNTIL (res # fileExistsErr) OR (n = 0)
      ELSE
         OpenFile(f.state, f.name, f.ref, res)
      END
   END CreateFile;

Автор:  hothing [ Вторник, 09 Апрель, 2019 10:57 ]
Заголовок сообщения:  Re: Что-то странное с компилятором ББ

Иван Денисов писал(а):
Чтобы компилировать модули с COM обязательно надо линковать в компилятор WinOle, кажется. Сталкивался с этой проблемой. Поищу, уточню.

Спасибо за наводку.

Цитата:
"встроенный в исполняемый модуль" это что значит?
В Exe-файл.

Автор:  Валерий Лаптев [ Вторник, 09 Апрель, 2019 14:29 ]
Заголовок сообщения:  Re: Что-то странное с компилятором ББ

Иван Денисов писал(а):
В версии для Linux вот так сделано
Иван, поясните, пожалуйста.
ББ работает в линухе?
А то мы тут замутили АльтЛинукс Образование.
Там Wine есть, но хотелось бы непосредственно.

Автор:  Иван Денисов [ Вторник, 09 Апрель, 2019 14:48 ]
Заголовок сообщения:  Re: Что-то странное с компилятором ББ

Валерий Лаптев писал(а):
Иван Денисов писал(а):
В версии для Linux вот так сделано
Иван, поясните, пожалуйста.
ББ работает в линухе?
А то мы тут замутили АльтЛинукс Образование.
Там Wine есть, но хотелось бы непосредственно.

Да, работает. В статусе альфа-версии, но вполне стабильно. Есть что в нем дорабатывать, но будет мотив ускорить дело :)

Вложение:
Снимок экрана от 2019-04-09 18-48-14.png
Снимок экрана от 2019-04-09 18-48-14.png [ 740.02 КБ | Просмотров: 9214 ]

Автор:  Валерий Лаптев [ Вторник, 09 Апрель, 2019 15:32 ]
Заголовок сообщения:  Re: Что-то странное с компилятором ББ

Спасибо!!!
Я потом спрошу, где взять дистрибутив... :)

Автор:  Info21 [ Вторник, 09 Апрель, 2019 18:12 ]
Заголовок сообщения:  Re: Что-то странное с компилятором ББ

На всякий случай: все новые сборки Информатики-21 основаны на кроссплатформенной ББ от Ивана Андреича и Ко.

Автор:  Иван Денисов [ Вторник, 09 Апрель, 2019 19:49 ]
Заголовок сообщения:  Re: Что-то странное с компилятором ББ

Иван Денисов писал(а):
Чтобы компилировать модули с COM обязательно надо линковать в компилятор WinOle, кажется. Сталкивался с этой проблемой. Поищу, уточню

Нигде ни, в почте ни в сообщениях на форумах, ни в личной переписке, ни в репозиториях не смог найти обсуждение этого...

Автор:  hothing [ Среда, 10 Апрель, 2019 17:34 ]
Заголовок сообщения:  Re: Что-то странное с компилятором ББ

Разобрался с п.2. Источник проблемы лежит в DevCompiler, в двух процедурах: Init + Module(...).
Метод включения DTC весьма своеобразный: проверяется наличие файла ComDebug.ocf в Dev/Code. (Мда, ключик/аргумент в опции компилятора добавить нелья было?)

UPD Изменил код процедуры Init так, что через модуль Meta проверяется наличие модуля DevComDebug, если не найден файл. Не знаю насколько это корректное решение.

Автор:  Иван Денисов [ Среда, 10 Апрель, 2019 19:23 ]
Заголовок сообщения:  Re: Что-то странное с компилятором ББ

Хорошо, что вам удалось найти. Рекомендую линковать DevComDebug в компилятор. Так сделано в Центре и в нашем хранилище. У меня были подозрения, что это именно DevComDebug, так как он последний в списке на упаковку независимого консольного компилятора. Мы его как раз в конце добавляли, когда обнаружили, что COM не компилируется. Но не нашел никаких следов этого обсуждения, поэтому не написал.

Код:
@echo off
copy dev0new.exe tmp.exe
@echo DevCompiler.CompileThis HostPackedFiles DevPacker > tmp.txt
@echo DevPacker.PackThis dev0new.exe := Code/Init.ocf Host/Code/Console.ocf Code/Console.ocf Host/Code/Lang.ocf Code/Dialog.ocf Host/Code/Fonts.ocf Code/Fonts.ocf Host/Code/Windows.ocf Code/Windows.ocf Code/Ports.ocf Code/Services.ocf Code/Stores.ocf Code/Strings.ocf Code/Math.ocf Code/Sequencers.ocf Code/Models.ocf Code/Views.ocf Code/Log.ocf Code/Converters.ocf Code/Meta.ocf Code/Controllers.ocf Code/Properties.ocf Code/Containers.ocf Code/Mechanisms.ocf Code/Documents.ocf Code/Dates.ocf Code/Printers.ocf Code/Printing.ocf Host/Code/Dates.ocf Host/Code/Dialog.ocf Std/Code/Interpreter.ocf Std/Code/Dialog.ocf Std/Code/Log.ocf Text/Code/Models.ocf Text/Code/Mappers.ocf Text/Code/Rulers.ocf Text/Code/Views.ocf Text/Code/Setters.ocf Text/Code/Controllers.ocf Cons/Code/Log.ocf Code/Config.ocf Cons/Code/Interp.ocf Dev/Code/Commanders.ocf Code/Controls.ocf Std/Code/CFrames.ocf Dev/Code/Compiler.ocf Dev/Code/Markers.ocf Dev/Code/Selectors.ocf Dev/Code/CPM.ocf Dev/Code/CPT.ocf Dev/Code/CPB.ocf Dev/Code/CPP.ocf Dev/Code/CPS.ocf Dev/Code/CPE.ocf Dev/Code/CPV486.ocf Dev/Code/CPH.ocf Dev/Code/CPL486.ocf Dev/Code/CPC486.ocf Std/Code/ETHConv.ocf Host/Code/TextConv.ocf Dev/Code/Linker.ocf Cons/Code/Compiler.ocf Host/Code/Registry.ocf Dev/Code/References.ocf Dev/Code/Debug.ocf Dev/Code/ComDebug.ocf >> tmp.txt
@echo Kernel.Quit(0) >> tmp.txt
tmp.exe < tmp.txt
del tmp.txt
del tmp.exe

Автор:  Trurl [ Четверг, 11 Апрель, 2019 08:20 ]
Заголовок сообщения:  Re: Что-то странное с компилятором ББ

hothing писал(а):
(Мда, ключик/аргумент в опции компилятора добавить нелья было?)

Это осталось с тех времен, когда DTC Compiler продавался отдельно.

Автор:  Иван Денисов [ Четверг, 11 Апрель, 2019 09:30 ]
Заголовок сообщения:  Re: Что-то странное с компилятором ББ

Trurl писал(а):
hothing писал(а):
(Мда, ключик/аргумент в опции компилятора добавить нелья было?)

Это осталось с тех времен, когда DTC Compiler продавался отдельно.

Разумно будет убрать этот рудимент из компилятора?

Автор:  hothing [ Воскресенье, 14 Апрель, 2019 08:43 ]
Заголовок сообщения:  Re: Что-то странное с компилятором ББ

Иван Денисов писал(а):
Разумно будет убрать этот рудимент из компилятора?

Убрать опцию или сам DTC? А последний реально выделить как опциональную надстройку к компилятору? Это и будет ответ.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/