documentation: weak and strong aliases in the specification

This commit is contained in:
Philip Ginsbach 2024-01-09 17:00:45 +00:00
Родитель 225aff47ed
Коммит 805e9d8910
1 изменённых файлов: 14 добавлений и 2 удалений

Просмотреть файл

@ -1763,7 +1763,7 @@ The grammar given in this section is disambiguated first by precedence, and seco
Aliases
-------
Aliases define new names for existing QL entities.
Aliases define new names for existing QL bindings.
::
@ -1772,7 +1772,19 @@ Aliases define new names for existing QL entities.
| qldoc? annotations "module" modulename "=" moduleExpr ";"
An alias introduces a binding from the new name to the entity referred to by the right-hand side in the current module's declared predicate, type, or module environment respectively.
An alias introduces a binding from the new name to the binding referred to by the right-hand side in the current module's declared predicate, type, or module environment respectively.
An alias is called *strong alias* if and only if it has the ``final`` annotation. Otherwise, it is called a *weak alias*.
Two bindings `A`, `B` are called *equal modulo weak aliasing* if and only if one of the following conditions are satisfied:
- `A` and `B` are the same binding or
- `A`` is introduced by a *weak alias* for `C`, where `B` and `C` are *equal modulo weak aliasing* (or vice versa) or
- `A` and `B` are introduced by the same strong alias and they are aliases for bindings that are *equal modulo weak aliasing*.
Note that the third condition is only relevant in :ref:`Parameterized modules`, where the binding introduced by the alias can depend on instantiation parameters.
Built-ins
---------