improve documentation for 'var T return values'; refs #7373
This commit is contained in:
parent
e44c6d8337
commit
4f10b5edb6
3 changed files with 42 additions and 4 deletions
20
doc/manual/var_t_return.rst
Normal file
20
doc/manual/var_t_return.rst
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
Memory safety for returning by ``var T`` is ensured by a simple borrowing
|
||||
rule: If ``result`` does not refer to a location pointing to the heap
|
||||
(that is in ``result = X`` the ``X`` involves a ``ptr`` or ``ref`` access)
|
||||
then it has to be deviated by the routine's first parameter:
|
||||
|
||||
.. code-block:: nim
|
||||
proc forward[T](x: var T): var T =
|
||||
result = x # ok, deviated from the first parameter.
|
||||
|
||||
proc p(param: var int): var int =
|
||||
var x: int
|
||||
# we know 'forward' provides a view into the location deviated by
|
||||
# its first argument 'x'.
|
||||
result = forward(x) # Error: location is derived from ``x``
|
||||
# which is not p's first parameter and lives
|
||||
# on the stack.
|
||||
|
||||
In other words, the lifetime of what ``result`` points to is attached to the
|
||||
lifetime of the first parameter and that is enough knowledge to verify
|
||||
memory safety at the callsite.
|
||||
Loading…
Add table
Add a link
Reference in a new issue