CinnabarVM -- Henry Strickland and Ryan Seto , both at CinnabarVM is an optimized smalltalk virtual machine for executing code in Vats, with the assumption that no message in the Vat queue will require too much time or memory to execute. Cinnabar compiles smalltalk classes to C++. The generated C++ code uses normal C stack for call frames for passing arguments. We can enable all possible optimizations in the C++ compiler. Future: Garbage collection and changing class or method definitions will only occur when the C stack is empty of smalltalk call frames -- that is, when no smalltalk methods are executing. This avoids the problem of references to objects on the C stack during any of these events. Since we assume messages to the Vat execute fairly quickly, we assume this limitation is not a problem. Future: When Smalltalk classes or methods are altered, we run "g++" to produce shared objects, when we then link in dynamically. Think of this as a sneaky way of using g++ as an ahead-of-time JIT. Cinnabar is also Mercury Sulfide. ========================================================== Current tests work with Squeak-3.8a-1.src.tar.gz Squeak3.8g-6548.image or Squeak3.8 final (6665) Linux (Fedora Core 4) i686 / i386 HOW TO TRY IT (as of version 20060224 (on date 2006-02-19)): In Squeak, update your image, then file in CinnabarChanges.20060224.cs "open" "SUnit Test Runner" CinnabarxTestBig "run one" In Linux shell, make big ========================================================== OLD: Some recursive fibonacci benchmarking: 50x the fib(0..30) loop: (none) 18.6 -O1 6.04 -O2 5.43 -O3 5.32 -O3 -fomit-frame-pointer 5.4 -O3 -ffixed-ebx 5.21 -O3 -ffixed-ebx -ffixed-esi 4.764 ========================================================== OLD: Other things to try: LD_LIBRARY_PATH=. valgrind --leak-check=full -v --show-reachable=yes a.out dl_apple.so g++ -O3 -ffixed-esi -ffixed-ebx -rdynamic -fno-exceptions cinnabar.cc test1.cc dl_apple.cc _testall.cc -ldl ; LD_LIBRARY_PATH=. time ./a.out dl_apple.-- >/dev/null