OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Суббота, 21 Июнь, 2025 15:02

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




Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Appendix D.3
СообщениеДобавлено: Вторник, 02 Июнь, 2009 18:46 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Господа, а как вы трактуете/понимаете вот этот пункт:

Цитата:
3) Modules and at least their exported procedures (commands) and exported types must be retrievable dynamically.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Appendix D.3
СообщениеДобавлено: Вторник, 02 Июнь, 2009 19:31 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Alexey Veselovsky писал(а):
Господа, а как вы трактуете/понимаете вот этот пункт:

Цитата:
3) Modules and at least their exported procedures (commands) and exported types must be retrievable dynamically.
А в чем затруднение?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Appendix D.3
СообщениеДобавлено: Вторник, 02 Июнь, 2009 20:25 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Затруднение в трактовке этого пункта ;-)

Ну, например, что значит "dynamically"? Предположим у нас есть некая процедура (или не процедура, а некое ключевое слово, не важно) вроде LoadModule. Так вот, является ли достаточным реализовать LoadModule параметром которой будет строковый литерал (т.е. строка известная на этапе компиляции модуля, например LoadModule("MyModule')), или же Appendix D требует чтобы LoadModule был реализован в т.ч. и для не константных строк (т.е. строк которые могут быть сгенерированы во время исполнения программы, в т.ч. и путем пользовательского ввода)?

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Appendix D.3
СообщениеДобавлено: Вторник, 02 Июнь, 2009 20:54 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2461
Откуда: Россия, Томск
"retrievable" не имеет отношения к загрузке модулей. Здесь речь о получении списка (уже) загруженных модулей в ран-тайм, плюс базовой метаинформации о них. XDS этому пункту соответствует, но все модули линкует статически (кроме DLL).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Appendix D.3
СообщениеДобавлено: Вторник, 02 Июнь, 2009 21:15 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Александр Ильин писал(а):
"retrievable" не имеет отношения к загрузке модулей. Здесь речь о получении списка (уже) загруженных модулей в ран-тайм, плюс базовой метаинформации о них. XDS этому пункту соответствует, но все модули линкует статически (кроме DLL).


Забавно, не думал что расхождение в формулировках и понимании столь глубоко ;-)

Вот "официальный" перевод этого фрагмента на русский:
Цитата:
3) Модули и по крайней мере их экспортированные процедуры (команды) и экспортированные типы должны быть доступны динамически.


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

"доступны динамически" лично я интерпретировал, как: мы имеем право получить доступ к тому чего небыло на этапе компиляции. Т.е. мы можем сказать LoadModule("MyModule") (т.е. на этапе компиляции мы конечно знаем это самое слово -- MyModule, но о самом модуле ни сном ни духом), и затем у этого самого модуля дернуть пару-тройку процедур, ака команд.

Т.о. про метаинформацию нет ничего (кроме разве что имен модулей (а эта метаинформация может быть просто в имени файла модуля) и сигнатур процедур-команд), зато про загрузку модулей есть вполне:

Цитата:
3) Modules and at least their exported procedures (commands) and exported types must be retrievable dynamically. If necessary, this may cause modules to be loaded.


Вот этот пункт целиком + перевод:
Цитата:
3) Modules and at least their exported procedures (commands) and exported types must be retrievable dynamically. If necessary, this may cause modules to be loaded. The programming interface used to load modules or to access the mentioned meta information is not defined by the language, but the language compiler needs to preserve this information when generating code.
Except for fully linked applications where no modules will ever be added at run-time, a linking loader for modules is required. Embedded systems are important examples of applications that can be fully linked.


Цитата:
3) Модули и по крайней мере их экспортированные процедуры (команды) и экспортированные типы должны быть доступны динамически. В случае необходимости это может вызывать загрузку модулей. Программный интерфейс, используемый для загрузки модулей или для доступа к указанной мета-информации, не определяется языком, но компилятор должен сохранять эту информацию при генерации кода.
За исключением полностью слинкованных приложений, в которых при исполнения не нужно загружать никакие модули, для модулей требуется динамический загрузчик. Встроенные системы являются важными примерами приложений, которые могут быть полностью слинкованы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Appendix D.3
СообщениеДобавлено: Вторник, 02 Июнь, 2009 22:42 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Александр Ильин писал(а):
"retrievable" не имеет отношения к загрузке модулей.
Все-таки имеет.

В этом фрагменте просто явно оговаривается обязательная в Оберонах, но не вполне родная для традиционных систем возможность вызывать команды, полные имена которых (Модуль.Команда) к моменту вызова материализуются "из ниоткуда".

