interreality.org [VOS]
[Home] [About] [Screenshots]
[Download] [News]
[Documentation]
[Forums] [IRC] [Mailing Lists]
[Bug Reporting] [Wiki]

S5 is a redesign of the way some parts of VOS are imlemented. It was begun in summer of 2007 and should be done in 2008. The primary goals of S5 are cleaner threading (make all message processing threadsafe), to implement things like continuation objects returned when sending a message, to reduce memory usage, to allow easier access from mulitple languages, including scripting languages, and other tasks.

See VosRoadmap for some vague plans.

Some changes will also be made to A3DL-- see ChangesToA3dl; and a new user client is being written -- see UserInterface.

In S5 the following new concepts are being added:

  • Hosts and Site. A Site is a collection of Vobjects that generally speaking inhabit the same process. However, different versions of a Site may exist on different hosts, so any given instance of a Vobject has a more specific site, which is its Host.
  • To create a new Vobject, you use a host's Factory, which is a global object in a program accessible by calling Host::getFactory(). The Vobject also must be added to the host.
  • Versioning...
  • Metaobjects are being, basically, renamed to "Components". A Component is an object that extends the functionality of a Vobject. by adding message handlers, and providing programming API for that type. Components are associated with a type which has a name. This type name string can be used to create a new Components attached to a Vobject at run time. The Vobject that a component is attached to is called its Owner.
  • Vobjects and Components will be generated by a code generator using input consisting of other Vobject describing the aspects of the Component's type (a new generation of the OTD, basically). A Vobject will be seperated into two parts: an interface and an implementation. Each type or class defined in the OTD will have a unique identifying number (GUID) and version number. Generated C++ classes will also be placed in a namespaces containing this unique information, allowing different versions to be used together, and preventing accidental name conflicts.
  • Type strings are changing to simply be a vobject path referencing an OTD.
  • Vobjects and Components are made of three parts, an Interface, and Implementation, and a Wrapper.

Wrapper classes are handles which control access to the object. They provide reference counting for automatic memory management, deal with Promises/Futures (see below), and package messages to be sent to the object from method calls. Various other classes in libvos are actually Vobjects, so they will also have Wrapper classes to access them, etc.

  • ParentChildRelation is renamed ParentChildLink, and is accessed by way if a Wrapper class (see reasons above)

  • Model-View-Controller infrastructure...
  • Each Vobject will handle its messages synchronously, but Vobjects may run in parallel to process messages. VOS will actually have something like a thread pool or other mechanism to manage Vobjects' concurrent threads. However, this will generally be transparent to the programmer.
  • When sending a message to a Vobject by calling a method in libVOS, a Promise object will be created and returned, with a status of "pending". This Promise object allows the caller to wait for the Vobject to handle the message and reply seperately from the call that sends the message. The message is then packaged (marshalled) and sent to the destination Vobject to be handled in its processing thread. When done being handled, the Promise will be signaled and any other process waiting on the Promise can continue, or check its status at any time while doing other work.
  • ConstructorFunction?...

  • Property datatypes are being developed further, to allow more complex data structures (including arrays and records similar to C structs) to be defined.
  • Embedded properties...
  • Implementation class in libvos: An "Implementation" in VOS is a component which represents a

native-language class (C++, or later other language binding) that implements some abstract VOS class. The main purpose of the implementation is to instantiate new instances.

  • ConstructorFunctionWrapper, ConstructorFunctionFunctor, ConstructorFunctionComponent: A ConstructorFunction is a function that is called to instantiate a new VOS component. The "Implementation" class has a link to the ConstructorFunction.

  • Data types: Data type describe and implement how some data is stored in a Property or elsewhere. A set of "primitives" are defines such as String and Int which may be composed into arrays or structures. A given data type is represented by the DataType class, which is actually accessed by way of a DataTypeWrapper class.

  • Many parts of VOS are actually themselves implemented as Vobject types, and are generated by the code generator. Such classes (including Component type classes) have a base class of "Class" which then has the requisite ClassWrapper, etc. VOS Classes can then be instantiated as Vobjects at run time using VOS.

S5 (last edited 2008-03-01 21:06:19 by ReedHedges)