![]() When an ephemeron is accessed through a weak mapping from the same key that is used in the ephemeron, and when the key is not otherwise reachable, there can be a race between extracting the value from the ephemeron and performing a GC that reclaims the key. Avoid that race by supplying the key back to `ephemeron-value`, which ensures that the key remains reachable until the value is extracted. In many cases, supplying the key as the second argument would also work --- since that argument is used as a replacement value when the key is inaccessible, but the key can't become inaccessible if it's pending as a replacement value. A separarate optional argument to `ephemeron-value` seems clearer and more general, though. |
||
---|---|---|
.github/ISSUE_TEMPLATE_DRAFT | ||
pkgs | ||
racket | ||
.gitattributes | ||
.gitignore | ||
.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.