The StuphOS Extension Protocol grew out of the StuphMUD ruleset, a Diku derivative. This is a C API that operates a library of Python code according to the ruleset. Central to the library's design is a system of components including mobile, item, zone and room object handles, a notion of internal game routines, and an Event Bridge that allows a fundamentally pluggable architecture that transforms normal game events.
A library is available that implements this extension API, which connects a CircleMUD to the rest of the StuphOS environment. Written in Cython, it is adaptable to any real-time, multi-user engine.
Procedure defines the most basic runtime unit, but more complex functional structures are built on top of it, including Tasks and Programs. This means that certain signals, in particular exception types, are used that are members of Procedure, but may be generated by the complex upper-structural objects, and this may go unnoticed or be confusing to a new developer.
By utilizing both Heartbeat and Scheduling components, this provides a model for switching between tasks in real-time.
It defines a base API for this task-switching model by providing a deterministic sequentialization of functions that themselves may be less deterministic.
As a deterministic entity, the initial functions in the sequence define a context in which the subordinate functions execute, primarily by limiting the access to other objects by specifying their addressibility, and, by controlling the the physical reality of the computational resource (heartbeat).
This takes the form of an object known as a Task, which encapsulates the sharing of resources between functions by using a value stack, for values returned from functions to those precedent in the sequence, as well as a notion of frames that facilitate the sharing of resources with subsequent (inferior) functions -- arguments. Frames associate certain attributes with individual functions, like permissions for accessing other resources during execution.
Both Task and Frame provide symbolic access to resources by organizing their sequential (hierarchical) access relative to procedural function programs. This represents persistance of state during execution while the system is coordinating between all of the synchronized events. The domain of the virtual machine, combined with the regulation of functional instructions means providing a framework for controlling an organized program flow that is otherwise unlimited.
The determinability of a Task may also be organizationally effected by functions that have permission to interact with this initial level in the sequential application model.
Because application activity is strongly left up to the procedures lower (or later) in the deterministic sequence, Tasks themselves vary in their definition, especially when defining the domain of the procedural subroutines. In this way, the design of the subroutines are considered when defining their calculus, which means the high-level (user-level) interface or language is predominant in the purpose of the program. In otherwords, procedural domains, the things that initiate tasks earlier in the deterministic sequence, also define the ways that those tasks communicate with those things.
So a Task is generally broken into three levels of operation, although these are somewhat loosely defined, because the entire application is extensible:
The Initial, which describes the beginning or starter of the task. This also defines the ultimate capabilities of the task, as well as the way it can interact with the thing that started it. So interaction with this level is generally using the security model and by receiving user output.
The Fundamental, which is the internal operation of the virtual machine computation system. This level need not be required unless the Initial implementation is redefining a low-level instruction set.
The Interactive, which is primarily the object layer that the sandboxed runtime uses to securely and cooperatively access synchronized resources, like other tasks, or initiating other functional procedure frames in the task sequence by using symbolic activation of component routines.