.. _release-notes: Release notes ============= .. _release-notes-1.113: Release 1.113.0 --------------- New features ............ #. In previous releases there was an implicit connection between blocks allocated by :ref:`pool-awl` and :ref:`pool-lo` pools, and blocks allocated by other automatically managed pool classes. In particular, blocks allocated by AWL and LO pools were garbage collected together with blocks allocated by :ref:`pool-ams` pools, and blocks allocated by :ref:`pool-amc` pools in generation 1 of their chains. This is no longer the case: to arrange for blocks to be collected together you need to ensure that they are allocated in the *same* generation chain, using the :c:macro:`MPS_KEY_CHAIN` and :c:macro:`MPS_KEY_GEN` keyword arguments to :c:func:`mps_pool_create_k`. So if you have code like this:: res = mps_pool_create(&my_amc, arena, mps_class_amc(), my_chain); res = mps_pool_create(&my_awl, arena, mps_class_awl()); and you want to retain the connection between these pools, then you must ensure that they use the same generation chain:: MPS_ARGS_BEGIN(args) { MPS_ARGS_ADD(args, MPS_KEY_CHAIN, my_chain); res = mps_pool_create_k(&my_amc, arena, mps_class_amc(), args); } MPS_ARGS_END(args); MPS_ARGS_BEGIN(args) { MPS_ARGS_ADD(args, MPS_KEY_CHAIN, my_chain); MPS_ARGS_ADD(args, MPS_KEY_GEN, 1); res = mps_pool_create_k(&my_awl, arena, mps_class_awl(), args); } MPS_ARGS_END(args); Interface changes ................. #. When creating a list of keyword arguments, there is no longer any need to call :c:func:`MPS_ARGS_DONE`. See :ref:`topic-keyword`. #. When creating an automatically managed pool using :c:func:`mps_pool_create_k`, it is no longer necessary to pass in a generation chain. The arena has a default generation chain and this is used by all automatically managed pools where no generation chain was specified. #. It is now possible to specify a generation chain for :ref:`pool-awl` and :ref:`pool-lo` pool classes, by using the optional :c:macro:`MPS_KEY_CHAIN` keyword argument to :c:func:`mps_pool_create_k`. #. It is now possible to specify which generation the :ref:`pool-ams`, :ref:`pool-awl`, and :ref:`pool-lo` pool classes allocate new objects into, using the optional :c:macro:`MPS_KEY_GEN` keyword argument to :c:func:`mps_pool_create_k`. Other changes ............. #. The MPS now retains some unused memory instead of returning it to the operating system. This reduces unnecessary overhead due to system calls, thrashing the operating system's page table, and zeroing memory when re-allocated. See job003700_. .. _job003700: https://www.ravenbrook.com/project/mps/issue/job003700/ .. _release-notes-1.112: Release 1.112.0 --------------- New features ............ #. New supported platform ``lii6ll`` (Linux, x86-64, Clang/LLVM). #. On Windows, you can now request that the MPS allocate address space from the top down, allowing a 32-bit executable linked with ``/LARGEADDRESSAWARE`` to use the top half of the address space. Use the keyword argument :c:macro:`MPS_KEY_VMW3_TOP_DOWN` when creating an arena of class :c:func:`mps_arena_class_vm`. #. On OS X, multi-threaded programs are now supported. See :ref:`topic-thread`. #. On OS X, you can now debug the MPS using ``lldb``. Interface changes ................. #. In the :term:`hot` (production) variety, the default assertion handler now prints messages to standard error but does *not* terminate the program. Even though assertions indicate serious problems in the program, an end-user does not always want an application to terminate when there is a chance to shut down safely and save work, or even to limp along indefinitely. See :ref:`topic-error-assertion-handling`. #. The behaviour when an assertion is triggered is now configurable in the standard ANSI :term:`plinth` by installing an assertion handler. See :c:func:`mps_lib_assert_fail_install`. #. Functions that take a variable number of arguments (:c:func:`mps_arena_create`, :c:func:`mps_pool_create`, :c:func:`mps_ap_create`, :c:func:`mps_fmt_create_A`) and their ``va_list`` alternatives (:c:func:`mps_arena_create_v` etc.) are now deprecated in favour of functions that use a :term:`keyword argument` interface (:c:func:`mps_arena_create_k`, :c:func:`mps_pool_create_k`, :c:func:`mps_ap_create_k`, :c:func:`mps_fmt_create_k`). The new interface provides better reporting of errors, provides default values for arguments, and provides forward compatibility. See :ref:`topic-keyword`. The old interface continues to be supported, but new features will become available through the keyword interface only. #. :ref:`pool-mfs` pools no longer refuse to manage blocks that are smaller than the platform alignment. They now round up smaller sizes internally if necessary. #. :ref:`pool-mvt` pools now allow the client to specify the alignment of blocks. Use the keyword argument :c:macro:`MPS_KEY_ALIGN` when creating a pool of class :c:func:`mps_class_mvt`. #. On OS X, signals are no longer used for handling memory protection exceptions. This means that programs are free to handle ``SIGBUS``, but must not install a thread-local Mach exception handler for ``EXC_BAD_ACCESS`` exceptions. See :ref:`topic-thread-signal`. #. On OS X, when debugging with ``gdb``, you no longer need to turn on ``dont-handle-bad-access`` or to request special handling of ``SIGBUS``. Other changes ............. #. On Windows, an execute exception no longer triggers an assertion. See job003301_. .. _job003301: https://www.ravenbrook.com/project/mps/issue/job003301/ #. Rehashing of large address-based hash tables no longer provokes a nursery collection that immediately renders the hash table stale again. See job003435_. .. _job003435: https://www.ravenbrook.com/project/mps/issue/job003435/ #. :ref:`pool-mvt` no longer triggers an assertion failure when it runs out of space on its reserved block queue. See job003486_. .. _job003486: https://www.ravenbrook.com/project/mps/issue/job003486/ #. The ``-i`` and ``-o`` options no longer cause :program:`mpseventsql` to crash. See job003507_. .. _job003507: https://www.ravenbrook.com/project/mps/issue/job003507/ #. On Windows, telemetry files now have correct clock values. Previously the top 32 bits were incorrectly output as zero. See job003519_. .. _job003519: https://www.ravenbrook.com/project/mps/issue/job003519/ #. On 64-bit Windows, it's no longer possible to get a stack overflow exception while the MPS is holding the arena lock. See job003640_. .. _job003640: https://www.ravenbrook.com/project/mps/issue/job003640/