On Fri, 17 Aug 2001 02:18, Berin Loritsch wrote:
> I know Avalon's charter says we have a Java Framework.
> Avalon's Framework is very generic, and would easily be
> converted to C++.  I would like to experiment with such
> a beast--but was wondering if anyone else had any
> feelings one way or the other with that.

Well I haven't considered doing it with Apache Avalon a lot of my previous 
work in this domain was C/C++ based. My history of framework + phoenix style 
apps is basically

98     - *unnamed* module+kernel system (native C++ system)
98-99  - ACR System            (native C++ kernel, scriptable by java)
99     - My Avalon System      (native C++ kernel with java plugins)
00     - Telanon System        (java kernel with native C++ plugins)
00-01  - Apache Avalon System  (pure java)

You may notice a trend away from C++ above ;) The reason is that to write a 
comparable system you have to implement a lot of underlying support. In my 
case I had to be portable between linux/win which probably added to the 
burden.

First you need to find or implement a cross platform debugging library - this 
is almost essential. Basically this does stacktraces, debugger breaks, 
asserts, etc. However to achieve the same safety that I get for free in java 
my code will often something look like

void myClass::myMethod( int *pParam1, int param2 )
{
  guard(myClass::myMethod);

  assert( NULL != pParam1 );
  assert( MemSys::isValidPointer( pParam1 ) );

  ...do work code here...  

  unguard(myClass::myMethod);
}

After that you need to write a decent memory subsystem that checks 
allocations. For every leaked allocation get a stack trace at allocating 
position. Most of my code was pre-STL stability/acceptance but if you adopt 
that you will also need to write your own allocators and possibly a decent 
garbage collector for small items.

After that you should implement a decent component system. Probably like COM. 
So instead of doing

if( component instanceof Configurable )
{
  (Configurable(component)).configure( ... );
}

you would do

IConfigurable *pConfigurable = 
  (IConfigurable *)QUERY_INTERFACE( myComponent, IConfigurable );
if( NULL != pConfigurable )
{
  pConfigurable->configure( ... );
}

The remainder of work is creating registrys of one sort or another. These are 
simple if you work all your magic in statically bound apps. However as soon 
as you start using DLLs the issues become painful. Each interface needs to 
keep references to it's "parent" or "factory" and play the IncRef/DecRef 
game. 

The advantages of C++ include;
* superior GUI toolkits (either go native or QT for XP)
* fast startup time
* easy integration with existing products

The disadvantages of C++;
* sooooooooooooo much more work
* longer to develope even after you have the base
* code becomes 90% defensive code 10% content

If you are interested I have a bunch of links for equivelent projects to what 
we are doing and pointers to some fundamental toolkits/runtimes. Just ping me 
and I will send em.

-- 
Cheers,

Pete

*-----------------------------------------------------*
* "Faced with the choice between changing one's mind, *
* and proving that there is no need to do so - almost *
* everyone gets busy on the proof."                   *
*              - John Kenneth Galbraith               *
*-----------------------------------------------------*

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to