Никаких дополнительных смыслов искать тут на свою голову не следует.
Хотя, конечно, хочется, -- когда такая базовая вещь жуется в столько слов...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Appendix D.3
СообщениеДобавлено: Вторник, 02 Июнь, 2009 22:53 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Info21 писал(а):
Александр Ильин писал(а):
"retrievable" не имеет отношения к загрузке модулей.
Все-таки имеет.

В этом фрагменте просто явно оговаривается обязательная в Оберонах, но не вполне родная для традиционных систем возможность вызывать команды, полные имена которых (Модуль.Команда) к моменту вызова материализуются "из ниоткуда".


Эмм.. Это как? Т.е. я могу не импортируя никаких модулей написать в коде ту самую MyModule.Cmd и оно само попробует найти нужный модуль и вызвать эту процедуру?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Appendix D.3
СообщениеДобавлено: Вторник, 02 Июнь, 2009 23:24 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2461
Откуда: Россия, Томск
Alexey Veselovsky писал(а):
"доступны динамически" лично я интерпретировал, как: мы имеем право получить доступ к тому чего небыло на этапе компиляции. Т.е. мы можем сказать LoadModule("MyModule")
С чего вы взяли LoadModule? Там говорится скорее о FindModule("MyModule"). "Доступны динамически" не новые модули, которых не было в момент компиляции, а информация о доступных на момент исполнения модулях.
Alexey Veselovsky писал(а):
Т.о. про метаинформацию нет ничего (кроме разве что имен модулей (а эта метаинформация может быть просто в имени файла модуля) и сигнатур процедур-команд), зато про загрузку модулей есть вполне:
Цитаты хорошие, только надо внимательно читать. Во-первых, про метаинформацию там есть (meta information), во-вторых:
Цитата:
If necessary, this may cause modules to be loaded.
Может будут загружены, а может и не будут - в зависимости от реализации. Слово "may" означает "может", а не "должен". Отдельно проговорено, что в случае встроенных систем никакой загрузки ожидать не приходится, т.е. это возможность дополнительная. А основная возможность, как я и говорю, - в том, чтобы получить ссылку на модуль по имени, если модуль с таким именем присутствует (в памяти или, если есть динамический загрузчик, на диске), а потом уже найти там по имени нужную команду или экспортированный тип.

Смотрим на реализаицю XDS. Напомню, что в XDS только статическая линковка. Описание модуля oberonRTS.
PROCEDURE Search(name: ARRAY OF CHAR): Module;
(* Returns a module by its name or nullModule. *)
PROCEDURE ThisCommand(m: Module; name: ARRAY OF CHAR): Command;
(* Returns the command (parameterless procedure) named "name" in the module m or NIL, if the command does not exist. *)

Пример кода (только что накидал, не компилировал):
Код:
PROCEDURE RunCmd* (modName, cmdName: ARRAY OF CHAR);
VAR
   mod: oberonRTS.Module;
   cmd: oberonRTS.Command; (* TYPE Command = PROCEDURE (); *)
BEGIN
   mod := oberonRTS.Search (modName);
   IF mod # oberonRTS.nullModule THEN
      cmd := oberonRTS.ThisCommand (mod, cmdName);
      IF cmd # NIL THEN
         cmd (); (* Выполняем найденную команду *)
      END
   END
END RunCmd;
RunCmd ('MyModule', 'MyCmd'); (* Выполнится MyModule.MyCmd при условии, что модуль MyModule прилинкован и содержит экспортированную процедуру MyCmd без параметров. Тот, кто вызывает RunCmd не обязан импортировать MyModule ни прямо, ни косвенно. Вот это и есть "retrievable dynamically", не путайте с "loadable dynamically". *)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Appendix D.3
СообщениеДобавлено: Вторник, 02 Июнь, 2009 23:25 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2461
Откуда: Россия, Томск
Alexey Veselovsky писал(а):
Эмм.. Это как? Т.е. я могу не импортируя никаких модулей написать в коде ту самую MyModule.Cmd и оно само попробует найти нужный модуль и вызвать эту процедуру?
Не понимаю вашего удивления. Любой коммандер в BlackBox именно это и делает. Только не напрямую в коде надо писать, а через доступ к метаинформации (модуль Meta в BlackBox, oberonRTS в XDS) получить ссылку-указатель на процедуру, затем её по указателю вызвать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Appendix D.3
СообщениеДобавлено: Вторник, 02 Июнь, 2009 23:42 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Александр Ильин писал(а):
Alexey Veselovsky писал(а):
Эмм.. Это как? Т.е. я могу не импортируя никаких модулей написать в коде ту самую MyModule.Cmd и оно само попробует найти нужный модуль и вызвать эту процедуру?
Не понимаю вашего удивления. Любой коммандер в BlackBox именно это и делает. Только не напрямую в коде надо писать, а через доступ к метаинформации (модуль Meta в BlackBox, oberonRTS в XDS) получить ссылку-указатель на процедуру, затем её по указателю вызвать.


