OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 15:08

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: Что-то странное с компилятором ББ
СообщениеДобавлено: Понедельник, 08 Апрель, 2019 18:44 

Зарегистрирован: Среда, 31 Октябрь, 2007 18:58
Сообщения: 252
Откуда: Austria, Bruck
Речь о ББ 1.7.1
  • При компиляции больших списков модулей падает, если символьные файлы не созданы.
    Трап, странный и не рабочий - мешанина символов.
  • Компилятор встроенный в исполняемый модуль не компилирует модули с импортом COM.
    В исходниках DevCPT увидел, что при его импорте проверяется флаги DevCPM.options.
    Но не нашел где флаги инициализируются.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 08 Апрель, 2019 19:02 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Чтобы компилировать модули с COM обязательно надо линковать в компилятор WinOle, кажется. Сталкивался с этой проблемой. Поищу, уточню.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 08 Апрель, 2019 19:09 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
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;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 09 Апрель, 2019 10:57 

Зарегистрирован: Среда, 31 Октябрь, 2007 18:58
Сообщения: 252
Откуда: Austria, Bruck
Иван Денисов писал(а):
Чтобы компилировать модули с COM обязательно надо линковать в компилятор WinOle, кажется. Сталкивался с этой проблемой. Поищу, уточню.

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 09 Апрель, 2019 14:29 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Иван Денисов писал(а):
В версии для Linux вот так сделано
Иван, поясните, пожалуйста.
ББ работает в линухе?
А то мы тут замутили АльтЛинукс Образование.
Там Wine есть, но хотелось бы непосредственно.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 09 Апрель, 2019 14:48 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Валерий Лаптев писал(а):
Иван Денисов писал(а):
В версии для Linux вот так сделано
Иван, поясните, пожалуйста.
ББ работает в линухе?
А то мы тут замутили АльтЛинукс Образование.
Там Wine есть, но хотелось бы непосредственно.

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 09 Апрель, 2019 15:32 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Спасибо!!!
Я потом спрошу, где взять дистрибутив... :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 09 Апрель, 2019 18:12 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
На всякий случай: все новые сборки Информатики-21 основаны на кроссплатформенной ББ от Ивана Андреича и Ко.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 09 Апрель, 2019 19:49 
Аватара пользователя

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 10 Апрель, 2019 17:34 

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 10 Апрель, 2019 19:23 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Хорошо, что вам удалось найти. Рекомендую линковать 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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 11 Апрель, 2019 08:20 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
hothing писал(а):
(Мда, ключик/аргумент в опции компилятора добавить нелья было?)

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 11 Апрель, 2019 09:30 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Trurl писал(а):
hothing писал(а):
(Мда, ключик/аргумент в опции компилятора добавить нелья было?)

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 14 Апрель, 2019 08:43 

Зарегистрирован: Среда, 31 Октябрь, 2007 18:58
Сообщения: 252
Откуда: Austria, Bruck
Иван Денисов писал(а):
Разумно будет убрать этот рудимент из компилятора?

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB