Re: [vos-d] More new S5 classes/concepts

2008-03-04 Thread Peter Amstutz
On Mon, Mar 03, 2008 at 05:27:46PM -0500, Reed Hedges wrote:

 I was under the impression that, for the most part, you are always going 
 to be working through Wrapper objects.  Is this true?

The ultimate purpose of the wrappers is support marshaling for cross-language 
cross-host method calls.  Since C++ doesn't have a built in interception 
facility, you have to 
insert some stub code in between the caller and the target.  One way to do this 
would be remote 
objects like we had in s4, but that doesn't handle the 
cross-language/cross-thread cases very 
well.  Instead, s5 has very lightweight wrappers which manage access to the 
underlying object.

So yes, in normal code you almost always want to be working through the wrapper 
classes, since 
they make everything else work (marshaling, reference counting, promises).

I'm willing to entertain naming schemes other than -Wrapper, I just don't 
want it to be the 
stem name for the simple reason that due to the semantics of C++ it would be 
ambigious whether 
you are working with a smart pointer or a copy of the actual object.  Possible 


[Lead Programmer][Interreality Project][Virtual Reality for the Internet]
[ VOS: Next Generation Internet Communication][ ]
[ ][ pgpkey:  18C21DF7 ]

Description: Digital signature
vos-d mailing list

Re: [vos-d] More new S5 classes/concepts

2008-03-03 Thread Reed Hedges

