You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Aquascope shows how permissions change to help users understand why a particular permission may be missing. Per path, these changes are described as a gain or loss in permissions. An icon is used to indicate what actions caused this change but it doesn't describe how permissions are transferred. Shown in the below example is a simple move:
This properly conveys how permissions change for each path in isolation but it doesn't show how these two changes are related. In this small example, one could think of permissions as being transferred from s to m. This idea of transfer is common in previous explanations of borrow checking and is demonstrated quite well by RustViz.
In the above example from RustViz the reader is given "Immutable borrow from x to y" for the statement let y = &x;. One could reimagine this as saying "R is transferred from x to *y". This clearly explains where *y gets its permissions from.
It's unclear how these dependencies should be shown. Aquascope currently works under the constraints of embedding all visual annotations in a CodeMirror 6 editor. These visual annotations also have a space constraint as they are shown integrated with the code and not next to it. Additionally, Aquascope works on any Rust program with non-trivial control flow and shouldn't be limited to error-free programs (if this isn't currently true it's getting there 😄).
The text was updated successfully, but these errors were encountered:
Aquascope shows how permissions change to help users understand why a particular permission may be missing. Per path, these changes are described as a gain or loss in permissions. An icon is used to indicate what actions caused this change but it doesn't describe how permissions are transferred. Shown in the below example is a simple move:
This properly conveys how permissions change for each path in isolation but it doesn't show how these two changes are related. In this small example, one could think of permissions as being transferred from
s
tom
. This idea of transfer is common in previous explanations of borrow checking and is demonstrated quite well by RustViz.In the above example from RustViz the reader is given "Immutable borrow from
x
toy
" for the statementlet y = &x;
. One could reimagine this as saying "R is transferred fromx
to*y
". This clearly explains where*y
gets its permissions from.It's unclear how these dependencies should be shown. Aquascope currently works under the constraints of embedding all visual annotations in a CodeMirror 6 editor. These visual annotations also have a space constraint as they are shown integrated with the code and not next to it. Additionally, Aquascope works on any Rust program with non-trivial control flow and shouldn't be limited to error-free programs (if this isn't currently true it's getting there 😄).
The text was updated successfully, but these errors were encountered: