![]() * Add support for space-efficient vector and arrow contracts. When an eleventh contract would be applied to a function or vector, switch representation for the wrapper and try eliding redundant checks. The resulting value keeps a constant number of chaperone/impersonator wrappers regardless of the number of contracts applied to it, and won't run any (provably) redundant checks. This avoids a pathological case where, e.g., a function crosses a boundary inside a loop, and gets wrapped N times (or worse, 2^N). The optimization for function contracts currently only applies for fixed-arity functions and contracts, and only for functions with known result-arity of 1. These limitations are not fundamental. Checking specific checks is not as optimized as for regular arrow contracts yet. (Specifically: arity-specific wrappers and tail-marks-match support is missing.) Again, not a fundamental limitation. Further described in the OOPSLA 2018 Paper: "Collapsible Contracts: Fixing a Pathology of Gradual Typing" In collaboration with Ben Greenman, Christophe Scholliers, Robby Findler, and Vincent St-Amour. |
||
---|---|---|
.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.