суббота, 4 июля 2015 г.

ToDo. Компилировать U$ ссылкой на переменную, а не вызовом на код, вычисляющий эту переменную

ToDo. Компилировать U$ ссылкой на переменную, а не вызовом на код, вычисляющий эту переменную.

Вместо:

WORDWORKER U$
 VAR l_S
 WordToWork DO =: l_S
 @ UIDS_LIST ->^ l_S DO
 // - вычисляем значение
;
// - преобразование идентификатора элемента собственно к элементу

Сделать:

VOID IMMEDIATE operator U$
  ^L aName
 STRING VAR l_S
 aName DO >>> l_S
 @ UIDS_LIST ->^ l_S CompileValue
 // - компилируем ссылку
;
// - преобразование идентификатора элемента собственно к элементу

Так наиграю несколько на производительности.

C %UID кстати можно подобное же сделать.

Хотя там есть уже вычисленная переменная:

IMMEDIATE VOID CALLER operator %UID ^ IN anUID
 VAR l_S
 anUID DO =: l_S
 // - получаем имя (значение) UID
 
 VAR l_VAR
 
 @ UIDS_LIST ->^ l_S >>> l_VAR
 // - добавляем переменную и снимем её со стека
 
 Caller -> %U := l_VAR
 // - добавляем элементу переменную, указывающую на его UID
 l_VAR ^:= Caller
 // - присваиваем в переменную с UID ссылку на сам элемент
;
// - идентификатор элемента

А %TARGET можно сделать ссылкой на ссылку. А не алиасом, тогда в нём можно будет менять значение "на лету".

2 комментария: