![]() This change avoids the stair-step effect that is depicted in the "current Racket -M" build plot from the January 2019 blog post about Racket on Chez Scheme. The stair step in that plot is a result of a combination of effects, but one key part is that the `.set-transformer!` linklet import (to support macro definitions) has a reference back to the namespace. While `.set-transformer!` normally would not be captured in any closure, `db/private/generic/prepared` creates a thread that causes the "prefix" part of a closure to be moved to a thread's runstack before it can be pruned by the GC. The stair-step problem happens only when running directly from machine-independent form, because that form is recompiled in a way that doesn't optimize away the unused `.set-transformer!` import. The change in this commit avoids a reference to the namespace in some cases where it will not be useful, which turns out to be sufficient to address the build problem. A more complete repair would be to change the compiler to pair a closure prefix on the runstack with a liveness mask. An even more complete repair is to switch to Racket CS. Racket CS is immune to the problem, even when running from machine-independent bytecode, because its closures do not keep extra references (with the tradeoff that there's less sharing). |
||
---|---|---|
.github/ISSUE_TEMPLATE_DRAFT | ||
pkgs | ||
racket | ||
.gitattributes | ||
.gitignore | ||
.gitlab-ci.yml | ||
.mailmap | ||
.travis.yml | ||
appveyor.yml | ||
azure-pipelines.yml | ||
INSTALL.txt | ||
Makefile | ||
README.md |
This is the source code for the core of Racket. See "INSTALL.txt" for full information on building Racket.
To build the full Racket distribution from this repository, run make
in the top-level directory. To build minimal Racket, run make base
.
The rest of the Racket distribution source code is in other repositories, mostly under the Racket GitHub organization.
Contribute to Racket by submitting a pull request, joining the development mailing list, or visiting the IRC channel.
License
Racket is distributed under the GNU Lesser General Public License (LGPL). This implies that you may link Racket into proprietary applications, provided you follow the rules stated in the LGPL. You can also modify Racket; if you distribute a modified version, you must distribute it under the terms of the LGPL, which in particular states that you must release the source code for the modified software.
See racket/src/COPYING_LESSER.txt for more information.