А собственно при чем тут BB? Мы обсуждаем language report. Судя по формальному описанию синтаксиса в КП всё есть модуль, вне модуля нет ничего. А поскольку команда это обычная процедура без параметров которая при этом экспортируется (это явно описано), делаю вывод что команда вызывается в точности также как и любая процедура. Учитывая замечание Info21, приходим к выводу что можем вызвать процедуру явно не импортируя её модуль. Просто написать в своей функции/процедуре MyModule.Cmd, и оно будет вызвано (при необходимости модуль MyModule будет в этот момент загружен), или не будет вызвано и у нас случится UB, если модуль с таковым именем не будет найден.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Appendix D.3
СообщениеДобавлено: Вторник, 02 Июнь, 2009 23:47 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Alexey Veselovsky писал(а):
А собственно при чем тут BB? Мы обсуждаем language report.
Но приложение формулирует обязательные требования к среде исполнения.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Appendix D.3
СообщениеДобавлено: Вторник, 02 Июнь, 2009 23:54 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Info21 писал(а):
Alexey Veselovsky писал(а):
А собственно при чем тут BB? Мы обсуждаем language report.
Но приложение формулирует обязательные требования к среде исполнения.


Да. Вот и пытаемся выяснить что же это за требования такие.

Нигде не описано где писать эти самые Module.Cmd, т.е. не описана командная оболочка, следовательно делаем вывод что это не оно имеется тут ввиду. А нечто другое.

Видимо под "Mandatory Requirements for Environment" подразумеваются требования к рантайму. Т.е. сборка мусора там, типизация времени исполнения и прочее что касается непосредственно ИСПОЛНЕНИЯ данной программы писаной на КП. Но никак не шелл программиста или пользователя.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Appendix D.3
СообщениеДобавлено: Среда, 03 Июнь, 2009 00:01 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2461
Откуда: Россия, Томск
Alexey Veselovsky писал(а):
А собственно при чем тут BB? Мы обсуждаем language report.
Вообще-то мы обсуждаем не language report, а приложение к нему. И приложение это посвящено рантайм-окружению, не являющемуся частью языка. Вот цитата:
Цитата:
Appendix D: The Oberon Environment
Oberon-2 programs usually run in an environment that provides command activation, garbage collection, dynamic loading of modules, and certain run time data structures. Although not part of the language, this environment contributes to the power of Oberon-2 and is to some degree implied by the language definition.
Жирным выделил я, курсив авторский.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Appendix D.3
СообщениеДобавлено: Среда, 03 Июнь, 2009 00:06 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2461
Откуда: Россия, Томск
Alexey Veselovsky писал(а):
Нигде не описано где писать эти самые Module.Cmd, т.е. не описана командная оболочка, следовательно делаем вывод что это не оно имеется тут ввиду. А нечто другое.
Во-первых, не вижу логики, во-вторых, вспоминаем приведённую вами ранее читату:
Цитата:
3) Modules and at least their exported procedures (commands) and exported types must be retrievable dynamically. If necessary, this may cause modules to be loaded. The programming interface used to load modules or to access the mentioned meta information is not defined by the language, but the language compiler needs to preserve this information when generating code.
Языком не задаётся, т.е. как реализуете, так и будет. Как реализовано в BlackBox и XDS я вам вкратце описал. В ОС Oberon реализовано примерно так же.


Последний раз редактировалось Александр Ильин Среда, 03 Июнь, 2009 00:07, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Appendix D.3
СообщениеДобавлено: Среда, 03 Июнь, 2009 00:06 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Александр Ильин писал(а):
Alexey Veselovsky писал(а):
А собственно при чем тут BB? Мы обсуждаем language report.
Вообще-то мы обсуждаем не language report, а приложение к нему. И приложение это посвящено рантайм-окружению, не являющемуся частью языка. Вот цитата:
Цитата:
Appendix D: The Oberon Environment
Oberon-2 programs usually run in an environment that provides command activation, garbage collection, dynamic loading of modules, and certain run time data structures. Although not part of the language, this environment contributes to the power of Oberon-2 and is to some degree implied by the language definition.
Жирным выделил я, курсив авторский.


