OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 17 Июнь, 2025 01:40

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




Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: inline-процедуры
СообщениеДобавлено: Среда, 14 Октябрь, 2009 20:54 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Выделено. Иницирующее сообщение viewtopic.php?p=36247#p36247
ilovb писал(а):
Кстати процедура Bit в DLL не компонуется почему-то. Нужно в обычную упаковывать...


Кодовые процедуры - это не вызываемые процедуры, на самом деле. А inline (подставляются в место вызова). Со всеми вытекающими.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Побитовый AND
СообщениеДобавлено: Среда, 14 Октябрь, 2009 20:58 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2461
Откуда: Россия, Томск
Илья Ермаков писал(а):
Кодовые процедуры - это не вызываемые процедуры, на самом деле. А inline (подставляются в место вызова). Со всеми вытекающими.
Не означает ли это того, что им нужно запрещать экспортироваться?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Побитовый AND
СообщениеДобавлено: Четверг, 15 Октябрь, 2009 00:13 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Нужно-не нужно, кто его знает..

Но подстановку их выполняет компилятор.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Побитовый AND
СообщениеДобавлено: Четверг, 15 Октябрь, 2009 05:35 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2461
Откуда: Россия, Томск
Илья Ермаков писал(а):
Нужно-не нужно, кто его знает..
При изменении реализации такой процедуры другие модули, которые её используют, будут продолжать использовать старую версию, а не новую, поскольку хранят её инлайн в своём коде, а не импортируют динамически при загрузке. Это бы нарушило сильное правило о том, что конструкция вида Module.Procedure всегда вызывает наиболее актуальную версию, т.е. версию на момент последней компиляции Module.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Побитовый AND
СообщениеДобавлено: Четверг, 15 Октябрь, 2009 06:39 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Александр Ильин писал(а):
Это бы нарушило сильное правило о том, что конструкция вида Module.Procedure всегда вызывает наиболее актуальную версию, т.е. версию на момент последней компиляции Module.

Это правило и так нарушено, поскольку компиляция и загрузка модуля в память - отдельные операции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Побитовый AND
СообщениеДобавлено: Четверг, 15 Октябрь, 2009 07:06 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2461
Откуда: Россия, Томск
Иван Горячев писал(а):
Это правило и так нарушено, поскольку компиляция и загрузка модуля в память - отдельные операции.
Помогите тогда мне более точно идентифицировать проблему с инлайнами. Что нарушается? Или проблемы нет?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Побитовый AND
СообщениеДобавлено: Четверг, 15 Октябрь, 2009 09:13 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Александр Ильин писал(а):
Помогите тогда мне более точно идентифицировать проблему с инлайнами. Что нарушается? Или проблемы нет?

Проблема есть. Я бы сказал в случае с инлайнами нарушается сам принцип модульности - часть кода модуля перестаёт ему принадлежать и начинает неконтролируемо распространяться по системе.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: inline-процедуры
СообщениеДобавлено: Четверг, 15 Октябрь, 2009 09:25 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Не согласен. Средство системное и контролируемое (IMPORT SYSTEM)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: inline-процедуры
СообщениеДобавлено: Четверг, 15 Октябрь, 2009 09:58 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2461
Откуда: Россия, Томск
Евгений Темиргалеев писал(а):
Не согласен. Средство системное и контролируемое (IMPORT SYSTEM)
IMPORT SYSTEM будет в том модуле, который создал процедуру с пометкой [ code ]. А модули, импортировавшие эту процедуру, ничего и не подозревают. В том числе, могут экспортировать дальше, но уже без SYSTEM
Код:
MODULE Low;
IMPORT SYSTEM; (* Напугали. БУ! *)
PROCEDURE [ code ] And* (a, b: INTEGER): INTEGER;
HAX, HAX, HAX;
END Low.

MODULE Middle;
IMPORT Low; (* Уже не так страшно *)
PROCEDURE Add* (a, b: INTEGER): INTEGER;
BEGIN RETURN Low.Add (a, b) (* сюда будет заинлайнено *)
END Add;
END Middle.

MODULE Top;
IMPORT Middle; (* Уже совсем не страшно *)
PROCEDURE Add* (a, b: INTEGER): INTEGER;
BEGIN RETURN Middle.Add (a, b) (* сюда инлайна не будет *)
END Add;
END Top.
После нескольких изменений Low.Add и нескольких перекомпиляций Low и Middle становится довольно трудно предсказать, что именно будет выполнено при вызове Top.Add после перезапуска системы и перезагрузки всех модулей. Если инлайн не используется (либо есть запрет на экспорт code-процедур), то Top.Add выполнит самый последний, текущий вариант Low.Add. Если инлайн используется, то текущий вариант Low.Add будет выполнен только при одном условии: если модуль Middle был перекомпилирован позднее Low. Гарантировать это можно только в том случае, если изменение тела code-процедуры изменяет её сигнатуру, что приводило бы к изменению интерфейса и необходимости перекомпилировать Middle.
Иван Горячев писал(а):
Проблема есть. Я бы сказал в случае с инлайнами нарушается сам принцип модульности - часть кода модуля перестаёт ему принадлежать и начинает неконтролируемо распространяться по системе.
Отлично сказано.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Побитовый AND
СообщениеДобавлено: Четверг, 15 Октябрь, 2009 10:05 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1437
Александр Ильин писал(а):
Это бы нарушило сильное правило о том, что конструкция вида Module.Procedure всегда вызывает наиболее актуальную версию, т.е. версию на момент последней компиляции Module.

Иван Горячев писал(а):
Это правило и так нарушено, поскольку компиляция и загрузка модуля в память - отдельные операции.

Надо просто переформулировать правило: не "на момент последней компиляции", а "на момент последней загрузки".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: inline-процедуры
СообщениеДобавлено: Четверг, 15 Октябрь, 2009 12:36 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Александр Ильин писал(а):
Евгений Темиргалеев писал(а):
Не согласен. Средство системное и контролируемое (IMPORT SYSTEM)
IMPORT SYSTEM будет в том модуле, который создал процедуру с пометкой [ code ]. А модули, импортировавшие эту процедуру, ничего и не подозревают. В том числе, могут экспортировать дальше, но уже без SYSTEM
Если программист использует системные средства, он должен знать чего делает. Наиболее вероятно что инлайн процедура будет использоваться своя в целях какой-то серьёзной оптимизации. Или работы с железом.

Если кто-то написал инлайн процедуру для использования третьими лицами, то он скорее всего плохо думал.

А тут уже нужна доработка загрзучика. Чтобы он непонятно чьи IMPORT SYSTEM модули просто так не загружал.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: inline-процедуры
СообщениеДобавлено: Четверг, 15 Октябрь, 2009 12:48 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4722
Откуда: Россия, Орёл
Погодите. Инлайн вполне может быть допустим в рамках одного модуля. А сквозь границы, как сказал Иван, смысла не имеет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: inline-процедуры
СообщениеДобавлено: Четверг, 15 Октябрь, 2009 18:03 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Но допустим, однако.

Задумано, видимо, для введения операций типа встроенных в язык. В исключительных случаях системного программирования (какое-нить хитрое разыменование, и т.п.).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: inline-процедуры
СообщениеДобавлено: Четверг, 15 Октябрь, 2009 20:55 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1030
Евгений Темиргалеев писал(а):
А тут уже нужна доработка загрузчика. Чтобы он непонятно чьи IMPORT SYSTEM модули просто так не загружал.
И доработка компилятора тоже. Чтобы он понятно чьи модули создавал.


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

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


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

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


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

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