Skip to content

PharoVM Versions

Hernán Morales Durand edited this page Jan 20, 2023 · 14 revisions

This repository hosts different versions of the VM. Each of them applies to different versions of Pharo. Each version is handled in a different branch.

Versions

  • Pharo: This branch hosts the stable version used by Pharo 7 and Pharo 8. This version only has small improvements to make it compile and it is the latest version of Opensmalltalk-VM that was promoted as stable in Pharo.

  • dev7: In this branch, we make any change that should be backported to the VM used in Pharo 7 and Pharo 8. Every change that we do that requires a backport to Pharo 7 & 8 is stored in this branch. This branch allows us to build the same VM that is used in production, fixing in this branch any problem or incident.

  • Cog: This branch is in sync (or tries to be) with the corresponding branch of the Opensmalltalk-VM repository. As this is the main branch in their repository, we use it to fetch changes. This branch has not been modified by us in any case, and no modifications should be pushed here. This branch should be also the starting point of any branch used in a PR to the Opensmalltalk-VM repository.

  • headless: This is a development version. It removes all events and window handling from the VM and passes it to the image. The image is responsible to open or not a window and to handle the events. We have two different window libraries in the image: SDL and GTK+. By default an image uses SDL. All Pharo 8 and Pharo 9 images are compatible with this VM. This version can be heavily used and tested. It is working for Windows, OSX, and Linux. Check the documentation page if you want to experiment with it.

  • idle: This is a development version. It adds an interruptible idle loop to the VM. This modification reduces CPU usage. It does not do an active event checking and the handling of I/O events has been improved. This VM does not present CPU consumption when idle. When a socket or an event arrives the VM is woken up. Also, the asynchronous socket and file implementation have been unified on all platforms.

  • GC-tests: This branch contains work in progress. This branch has the tests that we have developed for testing the memory model, the garbage collection and the JIT. Our objective is to test all the validations and assumptions we do about the execution of the VM. These tests are the base of the documentation process.

  • feature/cogmt: Experimental version. It implements the multi-threaded interpreter using a global interpreter lock. Only one of the interpreters is running at the time. Details about the design.

  • experiment/live-typing-stack: This is an experimental branch. In this branch, we have the live typing proposals done by Hernán Wilkinson. This version only have the modifications for the VM without JIT.

  • experiment/live-typing-cog: This is an experimental branch. The idea of this branch is to implement the live typing extensions to the code produced by the JIT compiler.

Flavors

Additionally the headless, and idle versions support different flavors for the generation of the VM.

The accepted flavours for the moment are as follows:

  • StackVM: VM with context to native stack mapping, without JIT
  • CoInterpreter: VM with JIT
  • CoInterpreterMT: VM with JIT + Multi-Threaded FFI callouts (non-blocking)
  • CoInterpreterWithQueueFFI: VM with JIT + Queue Based FFI callouts (non-blocking) and callbacks

All of them have Spur as the memory model.

Clone this wiki locally