From 726608ce56226a81ffffd28179df63f33b5372e0 Mon Sep 17 00:00:00 2001
From: Gareth Rees
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
.tract.if.tractofaddr: The function TractOfAddr() finds the tract corresponding to an address in memory. (See .req.fun.trans):
-Bool TractOfAddr(Tract *tractReturn, Arena arena, Addr addr);
+Bool TractOfAddr(Tract *tractReturn, Arena arena, Addr addr);
If addr is an address which has been allocated to some pool, then
@@ -552,7 +552,7 @@ next root.
title="next chapter">2. Bit tablesDownloads
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
@@ -560,7 +560,7 @@ next root.
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
Contact us
@@ -580,7 +580,7 @@ next root.
.if.find.general: There are four functions (below) to find reset ranges. All the functions have the same prototype (for symmetry):
-Bool find(Index *baseReturn, Index *limitReturn,
+Bool find(Index *baseReturn, Index *limitReturn,
BT bt,
Index searchBase, Index searchLimit,
Count length);
@@ -804,7 +804,7 @@ TEST1 and TEST2.
title="next chapter">3. Coalescing block structureDownloads
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
@@ -812,7 +812,7 @@ TEST1 and TEST2.
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
Contact us
@@ -832,7 +832,7 @@ TEST1 and TEST2.
previous |
- Memory Pool System 1.110.0 documentation »
+ Memory Pool System 1.111.0 documentation »
Design »
diff --git a/mps/manual/html/design/cbs.html b/mps/manual/html/design/cbs.html
index 9c8a10dc33f..52237bcb45d 100644
--- a/mps/manual/html/design/cbs.html
+++ b/mps/manual/html/design/cbs.html
@@ -8,7 +8,7 @@
- 3. Coalescing block structure — Memory Pool System 1.110.0 documentation
+ 3. Coalescing block structure — Memory Pool System 1.111.0 documentation
@@ -16,7 +16,7 @@
-
+
@@ -44,7 +44,7 @@
previous |
- Memory Pool System 1.110.0 documentation »
+ Memory Pool System 1.111.0 documentation »
Design »
@@ -737,7 +737,7 @@ supports the following methods (for sub-module internal use):
title="next chapter">4. CheckingDownloads
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
@@ -745,7 +745,7 @@ supports the following methods (for sub-module internal use):
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
Contact us
@@ -765,7 +765,7 @@ supports the following methods (for sub-module internal use):
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
For example, this isn’t allowed, because there is a change in the interface:
#if defined(PROT_FOO)
-void ProtSpong(Foo foo, Bar bar);
+void ProtSpong(Foo foo, Bar bar);
#else
-int ProtSpong(Bar bar, Foo foo);
+int ProtSpong(Bar bar, Foo foo);
#endif
This example is allowed:
#ifdef PROTECTION
-void ProtSync(Space space);
-/* more decls. */
+void ProtSync(Space space);
+/* more decls. */
#else /* PROTECTION not */
#define ProtSync(space) NOOP
-/* more decls. */
+/* more decls. */
#endif /* PROTECTION */
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
In Scheme, an open file is represented by a port. In the toy Scheme interpreter, a port is a wrapper around a standard C file handle:
typedef struct port_s {
- type_t type; /* TYPE_PORT */
- obj_t name; /* name of stream */
+ type_t type; /* TYPE_PORT */
+ obj_t name; /* name of stream */
FILE *stream;
} port_s;
Any block in an automatically managed pool can be registered for finalization by calling mps_finalize(). In the toy Scheme interpreter, this can be done in make_port:
- static obj_t make_port(obj_t name, FILE *stream)
+ static obj_t make_port(obj_t name, FILE *stream)
{
- mps_addr_t port_ref;
- obj_t obj;
- mps_addr_t addr;
+ mps_addr_t port_ref;
+ obj_t obj;
+ mps_addr_t addr;
size_t size = ALIGN(sizeof(port_s));
do {
- mps_res_t res = mps_reserve(&addr, obj_ap, size);
+ mps_res_t res = mps_reserve(&addr, obj_ap, size);
if (res != MPS_RES_OK) error("out of memory in make_port");
obj = addr;
obj->port.type = TYPE_PORT;
@@ -127,17 +127,17 @@ reachable.
message queue is at the start of the read–eval–print loop. When a
finalization message is found, the associated file handle is closed
(unless it has been closed already), and the message is discarded.
- mps_message_type_t type;
+ mps_message_type_t type;
while (mps_message_queue_type(&type, arena)) {
- mps_message_t message;
- mps_bool_t b;
+ mps_message_t message;
+ mps_bool_t b;
b = mps_message_get(&message, arena, type);
assert(b); /* we just checked there was one */
if (type == mps_message_type_finalization()) {
- mps_addr_t port_ref;
- obj_t port;
+ mps_addr_t port_ref;
+ obj_t port;
mps_message_finalization_ref(&port_ref, arena, message);
port = port_ref;
assert(TYPE(port) == TYPE_PORT);
@@ -176,11 +176,11 @@ finalization message is found, the associated file handle is closed
optimization: setting stream to NULL ensures that the file
handle wouldn’t be closed more than once, even if the port object were
later finalized.
-static void port_close(obj_t port)
+static void port_close(obj_t port)
{
assert(TYPE(port) == TYPE_PORT);
if(port->port.stream != NULL) {
- mps_addr_t port_ref = port;
+ mps_addr_t port_ref = port;
fclose(port->port.stream);
port->port.stream = NULL;
mps_definalize(arena, &port_ref);
@@ -253,24 +253,24 @@ depended on might have moved since their location was depended upon.
case of a hash table, it is most convenient to inline it in the hash
table’s metadata:
typedef struct table_s {
- type_t type; /* TYPE_TABLE */
- hash_t hash; /* hash function */
- cmp_t cmp; /* comparison function */
+ type_t type; /* TYPE_TABLE */
+ hash_t hash; /* hash function */
+ cmp_t cmp; /* comparison function */
mps_ld_s ld; /* location dependency */
- obj_t buckets; /* hash buckets */
+ obj_t buckets; /* hash buckets */
} table_s;
Before being used, the location dependency must be reset to indicate
that nothing is depended upon, by calling mps_ld_reset().
For example:
-static obj_t make_table(size_t length, hash_t hashf, cmp_t cmpf)
+static obj_t make_table(size_t length, hash_t hashf, cmp_t cmpf)
{
- obj_t obj;
- mps_addr_t addr;
+ obj_t obj;
+ mps_addr_t addr;
size_t l, size = ALIGN(sizeof(table_s));
do {
- mps_res_t res = mps_reserve(&addr, obj_ap, size);
+ mps_res_t res = mps_reserve(&addr, obj_ap, size);
if (res != MPS_RES_OK) error("out of memory in make_table");
obj = addr;
obj->table.type = TYPE_TABLE;
@@ -296,12 +296,12 @@ have taken place after the hash was computed but before you added the
dependency.)
In the toy Scheme interpreter, this is done just before the computation
of the hash of the address.
-static unsigned long eq_hash(obj_t obj, mps_ld_t ld)
+static unsigned long eq_hash(obj_t obj, mps_ld_t ld)
{
- union {char s[sizeof(obj_t)]; obj_t addr;} u;
+ union {char s[sizeof(obj_t)]; obj_t addr;} u;
if (ld) mps_ld_add(ld, arena, obj);
u.addr = obj;
- return hash(u.s, sizeof(obj_t));
+ return hash(u.s, sizeof(obj_t));
}
@@ -309,7 +309,7 @@ of the hash of the address.
avoids adding unnecessary dependencies on a location. For example, an
eqv? hash table does not need to depend on the location of numbers
and characters:
-static unsigned long eqv_hash(obj_t obj, mps_ld_t ld)
+static unsigned long eqv_hash(obj_t obj, mps_ld_t ld)
{
switch(TYPE(obj)) {
case TYPE_INTEGER:
@@ -339,7 +339,7 @@ the key is stale: that is, if the garbage collector moved the key. The
function mps_ld_isstale() tells you if any of the blocks whose
locations you depended upon since the last call to
mps_ld_reset() might have moved.
-static obj_t table_ref(obj_t tbl, obj_t key)
+static obj_t table_ref(obj_t tbl, obj_t key)
{
struct bucket_s *b = buckets_find(tbl, tbl->table.buckets, key, NULL);
if (b && b->key != NULL && b->key != obj_deleted)
@@ -361,7 +361,7 @@ unnecessarily rehashing the whole table. (It’s crucial, however, to
actually test that key appears in the table, not just that some key
with the same hash does.)
When a table is rehashed, call mps_ld_reset() to clear the
-location dependency, and the mps_ld_add() for each key before it is added back to the table.
+location dependency, and then mps_ld_add() for each key before it is added back to the table.
Note
Somewhat misleadingly, mps_ld_isstale() takes an address as
@@ -425,7 +425,7 @@ causes static void table_delete(obj_t tbl, obj_t key)
+static void table_delete(obj_t tbl, obj_t key)
{
struct bucket_s *b;
assert(TYPE(tbl) == TYPE_TABLE);
@@ -500,9 +500,9 @@ vectors, one for the keys and the other for the values, to allow keys
and values to have different ranks.
These vectors will be allocated from an AWL pool with two allocation
points, one for strong references, and one for weak references:
-static mps_pool_t buckets_pool; /* pool for hash table buckets */
-static mps_ap_t strong_buckets_ap; /* allocation point for strong buckets */
-static mps_ap_t weak_buckets_ap; /* allocation point for weak buckets */
+static mps_pool_t buckets_pool; /* pool for hash table buckets */
+static mps_ap_t strong_buckets_ap; /* allocation point for strong buckets */
+static mps_ap_t weak_buckets_ap; /* allocation point for weak buckets */
@@ -515,16 +515,16 @@ allocated in a non-moving pool such as AWL.
replacing it with a null pointer when it is fixed by the object
format’s scan method. So the scan method for the buckets is
going to have the following structure. (See below for the actual code.)
-static mps_res_t buckets_scan(mps_ss_t ss, mps_addr_t base, mps_addr_t limit)
+static mps_res_t buckets_scan(mps_ss_t ss, mps_addr_t base, mps_addr_t limit)
{
MPS_SCAN_BEGIN(ss) {
while (base < limit) {
- buckets_t buckets = base;
+ buckets_t buckets = base;
size_t length = buckets->length;
for (i = 0; i < length; ++i) {
- mps_addr_t p = buckets->bucket[i];
+ mps_addr_t p = buckets->bucket[i];
if (MPS_FIX1(ss, p)) {
- mps_res_t res = MPS_FIX2(ss, &p);
+ mps_res_t res = MPS_FIX2(ss, &p);
if (res != MPS_RES_OK) return res;
if (p == NULL) {
/* TODO: key/value was splatted: splat value/key too */
@@ -556,9 +556,9 @@ and vice versa.
The AWL pool determines an object’s dependent object by calling a
function that you supply when creating the pool. This means that each
object needs to have a reference to its dependent object:
-static mps_addr_t buckets_find_dependent(mps_addr_t addr)
+static mps_addr_t buckets_find_dependent(mps_addr_t addr)
{
- buckets_t buckets = addr;
+ buckets_t buckets = addr;
return buckets->dependent;
}
@@ -580,25 +580,25 @@ See the <
size_t length; /* number of buckets (tagged) */
size_t used; /* number of buckets in use (tagged) */
size_t deleted; /* number of deleted buckets (tagged) */
- obj_t bucket[1]; /* hash buckets */
-} buckets_s, *buckets_t;
+ obj_t bucket[1]; /* hash buckets */
+} buckets_s, *buckets_t;
Now the full details of the scan method can be given, with the revised
code highlighted:
-static mps_res_t buckets_scan(mps_ss_t ss, mps_addr_t base, mps_addr_t limit)
+static mps_res_t buckets_scan(mps_ss_t ss, mps_addr_t base, mps_addr_t limit)
{
MPS_SCAN_BEGIN(ss) {
while (base < limit) {
- buckets_t buckets = base;
+ buckets_t buckets = base;
size_t i, length = UNTAG_SIZE(buckets->length);
FIX(buckets->dependent);
if(buckets->dependent != NULL)
assert(buckets->dependent->length == buckets->length);
for (i = 0; i < length; ++i) {
- mps_addr_t p = buckets->bucket[i];
+ mps_addr_t p = buckets->bucket[i];
if (MPS_FIX1(ss, p)) {
- mps_res_t res = MPS_FIX2(ss, &p);
+ mps_res_t res = MPS_FIX2(ss, &p);
if (res != MPS_RES_OK) return res;
if (p == NULL) {
/* key/value was splatted: splat value/key too */
@@ -649,9 +649,9 @@ used”, and NULL
The skip method is straightforward:
-static mps_addr_t buckets_skip(mps_addr_t base)
+static mps_addr_t buckets_skip(mps_addr_t base)
{
- buckets_t buckets = base;
+ buckets_t buckets = base;
size_t length = UNTAG_SIZE(buckets->length);
return (char *)base +
ALIGN(offsetof(buckets_s, bucket) +
@@ -749,15 +749,15 @@ other strong references keeping it alive.
Here’s the new symbol structure:
typedef struct symbol_s {
- type_t type; /* TYPE_SYMBOL */
- obj_t name; /* its name (a string) */
+ type_t type; /* TYPE_SYMBOL */
+ obj_t name; /* its name (a string) */
} symbol_s;
and the new implementation of intern:
-static obj_t intern_string(obj_t name)
+static obj_t intern_string(obj_t name)
{
- obj_t symbol;
+ obj_t symbol;
assert(TYPE(name) == TYPE_STRING);
symbol = table_ref(symtab, name);
if(symbol == NULL) {
@@ -767,7 +767,7 @@ other strong references keeping it alive.
return symbol;
}
-static obj_t intern(char *string)
+static obj_t intern(char *string)
{
return intern_string(make_string(strlen(string), string));
}
@@ -775,7 +775,7 @@ other strong references keeping it alive.
The symbol table now becomes a very simple root, that only has
to be registered once (not every time it is rehashed, as previously):
-mps_addr_t ref;
+mps_addr_t ref;
symtab = NULL;
ref = &symtab;
res = mps_root_create_table(&symtab_root, arena, mps_rank_exact(), 0,
@@ -823,8 +823,8 @@ avoided.
Here the appropriate class is AMCZ (Automatic Mostly-Copying Zero-rank), and the necessary code
changes are straightforward. First, global variables for the new pool
and its allocation point:
-static mps_pool_t leaf_pool; /* pool for leaf objects */
-static mps_ap_t leaf_ap; /* allocation point for leaf objects */
+static mps_pool_t leaf_pool; /* pool for leaf objects */
+static mps_ap_t leaf_ap; /* allocation point for leaf objects */
Second, the leaf objects must be allocated on leaf_ap instead of
@@ -886,7 +886,7 @@ objects that have been left behind.
title="next chapter">ReferenceDownloads
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
@@ -894,7 +894,7 @@ objects that have been left behind.
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
Contact us
@@ -914,7 +914,7 @@ objects that have been left behind.
previous |
- Memory Pool System 1.110.0 documentation »
+ Memory Pool System 1.111.0 documentation »
Guide »
diff --git a/mps/manual/html/guide/build.html b/mps/manual/html/guide/build.html
index 088852866ba..9eea0908491 100644
--- a/mps/manual/html/guide/build.html
+++ b/mps/manual/html/guide/build.html
@@ -8,7 +8,7 @@
- 2. Building the Memory Pool System — Memory Pool System 1.110.0 documentation
+ 2. Building the Memory Pool System — Memory Pool System 1.111.0 documentation
@@ -16,7 +16,7 @@
-
+
@@ -44,7 +44,7 @@
previous |
- Memory Pool System 1.110.0 documentation »
+ Memory Pool System 1.111.0 documentation »
Guide »
@@ -377,7 +377,7 @@ the command:
title="next chapter">3. Garbage collecting a language with the Memory Pool SystemDownloads
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
@@ -385,7 +385,7 @@ the command:
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
Contact us
@@ -405,7 +405,7 @@ the command:
previous |
- Memory Pool System 1.110.0 documentation »
+ Memory Pool System 1.111.0 documentation »
Guide »
diff --git a/mps/manual/html/guide/debug.html b/mps/manual/html/guide/debug.html
index f8b570687f3..7e52d984e9c 100644
--- a/mps/manual/html/guide/debug.html
+++ b/mps/manual/html/guide/debug.html
@@ -8,7 +8,7 @@
- 4. Debugging with the Memory Pool System — Memory Pool System 1.110.0 documentation
+ 4. Debugging with the Memory Pool System — Memory Pool System 1.111.0 documentation
@@ -16,7 +16,7 @@
-
+
@@ -44,7 +44,7 @@
previous |
- Memory Pool System 1.110.0 documentation »
+ Memory Pool System 1.111.0 documentation »
Guide »
@@ -227,13 +227,13 @@ up to the detection of the error. See 4.3. Example: allocating with wrong size¶
Here’s another kind of mistake: an off-by-one error in make_string
leading to the allocation of string objects with the wrong size:
-static obj_t make_string(size_t length, char *string)
+static obj_t make_string(size_t length, char *string)
{
- obj_t obj;
- mps_addr_t addr;
+ obj_t obj;
+ mps_addr_t addr;
size_t size = ALIGN(offsetof(string_s, string) + length/* oops, forgot: +1 */);
do {
- mps_res_t res = mps_reserve(&addr, obj_ap, size);
+ mps_res_t res = mps_reserve(&addr, obj_ap, size);
if (res != MPS_RES_OK) error("out of memory in make_string");
obj = addr;
obj->string.type = TYPE_STRING;
@@ -389,7 +389,7 @@ see if we can help.
title="next chapter">5. Tuning the Memory Pool System for performanceDownloads
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
@@ -397,7 +397,7 @@ see if we can help.
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
Contact us
@@ -417,7 +417,7 @@ see if we can help.
previous |
- Memory Pool System 1.110.0 documentation »
+ Memory Pool System 1.111.0 documentation »
Guide »
diff --git a/mps/manual/html/guide/index.html b/mps/manual/html/guide/index.html
index eed324c5ae1..b3538698ef5 100644
--- a/mps/manual/html/guide/index.html
+++ b/mps/manual/html/guide/index.html
@@ -8,7 +8,7 @@
- Guide — Memory Pool System 1.110.0 documentation
+ Guide — Memory Pool System 1.111.0 documentation
@@ -16,7 +16,7 @@
-
+
@@ -43,7 +43,7 @@
previous |
- Memory Pool System 1.110.0 documentation »
+ Memory Pool System 1.111.0 documentation »
@@ -143,7 +143,7 @@
title="next chapter">1. Overview of the Memory Pool SystemDownloads
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
@@ -151,7 +151,7 @@
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
Contact us
@@ -171,7 +171,7 @@
previous |
- Memory Pool System 1.110.0 documentation »
+ Memory Pool System 1.111.0 documentation »
@@ -90,7 +90,7 @@ pointers to strings.
A Scheme object (whose type is not necessarily known) is represented by
an obj_t, which is a pointer to a union of every type in the
language:
-typedef union obj_u *obj_t;
+typedef union obj_u *obj_t;
typedef union obj_u {
type_s type;
pair_s pair;
@@ -113,8 +113,8 @@ specifying the type of the object (pair_s defined as
follows:
typedef struct pair_s {
- type_t type; /* TYPE_PAIR */
- obj_t car, cdr; /* first and second projections */
+ type_t type; /* TYPE_PAIR */
+ obj_t car, cdr; /* first and second projections */
} pair_s;
@@ -122,7 +122,7 @@ follows:
operate on objects generically, testing TYPE(obj) as necessary
(which is a macro for obj->type.type). For example, the
print() function is implemented like this:
-static void print(obj_t obj, unsigned depth, FILE *stream)
+static void print(obj_t obj, unsigned depth, FILE *stream)
{
switch (TYPE(obj)) {
case TYPE_INTEGER:
@@ -140,9 +140,9 @@ operate on objects generically, testing
Each constructor allocates memory for the new object by calling
malloc. For example, make_pair is the constructor for pairs:
-static obj_t make_pair(obj_t car, obj_t cdr)
+static obj_t make_pair(obj_t car, obj_t cdr)
{
- obj_t obj = (obj_t)malloc(sizeof(pair_s));
+ obj_t obj = (obj_t)malloc(sizeof(pair_s));
if (obj == NULL) error("out of memory");
obj->pair.type = TYPE_PAIR;
CAR(obj) = car;
@@ -181,7 +181,7 @@ general-purpose programs you’ll want to use the virtual memory arena.
There’s only one arena, and many MPS functions take an arena as an
argument, so it makes sense for the arena to be a global variable
rather than having to pass it around everywhere:
-static mps_arena_t arena;
+static mps_arena_t arena;
Create an arena by calling mps_arena_create(). This function
@@ -193,7 +193,7 @@ its address space, the less efficient garbage collection will become.
The MPS works best if you reserve an address space that is several times
larger than your peak memory usage.
Let’s reserve 32 megabytes:
-mps_res_t res;
+mps_res_t res;
res = mps_arena_create(&arena,
mps_arena_class_vm(),
(size_t)(32 * 1024 * 1024));
@@ -266,7 +266,7 @@ code for creating the object format for the toy Scheme interpreter:
obj_pad,
};
-mps_fmt_t obj_fmt;
+mps_fmt_t obj_fmt;
res = mps_fmt_create_A(&obj_fmt, arena, &obj_fmt_s);
if (res != MPS_RES_OK) error("Couldn't create obj format");
@@ -324,11 +324,11 @@ which the scan method was called. The scan method is called to
discover references and so determine which objects are alive and which are dead, and also to update references
after objects have been moved.
Here’s the scan method for the toy Scheme interpreter:
-static mps_res_t obj_scan(mps_ss_t ss, mps_addr_t base, mps_addr_t limit)
+static mps_res_t obj_scan(mps_ss_t ss, mps_addr_t base, mps_addr_t limit)
{
MPS_SCAN_BEGIN(ss) {
while (base < limit) {
- obj_t obj = base;
+ obj_t obj = base;
switch (TYPE(obj)) {
case TYPE_PAIR:
FIX(CAR(obj));
@@ -406,9 +406,9 @@ soon as practicable.
mps_fmt_skip_t. It is called by the MPS to skip over an
object belonging to the format, and also to determine its size.
Here’s the skip method for the toy Scheme interpreter:
-static mps_addr_t obj_skip(mps_addr_t base)
+static mps_addr_t obj_skip(mps_addr_t base)
{
- obj_t obj = base;
+ obj_t obj = base;
switch (TYPE(obj)) {
case TYPE_PAIR:
base = (char *)base + ALIGN(sizeof(pair_s));
@@ -461,24 +461,24 @@ objects might be as small as two words (for example, integers).
The first type is suitable for forwarding objects of three words or
longer:
typedef struct fwd_s {
- type_t type; /* TYPE_FWD */
- obj_t fwd; /* forwarded object */
+ type_t type; /* TYPE_FWD */
+ obj_t fwd; /* forwarded object */
size_t size; /* total size of this object */
} fwd_s;
while the second type is suitable for forwarding objects of two words:
typedef struct fwd2_s {
- type_t type; /* TYPE_FWD2 */
- obj_t fwd; /* forwarded object */
+ type_t type; /* TYPE_FWD2 */
+ obj_t fwd; /* forwarded object */
} fwd2_s;
Here’s the forward method for the toy Scheme interpreter:
-static void obj_fwd(mps_addr_t old, mps_addr_t new)
+static void obj_fwd(mps_addr_t old, mps_addr_t new)
{
- obj_t obj = old;
- mps_addr_t limit = obj_skip(old);
+ obj_t obj = old;
+ mps_addr_t limit = obj_skip(old);
size_t size = (char *)limit - (char *)old;
assert(size >= ALIGN_UP(sizeof(fwd2_s)));
if (size == ALIGN_UP(sizeof(fwd2_s))) {
@@ -537,9 +537,9 @@ scanning them could be avoided.
object is a forwarding object, and if it is, to determine the
location where that object was moved.
Here’s the is-forwarded method for the toy Scheme interpreter:
-static mps_addr_t obj_isfwd(mps_addr_t addr)
+static mps_addr_t obj_isfwd(mps_addr_t addr)
{
- obj_t obj = addr;
+ obj_t obj = addr;
switch (TYPE(obj)) {
case TYPE_FWD2:
return obj->fwd2.fwd;
@@ -573,7 +573,7 @@ word. As with forwarding objects, this can be solved by having two
types of padding object. The first type is suitable for padding
objects of two words or longer:
typedef struct pad_s {
- type_t type; /* TYPE_PAD */
+ type_t type; /* TYPE_PAD */
size_t size; /* total size of this object */
} pad_s;
@@ -581,14 +581,14 @@ objects of two words or longer:
while the second type is suitable for padding objects consisting of a
single word:
typedef struct pad1_s {
- type_t type; /* TYPE_PAD1 */
+ type_t type; /* TYPE_PAD1 */
} pad1_s;
Here’s the padding method:
-static void obj_pad(mps_addr_t addr, size_t size)
+static void obj_pad(mps_addr_t addr, size_t size)
{
- obj_t obj = addr;
+ obj_t obj = addr;
assert(size >= ALIGN(sizeof(pad1_s)));
if (size == ALIGN(sizeof(pad1_s))) {
TYPE(obj) = TYPE_PAD1;
@@ -664,7 +664,7 @@ the pool creation code. First, the header for the AMC pool class:
Second, the object format:
struct mps_fmt_A_s obj_fmt_s = {
- sizeof(mps_word_t),
+ sizeof(mps_word_t),
obj_scan,
obj_skip,
NULL,
@@ -673,7 +673,7 @@ the pool creation code. First, the header for the AMC pool class:
obj_pad,
};
-mps_fmt_t obj_fmt;
+mps_fmt_t obj_fmt;
res = mps_fmt_create_A(&obj_fmt, arena, &obj_fmt_s);
if (res != MPS_RES_OK) error("Couldn't create obj format");
@@ -684,7 +684,7 @@ the pool creation code. First, the header for the AMC pool class:
{ 170, 0.45 },
};
-mps_chain_t obj_chain;
+mps_chain_t obj_chain;
res = mps_chain_create(&obj_chain,
arena,
LENGTH(obj_gen_params),
@@ -693,7 +693,7 @@ the pool creation code. First, the header for the AMC pool class:
And finally the pool:
-mps_pool_t obj_pool;
+mps_pool_t obj_pool;
res = mps_pool_create(&obj_pool,
arena,
mps_class_amc(),
@@ -721,15 +721,15 @@ memory allocated by other memory managers. For these roots you must
describe to the MPS how to scan them for references.
The toy Scheme interpreter has a number of static variables that point
to heap-allocated objects. First, the special objects, including:
-static obj_t obj_empty; /* (), the empty list */
+static obj_t obj_empty; /* (), the empty list */
Second, the predefined symbols, including:
-static obj_t obj_quote; /* "quote" symbol */
+static obj_t obj_quote; /* "quote" symbol */
And third, the global symbol table:
-static obj_t *symtab;
+static obj_t *symtab;
static size_t symtab_size;
@@ -740,7 +740,7 @@ described above.
In the case of the toy Scheme interpreter, the root scanning function
for the special objects and the predefined symbols could be written
like this:
-static mps_res_t globals_scan(mps_ss_t ss, void *p, size_t s)
+static mps_res_t globals_scan(mps_ss_t ss, void *p, size_t s)
{
MPS_SCAN_BEGIN(ss) {
FIX(obj_empty);
@@ -755,7 +755,7 @@ like this:
but in fact the interpreter already has tables of these global
objects, so it’s simpler and more extensible for the root scanning
function to iterate over them:
-static mps_res_t globals_scan(mps_ss_t ss, void *p, size_t s)
+static mps_res_t globals_scan(mps_ss_t ss, void *p, size_t s)
{
MPS_SCAN_BEGIN(ss) {
size_t i;
@@ -770,7 +770,7 @@ function to iterate over them:
Each root scanning function must be registered with the MPS by calling
mps_root_create(), like this:
-mps_root_t globals_root;
+mps_root_t globals_root;
res = mps_root_create(&globals_root, arena, mps_rank_exact(), 0,
globals_scan, NULL, 0);
if (res != MPS_RES_OK) error("Couldn't register globals root");
@@ -808,11 +808,11 @@ after the rehash has completed, de-registering the old root by calling
the global symbol table, but the case of a table of references is
sufficiently common that the MPS provides a convenient (and optimized)
function, mps_root_create_table(), for registering it:
-static mps_root_t symtab_root;
+static mps_root_t symtab_root;
/* ... */
-mps_addr_t ref = symtab;
+mps_addr_t ref = symtab;
res = mps_root_create_table(&symtab_root, arena, mps_rank_exact(), 0,
ref, symtab_size);
if (res != MPS_RES_OK) error("Couldn't register new symtab root");
@@ -821,15 +821,15 @@ function, The root must be re-registered whenever the global symbol table
changes size:
static void rehash(void) {
- obj_t *old_symtab = symtab;
+ obj_t *old_symtab = symtab;
unsigned old_symtab_size = symtab_size;
- mps_root_t old_symtab_root = symtab_root;
+ mps_root_t old_symtab_root = symtab_root;
unsigned i;
- mps_addr_t ref;
- mps_res_t res;
+ mps_addr_t ref;
+ mps_res_t res;
symtab_size *= 2;
- symtab = malloc(sizeof(obj_t) * symtab_size);
+ symtab = malloc(sizeof(obj_t) * symtab_size);
if (symtab == NULL) error("out of memory");
/* Initialize the new table to NULL so that "find" will work. */
@@ -843,7 +843,7 @@ changes size:
for (i = 0; i < old_symtab_size; ++i)
if (old_symtab[i] != NULL) {
- obj_t *where = find(old_symtab[i]->symbol.string);
+ obj_t *where = find(old_symtab[i]->symbol.string);
assert(where != NULL); /* new table shouldn't be full */
assert(*where == NULL); /* shouldn't be in new table */
*where = old_symtab[i];
@@ -906,7 +906,7 @@ programs written in arena by calling
mps_thread_reg():
-mps_thr_t thread;
+mps_thr_t thread;
res = mps_thread_reg(&thread, arena);
if (res != MPS_RES_OK) error("Couldn't register thread");
@@ -915,7 +915,7 @@ programs written in mps_root_create_reg() and passing
mps_stack_scan_ambig():
void *marker = ▮
-mps_root_t reg_root;
+mps_root_t reg_root;
res = mps_root_create_reg(®_root,
arena,
mps_rank_ambig(),
@@ -946,11 +946,11 @@ to start allocating.
Manual pools typically support
malloc-like allocation using the function
mps_alloc(). But automatic pools cannot, because of the following problem:
-static obj_t make_pair(obj_t car, obj_t cdr)
+static obj_t make_pair(obj_t car, obj_t cdr)
{
- obj_t obj;
- mps_addr_t addr;
- mps_res_t res;
+ obj_t obj;
+ mps_addr_t addr;
+ mps_res_t res;
res = mps_alloc(&addr, pool, sizeof(pair_s));
if (res != MPS_RES_OK) error("out of memory in make_pair");
obj = addr;
@@ -973,7 +973,7 @@ may abort.
Allocation point protocol. This needs an additional
structure, an allocation point, to be attached to the pool by
calling mps_ap_create():
-static mps_ap_t obj_ap;
+static mps_ap_t obj_ap;
/* ... */
@@ -982,13 +982,13 @@ calling static obj_t make_pair(obj_t car, obj_t cdr)
+static obj_t make_pair(obj_t car, obj_t cdr)
{
- obj_t obj;
- mps_addr_t addr;
+ obj_t obj;
+ mps_addr_t addr;
size_t size = ALIGN(sizeof(pair_s));
do {
- mps_res_t res = mps_reserve(&addr, obj_ap, size);
+ mps_res_t res = mps_reserve(&addr, obj_ap, size);
if (res != MPS_RES_OK) error("out of memory in make_pair");
obj = addr;
obj->pair.type = TYPE_PAIR;
@@ -1150,7 +1150,7 @@ then you’ll be more interested in the chapter 4. Debugging with the Memory Pool SystemDownloads
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
@@ -1158,7 +1158,7 @@ then you’ll be more interested in the chapter
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
Contact us
@@ -1178,7 +1178,7 @@ then you’ll be more interested in the chapter
previous |
-
Memory Pool System 1.110.0 documentation »
+ Memory Pool System 1.111.0 documentation »
Guide »
diff --git a/mps/manual/html/guide/overview.html b/mps/manual/html/guide/overview.html
index c8686f9d32e..5a20b0269de 100644
--- a/mps/manual/html/guide/overview.html
+++ b/mps/manual/html/guide/overview.html
@@ -8,7 +8,7 @@
- 1. Overview of the Memory Pool System — Memory Pool System 1.110.0 documentation
+ 1. Overview of the Memory Pool System — Memory Pool System 1.111.0 documentation
@@ -16,7 +16,7 @@
-
+
@@ -44,7 +44,7 @@
previous |
- Memory Pool System 1.110.0 documentation »
+ Memory Pool System 1.111.0 documentation »
Guide »
@@ -179,7 +179,7 @@ to learn how to integrate it with the Memory Pool System. See
title="next chapter">2. Building the Memory Pool SystemDownloads
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
@@ -187,7 +187,7 @@ to learn how to integrate it with the Memory Pool System. See
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
Contact us
@@ -207,7 +207,7 @@ to learn how to integrate it with the Memory Pool System. See
previous |
- Memory Pool System 1.110.0 documentation »
+ Memory Pool System 1.111.0 documentation »
Guide »
diff --git a/mps/manual/html/guide/perf.html b/mps/manual/html/guide/perf.html
index c95c6eb271b..71ea4bde8af 100644
--- a/mps/manual/html/guide/perf.html
+++ b/mps/manual/html/guide/perf.html
@@ -8,7 +8,7 @@
- 5. Tuning the Memory Pool System for performance — Memory Pool System 1.110.0 documentation
+ 5. Tuning the Memory Pool System for performance — Memory Pool System 1.111.0 documentation
@@ -16,7 +16,7 @@
-
+
@@ -44,7 +44,7 @@
previous |
- Memory Pool System 1.110.0 documentation »
+ Memory Pool System 1.111.0 documentation »
Guide »
@@ -407,7 +407,7 @@ very large address space is ruinous to performance.
title="next chapter">6. Advanced topicsDownloads
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
@@ -415,7 +415,7 @@ very large address space is ruinous to performance.
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
Contact us
@@ -435,7 +435,7 @@ very large address space is ruinous to performance.
previous |
- Memory Pool System 1.110.0 documentation »
+ Memory Pool System 1.111.0 documentation »
Guide »
diff --git a/mps/manual/html/index.html b/mps/manual/html/index.html
index 64218494bcd..cff70dc3459 100644
--- a/mps/manual/html/index.html
+++ b/mps/manual/html/index.html
@@ -8,7 +8,7 @@
- Memory Pool System — Memory Pool System 1.110.0 documentation
+ Memory Pool System — Memory Pool System 1.111.0 documentation
@@ -16,7 +16,7 @@
-
+
@@ -39,7 +39,7 @@
next |
- Memory Pool System 1.110.0 documentation »
+ Memory Pool System 1.111.0 documentation »
@@ -188,7 +188,7 @@
title="next chapter">GuideDownloads
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
@@ -196,7 +196,7 @@
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
Contact us
@@ -213,7 +213,7 @@
next |
- Memory Pool System 1.110.0 documentation »
+ Memory Pool System 1.111.0 documentation »
@@ -222,7 +222,7 @@ manager that can respond dynamically to changing requirements.
title="next chapter">3. Recycling techniquesDownloads
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
@@ -230,7 +230,7 @@ manager that can respond dynamically to changing requirements.
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
Contact us
@@ -250,7 +250,7 @@ manager that can respond dynamically to changing requirements.
previous |
- Memory Pool System 1.110.0 documentation »
+ Memory Pool System 1.111.0 documentation »
Introduction to memory management »
diff --git a/mps/manual/html/mmref/begin.html b/mps/manual/html/mmref/begin.html
index 7eab925c3df..01c0ffcd970 100644
--- a/mps/manual/html/mmref/begin.html
+++ b/mps/manual/html/mmref/begin.html
@@ -8,7 +8,7 @@
- 1. Overview — Memory Pool System 1.110.0 documentation
+ 1. Overview — Memory Pool System 1.111.0 documentation
@@ -16,7 +16,7 @@
-
+
@@ -44,7 +44,7 @@
previous |
- Memory Pool System 1.110.0 documentation »
+ Memory Pool System 1.111.0 documentation »
Introduction to memory management »
@@ -309,7 +309,7 @@ handbook covering all aspects of garbage collection.
title="next chapter">2. Allocation techniquesDownloads
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
@@ -317,7 +317,7 @@ handbook covering all aspects of garbage collection.
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
Contact us
@@ -337,7 +337,7 @@ handbook covering all aspects of garbage collection.
previous |
- Memory Pool System 1.110.0 documentation »
+ Memory Pool System 1.111.0 documentation »
Introduction to memory management »
diff --git a/mps/manual/html/mmref/bib.html b/mps/manual/html/mmref/bib.html
index 94cefb372e9..a521d287424 100644
--- a/mps/manual/html/mmref/bib.html
+++ b/mps/manual/html/mmref/bib.html
@@ -8,7 +8,7 @@
- Bibliography — Memory Pool System 1.110.0 documentation
+ Bibliography — Memory Pool System 1.111.0 documentation
@@ -16,7 +16,7 @@
-
+
@@ -43,7 +43,7 @@
previous |
- Memory Pool System 1.110.0 documentation »
+ Memory Pool System 1.111.0 documentation »
@@ -437,7 +437,7 @@
title="next chapter">AcknowledgementsDownloads
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
@@ -445,7 +445,7 @@
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
Contact us
@@ -465,7 +465,7 @@
previous |
- Memory Pool System 1.110.0 documentation »
+ Memory Pool System 1.111.0 documentation »
@@ -129,7 +129,7 @@ help of:
title="next chapter">Memory Management GlossaryDownloads
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
@@ -137,7 +137,7 @@ help of:
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
Contact us
@@ -157,7 +157,7 @@ help of:
previous |
- Memory Pool System 1.110.0 documentation »
+ Memory Pool System 1.111.0 documentation »
@@ -611,7 +611,7 @@ that poor BibliographyDownloads
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
@@ -619,7 +619,7 @@ that poor
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
Contact us
@@ -639,7 +639,7 @@ that poor
previous |
- Memory Pool System 1.110.0 documentation »
+ Memory Pool System 1.111.0 documentation »
Introduction to memory management »
diff --git a/mps/manual/html/mmref/index.html b/mps/manual/html/mmref/index.html
index c8fd56cf9b8..b6876bb11eb 100644
--- a/mps/manual/html/mmref/index.html
+++ b/mps/manual/html/mmref/index.html
@@ -8,7 +8,7 @@
- Introduction to memory management — Memory Pool System 1.110.0 documentation
+ Introduction to memory management — Memory Pool System 1.111.0 documentation
@@ -16,7 +16,7 @@
-
+
@@ -43,7 +43,7 @@
previous |
- Memory Pool System 1.110.0 documentation »
+ Memory Pool System 1.111.0 documentation »
@@ -106,7 +106,7 @@
title="next chapter">1. OverviewDownloads
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
@@ -114,7 +114,7 @@
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
Contact us
@@ -134,7 +134,7 @@
previous |
- Memory Pool System 1.110.0 documentation »
+ Memory Pool System 1.111.0 documentation »
@@ -679,7 +679,7 @@ developed or implemented for Smalltalk.
title="next chapter">5. Frequently Asked QuestionsDownloads
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
@@ -687,7 +687,7 @@ developed or implemented for Smalltalk.
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
Contact us
@@ -707,7 +707,7 @@ developed or implemented for Smalltalk.
previous |
- Memory Pool System 1.110.0 documentation »
+ Memory Pool System 1.111.0 documentation »
Introduction to memory management »
diff --git a/mps/manual/html/mmref/recycle.html b/mps/manual/html/mmref/recycle.html
index 290c44ba981..640d100fff7 100644
--- a/mps/manual/html/mmref/recycle.html
+++ b/mps/manual/html/mmref/recycle.html
@@ -8,7 +8,7 @@
- 3. Recycling techniques — Memory Pool System 1.110.0 documentation
+ 3. Recycling techniques — Memory Pool System 1.111.0 documentation
@@ -16,7 +16,7 @@
-
+
@@ -44,7 +44,7 @@
previous |
- Memory Pool System 1.110.0 documentation »
+ Memory Pool System 1.111.0 documentation »
Introduction to memory management »
@@ -292,7 +292,7 @@ references are deleted.
title="next chapter">4. Memory management in various languagesDownloads
-MPS Kit release 1.110.0
+MPS Kit release 1.111.0
All MPS Kit releases
@@ -300,7 +300,7 @@ references are deleted.
Known issues
-Issues fixed in release 1.110.0
+Issues fixed in release 1.111.0
Contact us
@@ -320,7 +320,7 @@ references are deleted.
previous |
- Memory Pool System 1.110.0 documentation »
+ Memory Pool System 1.111.0 documentation »
Introduction to memory management »
diff --git a/mps/manual/html/objects.inv b/mps/manual/html/objects.inv
index 596df9e585909db7da0b2c2c2072f799286f4ee7..b079c65a7e0868aea6007e81e860f3eb82ae2ebe 100644
GIT binary patch
literal 21989
zcmY#Z2rkIT%&Sny%qvUHE6FdaR47X=D$dN$Q!wIERtPA{&q_@$u~P6&%>~H?xdD}+H*S}7Rn85$aLDJz6zq$(7p<|bz5rKA=qB7H8(AD^%rVCh2ii+*(^3U3|xF(!1StuI@6nXId7Y*U@}$bLKRs
z*R-5tL6gF-+}Qm4kOT9JJf4dTJx-Gs)%{(0W|#OXuE-4gH)~wOnjB&`efsot`t84M
zzE|ykC1(A~E8aTu*Fw$zW><4-S1tee^uOHl;NSJ9f>qga{FztJf0d`Td-?U*Z&&B;
z_nP(h;-W8wQ@?!4-Q^Iq_h-q)+2-P&_OU9qF)DZCOrBqLt*_qWQB~jhrJyF!H*(AD
z;M!Nmr=N{q_phse_N$LuZpP*E<(`i)-1jF}fWK*e{?rR$93K;Jhv#lyzx-K9c;d%v
zLgCIkLjpsS&)!Ir>h9ahTIUow<+#)tcR#?oIi-bM~xv
z0@dp;RxO%#OH1>ghS}HTy+2QvrbNw9?RVaOJto8c+Sjz}-<~E%WaWDvys=i|bo?HR
ziTAcV*k8T$dc|e2-Me_ZeW%S3yTR4?cJ=eRo
BwF`X~K;T8Xl
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