Logo

4 декабря 2014 г.

Этюд 4. Разыменование ссылки

Ссылка в Канторе — объект, который может принимать значение null, что обозначается ключевым словом ref и является атрибутом конкретного параметра или функции, ссылочных типов нет. Разыменование ссылки синтаксически неотличимо от обращения к объекту — операция всегда применяется к самому объекту, а какие-либо операции над самой ссылкой отсутствуют.

На Delphi

Этот этюд отступает от традиций: при его подготовке код переводился с Кантора на Delphi, а не наоборот. В результате пример на Delphi представлен псевдокодом, поскольку точный перевод с Кантора на Delphi невозможен.
var
  Five = 5;
const
  PtrToFive = @Five; // в Канторе это функция
begin
  Inc(Five);
end;

var
  Six := PtrToFive^; // присваивание с явным разыменованием

var
  A: ^Integer; // неинициализированная переменная

На Канторе

Присваивание ссылки не-ссылке есть разыменование, а присваивание одной переменной другой — всегда копирование (new from).
var five = 5;
ref ptrToFive = five;
ptrToFive++; // операций над ссылками в Канторе нет,
             // поэтому five теперь равно 6

var six = ptrToFive; // присвоение ссылки не-ссылке, то есть
                     // var six = new from ptrToFive;
                     // аналог конструктора копирования в Канторе
                     // вызовет исключение при разыменовании null

// Пример-ловушка
var Core:Integer a;  // описывает ссылку, поскольку понятия 
                     // неинициализированных переменных в Канторе нет,
                     // единственное умолчание -- это null, а null
                     // можно присвоить только ссылке
Пример-ловушка скорее всего будет считаться предупреждением и вызывать остановку компиляции в режиме строгой проверки синтаксиса (warnings as errors).

Комментариев нет :

Отправить комментарий

Выбрав в выпадающем списке пункт «Имя/URL», можно оставить комментарий от своего имени без предварительной регистрации.