![]() This commit improves the performance of or/c contracts with symbols (or other things that the contract system compares with eq?). For example, on the program below we halve the distance to just writing the contract directly as a predicate. ``` #lang racket/base (require racket/contract/base) (define c1 (or/c 'x 'y (integer-in 1 24))) (define (c2 x) (or (eq? x 'x) (eq? x 'y) (and (exact-integer? x) (<= 1 x 24)))) (define f1 (contract (-> c1 any) (λ (x) x) 'pos 'neg)) (define f2 (contract (-> c2 any) (λ (x) x) 'pos 'neg)) (define (try f) (time (for ([x (in-range 1000000)]) (f 'x) (f 'y) (f 10) (f 'x) (f 'y) (f 10) (f 'x) (f 'y) (f 10) (f 'x) (f 'y) (f 10) (f 'x) (f 'y) (f 10) (f 'x) (f 'y) (f 10) (f 'x) (f 'y) (f 10) (f 'x) (f 'y) (f 10) (f 'x) (f 'y) (f 10) (f 'x) (f 'y) (f 10)))) (try f1) (try f2) ``` with this commit: cpu time: 849 real time: 850 gc time: 39 cpu time: 615 real time: 616 gc time: 2 without this commit: cpu time: 1020 real time: 1021 gc time: 37 cpu time: 616 real time: 617 gc time: 2 |
||
---|---|---|
.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.