N.B. For Squeak/Pharo/Croquet please use the archives whose names begin with Cog or cog. The archives whose names begin with nsvm or Newspeak are for Newspeak and are missing plugins required by Squeak/Pharo/Croquet. VMs with "mt" or "MT" in the name are multi-threaded VMs which support non-blocking FFI calls. The archives containing "Spur" or "spur" are VMs using the new Spur object representation and garbage collector and should be used with Spur-format Squeak/Pharo/Croquet or Newspeak images. Squeak V5, Newspeak and the upcoming Pharo release have moved to Spur. N.B. Only the Newspeak installers on this site include a sources file. This saves space. To ensure access to the sources file using the other VMs - on linux add the sources file to the same directory as the vm, e.g. add cogspurlinux/lib/squeak/4.5-3692/SqueakV50.sources - on Mac OS add the sources into the Resources directory of the app bundle - on Windows add the sources file to the same directory as the vm Archives whose names include "64" are 64-bit Spur VMs. They should be used with 64-bit Spur images. Sample 64-bit images can be found at http://www.mirandabanda.org/files/Cog/SpurImages Linux There are two variants of the Linux VMs; those ending in "ht" have a heartbeat thread, while those that don't use an interval timer for the heartbeat (the Windows and Mac VMs have a threaded heartbeat). The threaded heartbeat is better (for example, signals from the interval timer interfere with system calls, etc), but to use it one must have a kernel later than 2.6.12 and configure linux to allow the VM to use multiple thread priorities. To do so, create a file called VM.conf where VM is the name of the vm executable ("squeak" for the Squeak vm, "nsvm" for the Newspeak vm) in /etc/security/limits.d/ with contents: * hard rtprio 2 * soft rtprio 2 e.g. sudo cat >/etc/security/limits.d/squeak.conf < ./coglinuxht/squeak -vm display-null -vm sound-null squeak.image Windows The Windows VMs are not "dpiAware", which means that by default the display is scaled and display pixels are not directly mapped to screen pixels. If this behaviour is not desired you can disable scaling by editing the VM's manifest file (e.g. Squeak.exe.manifest), changing the "false" in false to "true", or simply deleting the manifest file. ------------------------------------------------------------------------ CogVM binaries as per VMMaker.oscog-eem.1873/r3732 General: Make primitiveDoPrimitiveWithArgs usable as a mirror primitive, such that no message needs to be sent to the receiver to evaluate a primitive on it. This would make possible Context>>receiver: obj tryPrimitive: idx withArgs: args. Spur: Fix ephemerons (at least for Gule's test case). The mournQueue is of course a root for the scavenger and so must be visited at the start of a scavenge. Fix bug in markAllUnscannedEphemerons, enumerating correctly. Both fireEphemeronsInRememberedSet and fireEphemeronsOnEphemeronList must check for an ephemeron being fireable. An as-yet-firable ephemeron might get added to the ephemeron list and later its key may get tenured, rendering the ephemeron unfirable in that cycle. Fix marking of obj stack contents (markAndTraceObjStack:andContents:). Again tenuring could cause contents to be forwarded and hence read barrier is needed. Fix two bugs in ephemerons (found by Gille Polito - thanks!). 1. obj stack extension must happen with marking set to true if new pages aren't to be GC'ed. So move the assignments to marking out into markObjects: where they can surround nilUnmarkedWeaklingSlots. 2. fireAllUnscannedEphemerons needs to enumerate the unscannedEphemerons set properly, an oop at a time. Fix asserts that check for ephemerons so that the change in an ephemeron's format once it gets added to the mournQueue doesn't break the asserts; isMaybeFiredEphemeron[Format]: answer true for ephemerons and ephemerons in the mournQueue. Fix the Spur implementation of becomeForward:copyHash: for becomming immediates with copyHash false. Fix the scavenger's referenceCountRememberedReferents: for forwarding to immediates, and add a printRememberedSet convenience. Make pushLiteralVariable: store unfollowed literals back into the literal frame. Do so in a function off to the side, not inlined into the interpreter loop. With the above ephemeron changes Guille's test case passes: | e | Smalltalk supportsQueueingFinalization: true. e := (1 to: 200000) collect: [:i| Ephemeron key: (ObjectFinalizer receiver: 'test', 'asd' selector: #logCr) value: Object new]. Smalltalk garbageCollect! Plugins: Simplify the arg validation in FloatArrayPrims>>prmNormalize & primLength. Fix the configuration of the gdb-7.x support for for the GdbARMPlugin (COG=1). Put #if COG around a couple of changes to the gdb-7.10 code. Allow assert to be used in the plugin on MacOS X (-undefined dynamic_lookup)