Dereferencing (разыменование)

 

Слово "разыменование" на английском

разыменование на context.reverso.net

 

dereference глаг.

комп. разыменовать; разыменовывать

прогр. получать значения переменных по указателю;

(Мультитран)

 

dereference

(programming)

To access the thing to which a pointer points, i.e. to follow the pointer. E.g. in C, the declarations

int i; int *p = &i;

declare i as an integer and p as a pointer to integer. p is initialised to point at i ("&i" is the address of i - the inverse of "*"). The expression *p dereferences p to yield i as an lvalue, i.e. something which can appear either on the left of an assignment or anywhere an integer expression is valid. Thus

*p = 17;

would set i to 17. *p++ is not the same as i++ however since it is parsed as *(p++), i.e. increment p (which would be an invalid thing to do if it was pointing to a single int, as in this example) then dereference p's old value.

The C operator "->" also dereferences its left hand argument which is assumed to point to a structure or union of which the right hand argument is a member.

At first sight the word "dereference" might be thought to mean "to cause to stop referring" but its meaning is well established in jargon.

This article is provided by FOLDOC - Free Online Dictionary of Computing (foldoc.org)

https://encyclopedia2.thefreedictionary.com/dereference

 

Про "разыменование", про планы выполнения запросов в 1С - человек показывает "кухню" (inner workings)

https://infostart.ru/1c/articles/805991/

Николай Кузнецов (kuzyara) Рейтинг: 1735

Обращение к полям таблицы через точку [Док.Номенклатура.Комплект] называется операцией разыменования ссылочного поля. Программисту 1С важно понимать, что даже самый маленький запрос может быть интерпретирован в 7-этажного монстра.

По мотивам //infostart.ru/public/165456/ ...



Разыменование ссылочных полей - то ли допускается, то ли рекомендуется (ИТС).

https://its.1c.ru/db/metod8dev/content/2590/hdoc

4. Разыменование ссылочных полей

В 1С:Предприятии 8 допускается обращение к свойствам объектов через одну или несколько точек, например, «Номенклатура.Поставщик.Страна». Это позволяет значительно упростить написание запросов. Рекомендуется всегда пользоваться разыменованием полей там, где это возможно, чтобы не усложнять запросы лишними конструкциями.

//обращение к свойству объекта через одну точку
ВЫБРАТЬ
      Ссылка,
      ЮрФизЛицоКонтрагента.ИНН,
      ПодразделениеКомпании.Код
ИЗ Документ.РасходныйКассовыйОрдер

//обращение к свойствам объектов через несколько точек
ВЫБРАТЬ
      Ссылка,
      Ответственный.ОсновнойБанковскийСчет.Банк.КоррСчет
ИЗ Документ.АвансовыйОтчет



РСА Их авансовых отчетов получить корсчета банков? Лавров ругался про таких.



"Разыменование ссылочных полей составного типа в языке запросов" - надо использовать аккуратно. Для составных типов по ссылкам надо выбирать ТОЛЬКО НУЖНЫЕ таблицы

https://its.1c.ru/db/v8std/content/654/hdoc

 

2.3. При необходимости следует жертвовать компактностью и универсальностью кода ради производительности:

  -  Как правило, для выполнения конкретного запроса в данных условиях не нужны все возможные типы данной ссылки. В этом случае, следует ограничить количество возможных типов при помощи функции ВЫРАЗИТЬ.

 - Если данный запрос является универсальным и используется в нескольких разных ситуациях (где типы ссылки могут быть разными), то можно формировать запрос динамически, подставляя в функцию ВЫРАЗИТЬ тот тип, который необходим при данных условиях.

Это увеличит объем исходного кода и, возможно, сделает его менее универсальным, но может существенно повысить производительность и стабильность работы запроса.

Например, неправильно:

Запрос.Текст = "ВЫБРАТЬ
| Продажи.Регистратор.Номер,
| Продажи.Регистратор.Дата,
| Продажи.Контрагент,
| Продажи.Количество,
| Продажи.Стоимость
|ИЗ
| РегистрНакопления.Продажи КАК Продажи
|ГДЕ ... 

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

Правильно:

Для решения данной конкретной задачи нет необходимости соединяться со всеми 56 видами документов. Условия запроса таковы, что при его выполнении будут выбраны только движения документов РеализацияТоваровУслуг и ЗаказыПокупателя. В этом случае можно значительно ускорить работу запроса, ограничив количество соединений при помощи функции ВЫРАЗИТЬ().  

Запрос.Текст = "ВЫБРАТЬ
| ВЫБОР
|   КОГДА Продажи.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
|     ТОГДА ВЫРАЗИТЬ(Продажи.Регистратор КАК Документ.РеализацияТоваровУслуг).Номер
|   КОГДА Продажи.Регистратор ССЫЛКА Документ.ЗаказПокупателя
|     ТОГДА ВЫРАЗИТЬ(Продажи.Регистратор КАК Документ.ЗаказПокупателя).Номер
| КОНЕЦ КАК Номер,
| ВЫБОР
|   КОГДА Продажи.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
|     ТОГДА ВЫРАЗИТЬ(Продажи.Регистратор КАК Документ.РеализацияТоваровУслуг).Дата
|   КОГДА Продажи.Регистратор ССЫЛКА Документ.ЗаказПокупателя
|     ТОГДА ВЫРАЗИТЬ(Продажи.Регистратор КАК Документ.ЗаказПокупателя).Дата
| КОНЕЦ КАК Дата,
| Продажи.Контрагент,
| Продажи.Количество,
| Продажи.Стоимость
|ИЗ
| РегистрНакопления.Продажи КАК Продажи
|ГДЕ
| Продажи.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
| ИЛИ Продажи.Регистратор ССЫЛКА Документ.ЗаказыПокупателя"; 


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

 

Две основные операции с указателями — присвоение и разыменование

https://otvet.mail.ru/question/173580897

Chaz Ashley

Языки программирования, в которых предусмотрен тип указателей, содержат, как правило, две основные операции над ними: присваивание и разыменование. Первая из этих операций присваивает указателю некоторый адрес. Вторая служит для обращения к значению в памяти, на которое указывает указатель. Разыменование может быть явным и неявным, в большинстве современных языков программирования разыменование происходит только при явном указании.



РСА:

Разыменование — обращение к значению, на которое указывает указатель (переменная). Что тогда "неявное разыменование"?

Переменная и указатель — какая разница?
 - Переменная - ссылка на значение, хранящееся ГДЕ-ТО в памяти.
- Указатель - это объект (переменная?), значение которого есть адрес переменной, константы, других указателей или функций.

Самое оптимальное применение для указателей - перебор значений массивов (без индексов)? Смотри https://metanit.com/c/tutorial/5.5.php