Spur, a new object representation and memory manager for Smalltalk-like languages, uses direct pointers but still provides a fast become operation in large heaps, thanks to forwarding objects that when read conceptually answer another object and a partial read barrier that avoids the cost of explicitly checking for forwarding objects on the vast majority of object accesses.
The VM simulation infrastructure is detailed and the experience developing and debugging the garbage collector and the just-in-time compiler (JIT) within it is reported.
This paper identifies three problems of the Pharo compiler infrastructure: the architecture is not reusable, the compiler can not be parametrized and the mapping between source code and bytecode is overly complex.
This work presents a low-overhead record & replay approach for actor languages that allows one to debug concurrency issues deterministically based on a previously recorded trace, and takes a first step towards deterministic replay debugging of actor systems in production.
A new approach to validate the correctness of dynamic de Optimization is designed, which consists of the symbolic execution of an optimized and an unop-timized bytecode compiled method side by side, deoptimizing the abstract stack at each deoptimization point and comparing the deoptimized and unoptimized abstract stack to detect bugs.
This paper discusses the recent addition of the write barrier in the Cog virtual machine and the support introduced in the Pharo 6 image, and detail specific aspects of the implementation that allows for such a feature with little to no overhead.
A new bytecode set is implemented, which includes additional bytecodes that allow the Just-in-time compiler to generate less generic, and hence simpler and faster code sequences for frequently executed primitives.
Sista (Speculative Inlining SmallTalk Architecture) is proposed to persist optimized code in a platform-independent representation as part of a snapshot to reach peak performance almost immediately after start-up when using a snapshot where optimized code was persisted.
A simple heuristic is proposed that uses easily accessible run-time information about the usage of each class as a receiver type for a message send to promote the correct type towards the top of the list of possible types for a variable.
VMProfiler provides more detailed profiling reports, showing for native code functions in which bytecode range the execution time is spent, and addresses some limitations related to assessing the activity of native functions (resulting from a Just-in-time compiler operation).