OberonCore
https://forum.oberoncore.ru/

Значения констант в символьных файлах
https://forum.oberoncore.ru/viewtopic.php?f=30&t=2897
Страница 1 из 1

Автор:  Rifat [ Четверг, 07 Октябрь, 2010 10:29 ]
Заголовок сообщения:  Значения констант в символьных файлах

Мне не понятен один момент, почему при создании символьного файла туда сохраняются ЗНАЧЕНИЯ констант. Если значение константы в импортированном модуле поменяется, то надо перекомпилировать и тот модуль, который его импортирует. Почему бы не сохранять в символьный файл просто название константы и место, в объектом файле, где оно храниться, тогда если константа измениться, модуль который его импортирует не потребует перекомпиляции.

Автор:  Илья Ермаков [ Четверг, 07 Октябрь, 2010 11:33 ]
Заголовок сообщения:  Re: Значения констант в символьных файлах

Дело в том, что в каждый модуль, где используется константа, её значение внедряется при компиляции. Иногда уже в неявном, вычисленном виде.

Например:

x := 2* MyMath.pi - компилятор возьмёт значение константы pi из модуля MyMath, умножит на 2 и в ваш модуль запишет прямо в код результат. А ссылка на константу другого модуля вставляется именно затем, чтобы отследить, если она поменялась, и потребовать от программиста перекомпиляции. Вообще, раз введённые константы менять не следует.

Если же Вам это нужно, то это по смыслу уже не константа, а то, что в других языках часто называется константной переменной.

Делается так:

Код:
MODULE Demo;

  CONST
    _myVal = 10;

  VAR
    myVal-: INTEGER;

BEGIN
  myVal := _myVal
END Demo;


Практический пример: есть константы с обозначениями валют. Они неизменны, но могут появляться новые. Удобно иметь величину, которая хранит максимальную существующую константу валюты (для разных переборов).

Код:
  CONST
    wmz* = 101; wmr* = 102; wmb* = 103; ...
    _lastWm = 103;
   VAR
     lastWm-: INTEGER


Тогда во внешних модулях можно спокойно, устойчиво к любому добавлению констант, перебирать:

Код:
i := Types.wmz;
WHILE i <= Types.lastWm DO
  ...
  INC(i)
END

Автор:  Rifat [ Четверг, 07 Октябрь, 2010 12:29 ]
Заголовок сообщения:  Re: Значения констант в символьных файлах

Спасибо за ответ.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/