Unlike the global resolution mechanism at play in the world wide web, at the heart of ROC all resolution and request evaluation is performed relatively.
This relativity is enabled through a data-structure called scope. Scope is a singly linked list of spaces. The space at the head of the list is
called the nearest scope and this takes precedence over all others.
The Visualiser
and Request Trace
tools both give visual indication of scope. Use them to debug your applications or just to gain a deeper understanding of the concepts.
Within our discussion of ROC we shall see three distinct types of scope: request scope, evaluation scope and response scope.
Request Scope
Constructed requests must contain a scope field called the request scope. This scope determines which spaces are looked at and which order
when NetKernel kernel resolves a request. By default this is transparently inherited from the evaluation scope of a parent request in all cases
except for root requests issued from transports in which case it's scope is usually just the owning space of the transport.
Evaluation Scope
The evaluation scope is generated during the resolution process.
This evaluation scope is placed into requests that are issued by the
NetKernel kernel to endpoints. This scope then determines the default scope with which any subrequests will be issued with by that endpoint.
It is possible for endpoints to override the request scope in sub-requests and this is the basis of many design patterns including
pass-by-value and Overlay with dynamic space.
Response Scope
When an endpoint returns a response the kernel generates the response scope based upon a number of factors including
the request scope, evaluation scope and the evaluation scope of any descendant sub-requests.
The response scopes intent is to
determine the extent of request scope necessary to bound any computation and required resources. I.e. the minimum necessary scope that
was necessary in evaluation the response. As such the response scope is always a subset of the request scope which
always includes the nearest scope and then may contain zero or more other of its other spaces. The response scope is not a construct that
a developer needs to use directly, however it is of critical importance to correct caching of responses because it distinctly identifies
different resources even when they share common identifiers.