I was under the impression that, for the most part, you are always going 
to be working through Wrapper objects.  Is this true?

 I still think it would be easier for people to use VOS if the wrapper 
 classes had plain names, and the thing being wrapped had the funny 
 name.  E.g.

 DataType is the wrapper for DataTypeCore or DataTypeImp or DataTypeBase.
 The same reason I stated before, I want to avoid confusion between having a 
 reference to an 
 object and having an actual copy of the object.  We could call them Handles 
 instead of 
 Wrappers (so you would access objects through DataTypeHandle or 
 VobjectHandle) which might be 
 clearer.  Changing the name would be a hassle, though (search and replace 
 across dozens of 
 This is something of an artifact of how the C++ binding is implemented (due 
 to the limits of C++) 
 and can be done more cleanly in languages with better reflection facilities 
 or dynamic typing.
 I.e. it seems to me that at the most basic, and starting/newbie use 
 level users just need to work with wrappers. Through the vobject 
 wrappers they find children, access component wrappers, etc.  So this 
 use level should be the simplest and hide some of the complexity 
 that's going on.
 Well, the hope is that eventually newbies won't be using C++, they'll be 
 using Python or C# or 
 some other more civilized language.

vos-d mailing list

Re: [vos-d] More new S5 classes/concepts

2008-03-01 Thread Reed Hedges
What is the Extension Manager? (WHat's an ExtensionManagerWrapper?)

What is a Service Manager (site.getServiceManager)?

vos-d mailing list

Re: [vos-d] More new S5 classes/concepts

2008-02-14 Thread Karsten Otto
Well, I had a look at Croquet before, and even though it seems to be  
called OpenCroquet now, I am still not impressed. Admittedly, they  
have some nice eye candy, and working portals. These can even display  
non-VR applications like web browsers and chess games, neat. Didn't  
we have that in S3 too?

However, their networking model requires a sequencer or other time  
synchronization mechanism, even for bulk traffic like object  
movement. This inevitably becomes a bottleneck, so the system cannot  
handle large scale simulations (like Stephenson's Metaverse  
Street). Even SIMNET could do better than that.

Karsten Otto (kao)

vos-d mailing list

Re: [vos-d] More new S5 classes/concepts

2008-02-14 Thread Reed Hedges

Croquet is very cool. I know Pete and I have been following it and reading about
it since we started VOS.  I don't know if its details have influenced our design
much, but some the end goals and features are similar.

A lot about it is not documented, as far as I can tell.  It's all is Squeak, 
which can be an obstacle (both because of the language and because of the way 
some things must be done within the framework.)  And it doesn't really come 
with much out of the box (though at this point, neither does Interreality).
With networking, it was designed to support a few particular features, which are
sort of unusual (originally meant for a LAN only, no internet; in a sense it's
really a number of seperate single-user worlds, that can optionally 
We've taken a more practical and direct approach I think.

There is a commercial product based on it that appears to be fairly complete and
work well (


vos-d mailing list

Re: [vos-d] More new S5 classes/concepts

2008-01-30 Thread Peter Amstutz
On Mon, Jan 28, 2008 at 03:28:57PM +, Lalo Martins wrote:
 Also spracht Peter Amstutz (Sun, 27 Jan 2008 23:38:04 -0500):
  (lots of clarifications on s5 concepts/classes)
 On that note... can we have a documenting property (akin to Python's 
 docstrings and __doc__)?  Preferably with nice syntax sugar on XOD :-)  
 Just having all the information you have on this post, right there on the 
 XOD file (and presumably the C++ generated from it) would have helped 

There's a description property which is pretty much what you're asking 
for, it can be attached to most elements (classes, methods, members, 
etc) and is intended to be used for output to code comments and to code 
documentation tools.

With regards to syntactic sugar, the current XOD format is intended to 
be very low level data structure dump.  What I would like to do is use 
XSLT or a macro language to define translations from a friendlier syntax 
(which can include all sort of helpful tags) to a low level 
representation such as XOD.

 Also... I can't make heads or tails of interreality3d :-( could we have a 
 very minimal hello world?

Ask and ye shall receive.  Take a look at voss5/src/app/helloworld.

[Lead Programmer][Interreality Project][Virtual Reality for the Internet]
[ VOS: Next Generation Internet Communication][ ]
[ ][ pgpkey:  18C21DF7 ]

Description: Digital signature
vos-d mailing list

Re: [vos-d] More new S5 classes/concepts

2008-01-27 Thread Reed Hedges

Started listing S5 changes at:

Will fill them in a bit as I go through the vos-d archives and talk to 
Pete more.


vos-d mailing list

Re: [vos-d] More new S5 classes/concepts

2008-01-27 Thread Peter Amstutz
On Tue, Jan 22, 2008 at 11:12:05AM -0500, Reed Hedges wrote:
 I'm going through S5 a bit more deeply now.
 Pete, can you give a summary explanation of these new classes/concepts, 
 and how you use them, what they do, etc.

 What are:

A Component is an object that is attached to a vobject to extend its 
capabilities -- what was called a MetaObject in s4.

Wrapper classes are handles which control access to the actual 
underlying object.  They provide reference counting, support for 
Promises/Futures, and (eventually) marshalling arguments in order to do 
inter-thread and inter-process method calls.

Status (used with a Promise it seems?)

A Promise is returned by a method call in order to represent the result 
of a computation that may or may not have completed.  In normal 
object-oriented programming, a method call is synchronous and only 
returns control to the caller by completing the call and returning a 
result, or signaling an error by throwing an exception.  When making 
method calls between threads or over the network, it is useful to be 
able to return control to the caller with a status of pending.  A 
Promise is a promise to provide the result of the computation at some 
point in the future (which is why it is closely connected to the 
Future class).  The Status is an enum which is one of Completed, 
Pending or Failed (the last one signaling an error).


IVobject is an interface class.  VobjectImpl inherits from IVobject and 
is the concrete implementation.


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.


A ConstructorFunction is a function that is called to instantiate a new 
VOS component.  The Implementation class has a link to the 

The host's factory (i.e. from Host::getFactory())

In order to create new objects attached to a particular Site, you use 
the Factory object on that site (Hosts are a special type of Site.)  
This is the basically the same as s4 with Site::createVobject(), but 
separating the Factory out to a distinct Vobject.


Handle to ParentChildLink (same as a s4 ParentChildRelation.)

the SITE_...blahblah..._NAMESPACE namespace

VOS classes are themselves Vobjects, which are associated with a 
particular site.  When compiling the VOS class descriptions into C++ 
classes, the site is used as part of the namespace.  The namespace 
includes the revision number of the site, so a macro is #defined so that 
every use of the namespace does not need to be updated every time the 
revision changes.


The base class for all VOS data types.  Data types are split into 
fundamental (int, float, string) and compound (arrays, structs, classes, 


Defines a class known to VOS, in most cases derived from Component, 
meaning the class is attached to a Vobject.  Defines member properties, 
methods, and valid children.

the vos:abcdefg12345...[1]/foo/bar strings that appear various places

vos:url qualifiers identifier, in hexadecimal
[1] specific site revision
/foo/barpath to some vobject

What is something's owner (i.e. the getOwner() virtual methods that 
 lots of classes have)

For Component classes which must be attached to a Vobject, getOwner() 
gets the Vobject it is attached to.

 What kinds of things are generated by the code generator, and from what 
 bits of information?

Interface classes beginning with I, classes ending in Wrapper, 
classes ending in Component, classes ending in Impl.

The interface, wrapper and component/impl classes are generated from the 
class descriptions in the XOD file.  In the case of the VOS core, this 
includes the contents of core.hh, coreComponents.hh and  The concrete classes are also autogenerated (with 
stub implementations) if they are not present; this is where the user 
fills in the actual implementation code.

 Can you explain 'MVC' a bit more (it seems to now be part of the library?)

The idea is to have a general purpose API for creating views/controls 
given a certain context and data type.

 In interreality3D, how does it use MVC? What is, for example, an object 
 like wxMultiframeContextWrapper and wxMultiframeContextComponent?  What 
 is the wxgui namespace.

For example, a wxMultiFrameContext is a View context that permits 
creating new wxFrames.  A wxWindowContext is a view context for a 
wxWindow drawing surface.  The View Factory matches on a VOS type that 
it can display and a particular view context, and produces a view that 
uses that view 

Re: [vos-d] More new S5 classes/concepts

2008-01-22 Thread Reed Hedges

And just a general impression... S5 is becoming really complex and 
daunting (and sophisticated, and hopefully very powerful) piece of 
software.  But this means that we're going to need to put a *lot* of 
work in documenting, tutorials, as well as just polishing and refining 
the API itself, to make it easier for newbies to understand, or at least 
get started with the most common operations (like creating new 
types/components, etc.)  Just something to keep in mind as it's being 
developed and designed... if you think of a way to make it make more 
sense or be more natural, at least post it somewhere for future 


vos-d mailing list