The Racket repository
![]() closes PR 14559 This slows down tight recursive contract loops by about 10%, using the code below as the micro-benchmark: (require racket/contract/base) (define c (recursive-contract (or/c #f (cons/c c c)) #:flat)) (define n1 (let loop ([i 500000]) (cond [(zero? i) #f] [else (cons (loop (- i 1)) #f)]))) (define n2 (let loop ([i 500000]) (cond [(zero? i) n1] [else (cons (loop (- i 1)) #f)]))) (collect-garbage) (collect-garbage) (collect-garbage) (void (time (contract c n1 'pos 'neg)) (time (contract c n2 'pos 'neg))) (cdr n1) (cdr n2) |
||
---|---|---|
native-pkgs@8988164a6e | ||
pkgs | ||
racket | ||
.gitattributes | ||
.gitignore | ||
.gitmodules | ||
.mailmap | ||
.travis.yml | ||
INSTALL.txt | ||
Makefile | ||
README.txt |
This is the source code for the main Racket distribution. See "INSTALL.txt" for information on building Racket. License ------- Racket Copyright (c) 2010-2014 PLT Design Inc. Racket is distributed under the GNU Lesser General Public License (LGPL). This means that you can 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 means that you must release the source code for the modified software. See racket/src/COPYING_LESSER.txt for more information.