Re: [vos-d] More new S5 classes/concepts
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 and 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 alternatives: VobjectWrapper VobjectHandle VobjectStub VobjectPtr VobjectRef -- [ Peter Amstutz ][ [EMAIL PROTECTED] [EMAIL PROTECTED] [Lead Programmer][Interreality Project][Virtual Reality for the Internet] [ VOS: Next Generation Internet Communication][ http://interreality.org ] [ http://interreality.org/~tetron ][ pgpkey: pgpkeys.mit.edu 18C21DF7 ] signature.asc Description: Digital signature ___ vos-d mailing list vos-d@interreality.org http://www.interreality.org/cgi-bin/mailman/listinfo/vos-d
Re: [vos-d] More new S5 classes/concepts
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 files). 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 vos-d@interreality.org http://www.interreality.org/cgi-bin/mailman/listinfo/vos-d
Re: [vos-d] More new S5 classes/concepts
What is the Extension Manager? (WHat's an ExtensionManagerWrapper?) What is a Service Manager (site.getServiceManager)? ___ vos-d mailing list vos-d@interreality.org http://www.interreality.org/cgi-bin/mailman/listinfo/vos-d
Re: [vos-d] More new S5 classes/concepts
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. Regards, Karsten Otto (kao) ___ vos-d mailing list vos-d@interreality.org http://www.interreality.org/cgi-bin/mailman/listinfo/vos-d
Re: [vos-d] More new S5 classes/concepts
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 synchronize). 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 (quaq.com). Reed ___ vos-d mailing list vos-d@interreality.org http://www.interreality.org/cgi-bin/mailman/listinfo/vos-d
Re: [vos-d] More new S5 classes/concepts
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 immensely. 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. -- [ Peter Amstutz ][ [EMAIL PROTECTED] [EMAIL PROTECTED] [Lead Programmer][Interreality Project][Virtual Reality for the Internet] [ VOS: Next Generation Internet Communication][ http://interreality.org ] [ http://interreality.org/~tetron ][ pgpkey: pgpkeys.mit.edu 18C21DF7 ] signature.asc Description: Digital signature ___ vos-d mailing list vos-d@interreality.org http://www.interreality.org/cgi-bin/mailman/listinfo/vos-d
Re: [vos-d] More new S5 classes/concepts
Started listing S5 changes at: http://interreality.org/wiki/S5 http://interreality.org/wiki/ChangesToA3dl Will fill them in a bit as I go through the vos-d archives and talk to Pete more. Reed ___ vos-d mailing list vos-d@interreality.org http://www.interreality.org/cgi-bin/mailman/listinfo/vos-d
Re: [vos-d] More new S5 classes/concepts
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: ComponentWrapper 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. Promise 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 VobjectImpl IVobject is an interface class. VobjectImpl inherits from IVobject and is the concrete implementation. ImplementationWrapper ImplementationComponent 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 ConstructonFunctionFunctor ConstructorFunctionComponent A ConstructorFunction is a function that is called to instantiate a new VOS component. The Implementation class has a link to the ConstructorFunction. 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. ParentChildLinkWrapper 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. DataType DataTypeWrapper The base class for all VOS data types. Data types are split into fundamental (int, float, string) and compound (arrays, structs, classes, lambdas.) Class ClassWrapper 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 abcde...site 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 coreComponents.cc. 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
[vos-d] More new S5 classes/concepts
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: ComponentWrapper Promise Status (used with a Promise it seems?) IVobject VobjectImpl ImplementationWrapper ImplementationComponent ConstructorFunctionWrapper ConstructonFunctionFunctor ConstructorFunctionComponent The host's factory (i.e. from Host::getFactory()) ParentChildLinkWrapper the SITE_...blahblah..._NAMESPACE namespace DataType DataTypeWrapper Class ClassWrapper the vos:abcdefg12345...[1]/foo/bar strings that appear various places What is something's owner (i.e. the getOwner() virtual methods that lots of classes have) What kinds of things are generated by the code generator, and from what bits of information? Can you explain 'MVC' a bit more (it seems to now be part of the library?) In interreality3D, how does it use MVC? What is, for example, an object like wxMultiframeContextWrapper and wxMultiframeContextComponent? What is the wxgui namespace. What does it mean to append children to the local host? I am guessing this is so the object doesn't get destroyed (by reference count/garbage collection), and so you can also obtain it by name later? Do all objects need to be added to the local host (like they were all children of the local site in s4)? And if so, why not do that automatically when created? Can you explain more these changes to A3DL? What is a scene, what is a render layer, clock, node, etc.? I'll start a NewStuffInS5 wiki page or something, including some of the previous discussion on vos-d. Reed -- http://interreality.org/~reed ___ vos-d mailing list vos-d@interreality.org http://www.interreality.org/cgi-bin/mailman/listinfo/vos-d
Re: [vos-d] More new S5 classes/concepts
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 consideration Reed ___ vos-d mailing list vos-d@interreality.org http://www.interreality.org/cgi-bin/mailman/listinfo/vos-d