![]() Non-atomic mode is questionable at best with BC, and more so with CS. With BC, a thread swap at least copies the fragment of the C stack that is between a foreign call and a callback; that can work with some C libraries, but it goes wrong often enough that it really shouldn't be relied on. On the plus side, if it's going to go wrong, at least it tends to go wrong right away (i.e., something in the C frame tends to get broken in normal runs). With CS, the C stack is not captured as part of a thread, and so non-atomic mode 's even more broken. Non-atomic mode could work if you know that no other thread is running that can involve foreign calls and callbacks, but that assumption is usually not a good one. Worse, when things finally go wrong, it's likely several scheduling steps and thread interleavings away from the problem (e.g., #3459). There's a chance that this change will stop some existing programs from working ok on CS. It's more likely to make existing programs work as intended on CS; the common case is that atomic mode is technically needed even though non-atomic mode happened to work in practice with BC. |
||
---|---|---|
.github | ||
pkgs | ||
racket | ||
.gitattributes | ||
.gitignore | ||
.lgtm.yml | ||
.mailmap | ||
.makefile | ||
build.md | ||
LICENSE | ||
Makefile | ||
README.md |
Racket is a general-purpose programming language and an ecosystem for language-oriented programming.
This repository holds the source code for the core of Racket plus some related packages. The rest of the Racket distribution source code is in other repositories, mostly under the Racket GitHub organization.
Quick Start
Pre-built versions of Racket for a variety of operating systems and architectures, as well as convenient source distributions are available at
https://download.racket-lang.org
Racket comes with extensive documentation, including several tutorials. You can read all of this documentation, as well as documentation for third-party packages at
Building from Source
For information on building Racket from this repository, see the Build Guide.
Contributing
Contribute to Racket by submitting a pull request, joining the development mailing list, or visiting the IRC or Slack channels.
By making a contribution, you are agreeing that your contribution is licensed under the LGPLv3, Apache 2.0, and MIT licenses. Those licenses are available in this repository in the files racket/src/LICENSE-LGPL.txt, racket/src/LICENSE-APACHE.txt, and racket/src/LICENSE-MIT.txt.
See the Racket Build Guide for more guidance on contributing.
The Friendly Environment Policy contains guidelines on expected behavior within the Racket community.
License
Racket is free software; see LICENSE for more details.