![]() It most cases, it's more important for `compiler/cm` to reliably replace a file that might be busy than to make the file update atomic. To suport that kind of use, `call-with-atomic-output-file` implemented a fairly reliable, multi-step, non-atomic process for replacing a file on Windows. For recompilation of bytecode in machine-independent form, however, `compiler/cm` now really wants to atomically write a replacement bytecode file. That's not generally possible on Windows (except on NTFS with transactions, which are discouraged...), but MoveFileEx work atomically in some cases and it's likely to work for the cases needed by `compiler/cm`. Probably. So, add a mode to `call-with-atomic-output-file` to get "more atomic" updates on Windows. This mode is enabled by a callback that makes the caller responsible for deciding what to do with the move fails, such as waiting a while and trying again. And `compiler/cm` now waits a while and tries again, up to a limit, which should be good enough for recompilation. |
||
---|---|---|
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.