Штука в том, что конкретно этот подфорум посвящен не Oberon-2, а Component Pascal т.о. мы обсуждаем language report CP.

И там сказано следующее:
Цитата:
Appendix D: Mandatory Requirements for Environment

The Component Pascal definition implicitly relies on four fundamental assumptions.

1) There exists some run-time type information that allows to check the dynamic type of an object. This is necessary to implement type tests and type guards.

2) There is no DISPOSE procedure. Memory cannot be deallocated manually, since this would introduce the safety problem of memory leaks and of dangling pointers, i.e., premature deallocation. Except for those embedded systems where no dynamic memory is used, or where it can be allocated once and never needs to be released, an automatic garbage collector is required.

3) Modules and at least their exported procedures (commands) and exported types must be retrievable dynamically. If necessary, this may cause modules to be loaded. The programming interface used to load modules or to access the mentioned meta information is not defined by the language, but the language compiler needs to preserve this information when generating code.
Except for fully linked applications where no modules will ever be added at run-time, a linking loader for modules is required. Embedded systems are important examples of applications that can be fully linked.

4) The environment must provide the ability to display Unicode characters, except for "headless" embedded applications that need no display.

An implementation that doesn't fulfill these compiler and environment requirements is not compliant with Component Pascal.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Appendix D.3
СообщениеДобавлено: Среда, 03 Июнь, 2009 00:13 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2461
Откуда: Россия, Томск
Alexey Veselovsky писал(а):
Штука в том, что конкретно этот подфорум посвящен не Oberon-2, а Component Pascal т.о. мы обсуждаем language report CP.
Прошу прощения, я что-то думал про Oberon-2, а не про КП. Невнимательность с моей стороны.
Alexey Veselovsky писал(а):
И там сказано следующее:
Цитата:
Appendix D: Mandatory Requirements for Environment
...
An implementation that doesn't fulfill these compiler and environment requirements is not compliant with Component Pascal.
В последнем предложении "compliant" по смыслу можно заменить на "compatible". Т.е. это минимальные требования к среде, чтобы она была совместима с языком КП, но среда не становится от этого частью языка.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Appendix D.3
СообщениеДобавлено: Среда, 03 Июнь, 2009 00:27 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Александр Ильин писал(а):
Alexey Veselovsky писал(а):
И там сказано следующее:
Цитата:
Appendix D: Mandatory Requirements for Environment
...
An implementation that doesn't fulfill these compiler and environment requirements is not compliant with Component Pascal.
В последнем предложении "compliant" по смыслу можно заменить на "compatible". Т.е. это минимальные требования к среде, чтобы она была совместима с языком КП, но среда не становится от этого частью языка.


Да нет, это не минимальные требования к среде, это минимальные требования к реализации (implementation), которая должна удовлетворять как компиляторным требованиям так и к требованиям "средовым".

Опять же, цитата из "официального" перевода:
Цитата:
Реализация, которая не удовлетворяет этим требованиям к компилятору и среде выполнения, не считается удовлетворяющей определению Компонентного Паскаля.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Appendix D.3
СообщениеДобавлено: Среда, 03 Июнь, 2009 00:51 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Appendix D.3
СообщениеДобавлено: Среда, 03 Июнь, 2009 00:54 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Подводя некий (предварительный?) итог:

1) При компиляции компилятор должен сохранять информацию о имени модуля + списка экспортируемых процедур с из полными сигнатурами. Причем это так даже для статически скомпонованого приложения.

2) Реализовывать какой-либо програмный интерфейс для вытаскивания информации (1) не обязательно, ибо оный програмный интерфейс никак не определен в сообщении о языке и его приложениях. Однако программист в случае необходимости может сам это релизовать, ибо информация всё таки есть и известен её формат в данной конкретной реализации.

3) Если у нас не статически скомпонованое приложение, то обязателен динамический загрузчик модулей. (гм. что вообще говоря логично, интересно как можно в рантайме загрузить модуль не имея динамического загрузчика? или же тут подразумевается что уж динамический загрузчик то рантайм должен предоставлять, а не заставлять реализовывать его программиста?)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Appendix D.3
СообщениеДобавлено: Среда, 03 Июнь, 2009 16:54 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Всё верно?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2  След.

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


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

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


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

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