OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Суббота, 20 Апрель, 2024 07:53

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




Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
СообщениеДобавлено: Среда, 27 Январь, 2010 10:02 

Зарегистрирован: Суббота, 06 Июнь, 2009 07:52
Сообщения: 329
viewtopic.php?f=30&t=615&sid=e11407d60b8529449db251ecb56d7f52&start=40
Vlad писал(а):
Дмитрий Сурков писал(а):
Если разработчик на каком-то этапе решает добавить проверку пост-условия в свою процедуру, или послать уведомление о выполнении операции, то сделать это надежно, без сильного изменения логики процедуры, можно лишь в том случае, если в ней нет операторов RETURN.


1) Проверку пост-условий можно вынести в отдельную процедуру.
2) Некоторые языки позволяют сделать это явно или более другими способами, нежели явным ASSERT в конце функции.
Вот несколько другой вариант модификации процедуры. Пересобираем ВВ
Код:
(!) DevLinker.Link
BlackBox.exe := Kernel$+ Log Files HostFiles StdLoader
1 Applogo.ico 2 Doclogo.ico 3 SFLogo.ico 4 CFLogo.ico 5 DtyLogo.ico
1 Move.cur 2 Copy.cur 3 Link.cur 4 Pick.cur 5 Stop.cur 6 Hand.cur 7 Table.cur
В модуле Services дополняем процедуру SameType вполне тривиальной строкой,
Код:
 MODULE Services;
IMPORT SYSTEM, Kernel, Log;

PROCEDURE SameType* (IN ra, rb: ANYREC): BOOLEAN;
   BEGIN
      Log.String("Test"); Log.Ln;
      RETURN Kernel.TypeOf(ra) = Kernel.TypeOf(rb)
   END SameType;
компилируем без ошибки и ВВ перестает запускаться. Почему?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модификация процедуры
СообщениеДобавлено: Среда, 27 Январь, 2010 10:25 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Прилинкуйте ещё StdLog.

Log - интерфейсный модуль (его реализация в StdLog).

Аналогично как в Files и HostFiles: Files - интерфейс, HostFiles - реализация.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модификация процедуры
СообщениеДобавлено: Среда, 27 Январь, 2010 11:11 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
А зачем линковать Log? Services всё равно динамически грузится


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модификация процедуры
СообщениеДобавлено: Среда, 27 Январь, 2010 12:49 

Зарегистрирован: Суббота, 06 Июнь, 2009 07:52
Сообщения: 329
Евгений Темиргалеев писал(а):
А зачем линковать Log?
Модуль Log я прилинковал для чистоты эксперимента.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модификация процедуры
СообщениеДобавлено: Среда, 27 Январь, 2010 12:50 

Зарегистрирован: Суббота, 06 Июнь, 2009 07:52
Сообщения: 329
Сергей Губанов писал(а):
Прилинкуйте ещё StdLog.

Log - интерфейсный модуль (его реализация в StdLog).

Аналогично как в Files и HostFiles: Files - интерфейс, HostFiles - реализация.
Пересобрал ВВ в следующей конфигурации
Код:
(!)DevLinker.Link
BlackBox.exe := Kernel$+ Files HostFiles StdLoader Math Strings Dates Meta Dialog Services Fonts Ports Stores Log Converters Sequencers Models Printers Views Controllers Properties Printing Mechanisms Containers Documents Windows StdCFrames Controls StdDialog StdApi StdCmds StdInterpreter HostRegistry HostFonts HostPorts OleData HostMechanisms HostWindows HostPrinters HostClipboard HostCFrames HostDialog HostCmds HostMenus HostPictures TextModels TextRulers TextSetters TextViews TextControllers TextMappers StdLog (* Init *)
При запуске ВВ запрашивает прилинкованный Init. Сообщение: Startup: code file not found. Здесь возникает еще вопрос: почему Init динамически загружается только стандартным ВВ?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Январь, 2010 15:48 

