On 2012-03-28, at 8:59 AM, Mikael wrote:
Dear Marc, I'm curious,
Den 22 mars 2012 14:46 skrev Marc Feeley feeley@iro.umontreal.ca:
That's not currently possible because the Scheme global variables, and some global state of the Gambit VM, are implemented using global C/C++ structures. What is needed (and something that is on my TODO) is to allow instances of this state to be created dynamically (essentially a constructor for the Gambit VM). That way several instances of Gambit can coexist in the same OS process.
Unfortunately, this will slow down accesses to global variables, because an indirection will be needed.
So with this several-gambit-vm:s-coexisting-in-the-same-os-process option, each read and write to a global var will require one more indirection and that's it?
The "indirection" might be more than a pointer indirection. The point is that each instance of the VM will have its own set of global variables. I think it can be implemented with a single indirection by declaring that all the VMs have the same set of global variables (but each instance of a global variable has its own value). But I haven't implemented this yet.
Does access to Gambit runtime procedures like |list| and |open-string| qualify as this?
Yes. Even if it is very likely that all the instances contain the same value.
You mean one indirection i.e. just following one pointer once right? If so I suppose this gives a max approx 0.5% performance decrease for typical code - if so, for when this functionality is needed, it's really worth it.
Only by benchmarking this will I be able to tell if it is 0.5% or 5%. It could be 50% for some programs constantly accessing global variables.
Will there be a configure argument to disable/enable this option both now, and later when running in SMP mode?
Absolutely. Gambit's architecture, with the gambit.h header file, makes it easy to have a switch to enable the existence of multiple VM instances. When this is disabled, I expect the same performance as now.
Marc