My experience with RESTComms, and having looked at the other modules in there, is that most of those aren't really "modules" as in "optional components", but as "the reference implementation of a required interface that can be replaced with another implementation". For that reason they can be seen as belonging to core, and be bundled in one single dll.

Although I would prefer to see each one of them in a separate dll, I think MW's proposal is perfectly reasonable. It's a good idea to separate these modules from, at least, OpenSim.Region.Environment.dll, if not from each other.

MW wrote:
Putting aside the optimisations for now, as I think that is a different question. As if we are going to have a dynamic module system then those issues come with it.

While I think having every module in a separate dll/project is too much. As Stefan said I think we have just about enough projects in the core as it is. But I can see a case for moving all the modules that are currently in OpenSim.Region.Environment, into a single separate project/dll called something like OpenSim.Region.CoreModules.

And if we could as Justin said, impove the module loading system, so that the operator can turn on and off the loading/usage of any modules in a single dll.

*/Stefan Andersson <[email protected]>/* wrote:

    I think that some confusion stems from the fact that it's a
    difference between referencing the assembly, and dynamically
    instancing classes out of it.
If you reference classes directly, as in mything = new Thing(); where thing could be a module, albeit _referenced_, not _loaded_ is a huge difference to mything = loadedAssembly.Instantiate( "Thing" );

    in the former, the jit compiler can do all kinds of neat
    optimizations when referencing classes in the Assembly, since it
    has both the referenced component and the referrer at hand. It can
    also inline and optimize away type validity checks and trusted
    domain checks.
In the latter, it really can't, and need to wrap everything in
    prudent encapsulation, protection and indirection.

    Optimization points aside, I would hate for us to expand the core
    modules into separate projects just because we can; I think we
    would have to add 20 more projects to the solution and that would
    just suck - especially now that we have cleaned out so many. Some
    of the these new projects will have just a handful of classes,
    which is just an absurd waste of resources for something that
    should be used in 95% of the setups.
I actually don't know how mono addins work, but in the .net
    framework individual classes are referenced by assembly and class
    if loaded at runtime, so for examble
authModule= "MyAuthLib.dll, MyAuthenticator" would reference the
    class MyAuthenticator in the dll MyAuthLib.dll - which means that
    you can lump as many of those together in an dll that you want to.
so we should make sure we can do something liket that, and instead
    try to lump modules that share a common domain together.
The only two reasons to ever split an assembly into two is from
    * references being too different (if you want to re-use them
    separately)
    * encapsulation and security issues (actuallly USING internal as
    it was intended)
So, what I'm saying is that we should strive towards a situation
    where the core modules are bundled into a minimal set of
    assemblies, and the rest put on forge.

    Best regards,
    Stefan Andersson
    Tribal Media AB

    > Date: Thu, 29 Jan 2009 11:28:19 +0100
    > From: [email protected]
    > To: [email protected]
    > Subject: Re: [Opensim-dev] proposal: cleanup and break up region
    modules
    >
    > Tleiades Lauridsen wrote:
    > >
    > >
    > >> Date: Thu, 29 Jan 2009 08:31:48 +0100
    > >> From: [email protected]
    > >> To: [email protected]
    > >> Subject: Re: [Opensim-dev] proposal: cleanup and break up
    region modules
    > >>
    > >> Tleiades wrote:
    > >> >> I'd be much more of a fan of having each module a seperate
    dll. Files
    > >> >> are cheap too. :) And that makes it very clear to people
    what they are
    > >> >> loading, and what they aren't loading.
    > >> >>
    > >> >
    > >> > (On the fear of talking about performance prematurely)
    > >> > Won't that cause problems for the JIT'er?
    > >> >
    > >> > Normally access to member variables gets optimized away
    into a direct
    > >> > memory access rather than invocation of a JSR. If I recall
    correctly
    > >> > this optimization does not work for dynamically loaded
    assemblies.
    > >>
    > >> well, if that's the case, then it's not working currently
    either :-)
    > > currently
    > >> we lump all region modules into one large super DLL and load that
    > > dynamically.
    > >
    > > I guess what I'm saying is that dll files are not as cheap as
    it is
    > > being implied. Having an application dynamicallly load a large
    number of
    > > dll's at runtime, is less efficient that loading a few large dll's
    > > during load time. The JIT'ed code will be less efficient and
    loadtime of
    > > the application will increase. While load time may not be a
    big issue, I
    > > believe it is best to give the JIT engine the best working
    condition.
    >
    > we are always loading at runtime --- or let me ask the other way
    round: what do
    > you define as "loadtime"?
    >
    >
    > >
    > > As I understand it the JIT engine and assembly loader have
    been designed
    > > based on a use pattern which states: "Most assemblies will be
    loaded
    > > during application load time, and only few assemblies will be
    loaded at
    > > a latter stage",
    >
    > well, we are loading at runtime then.
    >
    > --
    > dr dirk husemann ---- virtual worlds research ---- ibm zurich
    research lab
    > SL: dr scofield ---- [email protected] ----
    http://xyzzyxyzzy.net/
    > RL: [email protected] - +41 44 724 8573 -
    http://www.zurich.ibm.com/~hud/
    > _______________________________________________
    > Opensim-dev mailing list
    > [email protected]
    > https://lists.berlios.de/mailman/listinfo/opensim-dev

    _______________________________________________
    Opensim-dev mailing list
    [email protected]
    https://lists.berlios.de/mailman/listinfo/opensim-dev


------------------------------------------------------------------------

_______________________________________________
Opensim-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/opensim-dev

_______________________________________________
Opensim-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/opensim-dev

Reply via email to