Зарегистрирован: Суббота, 06 Июнь, 2009 07:52
Сообщения: 329
Попробовал повторить тест во вновь установленном чистом ВВ, без рабочей папки. Первоначально система загружается без видимых ошибок, но попытки открыть любой символьный файл заканчиваются сообщением о переполнении стека.
Код:
stack overflow
-   TextModels. StdWriter. WriterChar (pc=000053BD, fp=00032018)
-   TextMappers.Formatter.WriteChar (pc=000019E0, fp=00032028)
-   TextMappers.Formatter.WriteString (pc=00001AF2, fp=0003204C)
-   StdLog.LogHook.String (pc=00000820, fp=00032064)
-   Log.String (pc=0000019A, fp=0003208C)
-   Services.SameType (pc=000006A2, fp=000320A4)
-   TextModels. Attributes.Equals (pc=00000593, fp=000320BC)
-   TextModels.WriteChar (pc=000051BA, fp=000320EC)
-   TextModels.StdWrite.WriteChar (pc=0000544D, fp=00032120)
-   TextMappers.Formatter.WriteChar (pc=000019E0, fp=00032130)
-   TextMappers.Formatter.WriteString (pc=00001AF2, fp=00032154)
-   StdLog.LogHook.String (pc=00000820, fp=0003216C)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модификация процедуры
СообщениеДобавлено: Среда, 27 Январь, 2010 16:17 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
id_ler писал(а):
Евгений Темиргалеев писал(а):
А зачем линковать Log?
Модуль Log я прилинковал для чистоты эксперимента.
Так понимаю, что
id_ler писал(а):
В модуле Services дополняем процедуру SameType вполне тривиальной строкой,
и
id_ler писал(а):
компилируем без ошибки и ВВ перестает запускаться. Почему?
никак не связано (если дело в линковке Log без StdLog)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Январь, 2010 16:21 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
id_ler писал(а):
Попробовал повторить тест...
В дампе видна бесконечная рекурсия Log.String = переполнение стэка.

Если Вы хотите чтобы Вам помогли разобраться, надо пожалуй подробно описать Ваши действия, по пунктам.
- Что, где меняли
- Как собирали
- Как запускали

Думаю будет лучше приложить ББ-документ с описанием.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Январь, 2010 16:42 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
id_ler писал(а):
В модуле Services дополняем процедуру SameType вполне тривиальной строкой


Эта "тривиальная строка" приводит к бесконечной рекурсии.
При вставке текста в TextModels.StdModel вызывается Services.SameType.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Январь, 2010 17:53 

Зарегистрирован: Суббота, 06 Июнь, 2009 07:52
Сообщения: 329
Евгений Темиргалеев писал(а):
Думаю будет лучше приложить ББ-документ с описанием.
Снова установил ВВ из SetupBlackBox15.exe с «чистого листа» и без рабочей директории, дописал Log в секцию импорта и Log.String(“Test”); Log.Ln; в процедуру SameType модуля Services. После компиляции были созданы папка Code и Sym, что обычно. Запустил ВВ и попытался открыть символьный файл System/Code/Services.osf. Это минимально необходимые действия, чтобы получить сообщение о переполнении стека.

Конфигурация в рабочей системе просто показала такой эффект, теперь, я полагаю, что в ней нет проблемы.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 28 Январь, 2010 12:22 

Зарегистрирован: Суббота, 06 Июнь, 2009 07:52
Сообщения: 329
Еще к вопросу о линковке модуля Init. Его требуется прилинковать, если прилинковать модуль HostRegistry.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 28 Январь, 2010 14:45 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Вы эксперименты проводите :) или для какой задачи?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 29 Январь, 2010 19:13 

Зарегистрирован: Суббота, 06 Июнь, 2009 07:52
Сообщения: 329
Евгений Темиргалеев писал(а):
Вы эксперименты проводите :) или для какой задачи?
Определенной необходимости в написании конкретной программы нет. Т.е. нет ни опыта программирования, да и применять его негде было бы. Теоретически, интересная задача – объединить Бутылку\Оберон и ВВ на основе SDL для Linux/Windows, но информации для этого мало. Имею представление о WinApi – переписал непортабельные модули из Оберона в ВВ, а дальше его надо изучать. Вот и экспериментирую.


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

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


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

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


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

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