OberonCore

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

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




Начать новую тему Ответить на тему  [ Сообщений: 16 ] 
Автор Сообщение
 Заголовок сообщения: Процедурная константа
СообщениеДобавлено: Вторник, 12 Июнь, 2018 09:23 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 686
Откуда: Казань
Просматривал статью https://cyberleninka.ru/article/v/protsedury-kak-dannye-i-zadacha-obhoda-spiska и там нашел такую фразу про процедурные константы. Про процедурные переменные я слышал, но про процедурные константы встретилось впервые.
Возможны ли в Оберонах процедурные константы? Поддерживаются ли они компиляторами?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Процедурная константа
СообщениеДобавлено: Вторник, 12 Июнь, 2018 12:27 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 686
Откуда: Казань
Но вопрос не по статье, ссылку на которую я привел. Там под процедурной константой понимается просто имя существующей процедуры.
Вопрос про том, можно ли например описывать константы следующим образом?
Код:
MODULE SomeName;

  CONST
    SomeConst = Module.Func;

END SomeName.

или как вариант внутри процедуры завести константую функцию на вышеопределенную процедуру, например так:
Код:
PROCEDURE Proc1;
BEGIN
END Proc1;

PROCEDURE Proc2;
CONST
   SomeConstant = Proc1;
BEGIN
END Proc2;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Процедурная константа
СообщениеДобавлено: Вторник, 12 Июнь, 2018 13:07 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 643
Откуда: Киев
Авторское сообщение о языке говорит о константах слишком размыто. Поэтому возможна такая интерпретация, в которой процедурные константы возможны, если в воплощении транслятора адрес процедуры может быть вычислен во время трансляции без необходимости выполнения.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Процедурная константа
СообщениеДобавлено: Вторник, 12 Июнь, 2018 13:49 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 686
Откуда: Казань
Вообще, как мне кажется, константы в Оберонах являются воплощением "динамического программирования". Так как одному и тому же имени можно присвоить, и число, и символ, и строку и указатель (например, NIL). Так что присваивание процедур константам еще бы расширило возможности "динамического программирования", если так можно выразиться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Процедурная константа
СообщениеДобавлено: Вторник, 12 Июнь, 2018 14:24 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 643
Откуда: Киев
Да нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Процедурная константа
СообщениеДобавлено: Вторник, 12 Июнь, 2018 21:25 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 686
Откуда: Казань
Динамическое программирование не совсем правильный термин, имелось в виду динамическая типизация. Понятно, что это не совсем та динамическая типизация, как в динамических языках. Но все же константе можно присвоить разные типы значений, поэтому, как мне кажется, что-то общее тоже есть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Процедурная константа
СообщениеДобавлено: Вторник, 12 Июнь, 2018 23:31 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2503
Откуда: Россия, Ярославль
Именованную процедуру назвали процедурной константой? Трудности перевода?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Процедурная константа
СообщениеДобавлено: Среда, 13 Июнь, 2018 10:24 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 643
Откуда: Киев
Rifat писал(а):
Динамическое программирование не совсем правильный термин, имелось в виду динамическая типизация.
Всё равно не то, потому что это автоматический тривиальный вывод типа.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Процедурная константа
СообщениеДобавлено: Среда, 13 Июнь, 2018 17:54 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 8954
Откуда: Россия, Орёл
Константа, ссылающаяся на процедуру своего модуля, во-первых, нарушит принцип однопроходности, во-вторых, не имеет смысла.

Константа, ссылающаяся на процедуру другого модуля, невозможна - т.к. адрес процедуры другого модуля не является известным на этапе компиляции. Для этого уже нужна процедурная переменная.

Так что издержки перевода или фразы в узком контексте.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Процедурная константа
СообщениеДобавлено: Среда, 13 Июнь, 2018 23:19 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 643
Откуда: Киев
Илья Ермаков писал(а):
Константа, ссылающаяся на процедуру другого модуля, невозможна - т.к. адрес процедуры другого модуля не является известным на этапе компиляции.
Сообщение о языке не задаёт ни способ трансляции, ни форму процедурного типа.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Процедурная константа
СообщениеДобавлено: Четверг, 14 Июнь, 2018 00:35 

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 7826
Откуда: Троицк, Москва
Числовые константы тоже где-то хранятся.

Логически процедуры -- константы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Процедурная константа
СообщениеДобавлено: Четверг, 14 Июнь, 2018 01:01 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1315
Info21 писал(а):
Логически процедуры -- константы.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Процедурная константа
СообщениеДобавлено: Четверг, 14 Июнь, 2018 22:20 

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

Обсуждается имя процедуры в языке.
Его можно присвоить процедурной переменной. Но ему присвоить ничего нельзя.

Адрес входа в процедуру -- это концепт машинного языка. Другой уровень.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Процедурная константа
СообщениеДобавлено: Пятница, 15 Июнь, 2018 14:05 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 467
Процедурная константа имеет дело с одной фиксированной сущностью( процедурой ), адрес которой, в общем случае, не имеет значения, как и метод обращения к ней. Любая процедур себе постоянна ( опустим самомодифицирующиеся программы ). И не важно, есть раздельная компиляция или нет, при запуске процедура определяется и остается статичной до выгрузки программы.
Процедурная переменная - динамическая сущность, которая, на протяжении жизненного цикла программы, позволяет обращаться к различным процедурам соответствующей сигнатуры. Процедурная переменная обеспечивает лишь статическую точку входа.

Если хочется контанту процедурного типа, навроде const procedure MyProc = Proc;, то, сначала, нужно ответить на вопрос - зачем.
Если предполагается использовать внешними модулями, то процедурную переменную ставят доступ только для чтения и инициализируют при загрузке модуля. Если для внутреннего использования, то таки опять вопрос - зачем.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Процедурная константа
СообщениеДобавлено: Суббота, 16 Июнь, 2018 12:05 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 8954
Откуда: Россия, Орёл
Kemet писал(а):
Если хочется контанту процедурного типа, навроде const procedure MyProc = Proc;, то, сначала, нужно ответить на вопрос - зачем.
Если предполагается использовать внешними модулями, то процедурную переменную ставят доступ только для чтения и инициализируют при загрузке модуля. Если для внутреннего использования, то таки опять вопрос - зачем.


Вот да.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Процедурная константа
СообщениеДобавлено: Суббота, 16 Июнь, 2018 12:07 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 8954
Откуда: Россия, Орёл
Comdiv писал(а):
Илья Ермаков писал(а):
Константа, ссылающаяся на процедуру другого модуля, невозможна - т.к. адрес процедуры другого модуля не является известным на этапе компиляции.
Сообщение о языке не задаёт ни способ трансляции, ни форму процедурного типа.


Ну, правда, мы в ветке Оберон-07.
В стандарте КП указано, что реализация обязана поддерживать динамическую модульность.

Ну а в конкретной реализации КП - в ББ - все константы подставляются на этапе копиляции. Т.е. в рантайме они нигде не хранятся, их нет как сущности. Компилятор взял значение константы из символьного файла одного модуля и подставил в генерируемый машинный код другого непосредственно.
(Ну или для строковых переменных наверняка создал в этом другом модуле однократно хранимую константу).


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

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


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

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


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

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