Commit Graph

5118 Commits

Author SHA1 Message Date
Matthew Flatt
848d2148b0 cs: cooperate with improved cross-library inlining
An improvement to Chez Scheme allows more function from the Rumble and
other built-in layers to be inlined into compiled Racket code, and a
new `$app/no-inline` primitive enables improved control over how slow
paths are integrated.
2020-01-19 09:43:44 -07:00
Matthew Flatt
712494312a improve consistency of printers and prop:custom-write
The pretty printer and built-in printer for traditional Racket did not
consistently provide the current quoting mode while checking for
unquoting and cycles. All printers, including the Racket CS printer,
are improved for a structure type that has
`prop:custom-print-quotable` as 'always, in which case we know that
unquoting- and cycle-checking time that the components will be in
quoted mode.

The pretty printer also made three passes through a value to check for
cycles, compute cycles, and compute unquotes, and those are now fused
into a single pass like the Racket CS printer. The built-in printer
for traditional Racket still makes up to two passes, but it now
behaves more like other printers by recurring immediately on nested
calls via `prop:custom-write` instead of accumulating them for after
the `prop:custom-write` callback returns.

The documentation clarifies that synthesizing new values during
printing can interefere with cycle checking and unquoting, but the
printers now react to that behavior more consistently.
2020-01-15 07:21:19 -07:00
Brian Wignall
738d2b7a81 Fix typos (#3005) 2020-01-14 11:49:23 +01:00
Matthew Flatt
15d107d373 cs: repairs for equal?/recur, especially on hash tables 2020-01-12 09:37:01 -07:00
Matthew Flatt
96ac646284 sync with Chez Scheme report for popcount on Windows 2020-01-11 16:43:45 -07:00
Matthew Flatt
33f8173970 cs: switch to stencil-vector HAMT
With recent improvements, the run-time performance of vector-stencil
HAMTs for immutable hash tables seems close enough (on
microbenchmarks) to the Patricia-trie implementation to be worthwhile,
since they use less memory. Performance remains better in most cases
than the traditional Racket implementation.

The table at the end of this message summarizes relative performance
on microbenchmarks. Overall, though, immutable hash-table operations
are already so fast that these difference very rarely translate to
measurable differences in overall run times --- not even for the macro
expander, which relies heavily on immutable hash tables to represent
scope sets.

Stencil-vector HAMTs tend to take about 1/3 the space of Patricia
tries, and those space savings can turn into run-time improvements in
applications by reducing GC time. I've observed a 10% reduction in
compile time for some programs. When building a full Racket
distribution, run time shrinks by about 2 minutes out of 80 minutes,
probbaly because just average memory use goes down by 10%. DrRacket's
initial memory footprint goes down by about 37M out of 657M (a 5%
savings).

Mincrobenchmark relative performance, normalized to previous Racket CS
implementation (measured on 2018 MacBook Pro, 2.7 GHz Core i7; Chez
Scheme can substitute POPCNT instructions at link time):

 patricia = previous Racket CS implementation as a Patricia Trie
 stencil = new Racket CS implementation as a stencil-vector HAMT
 racket = traditional Racket implementation

                           patricia  stencil  racket
       set-in-empty:eq#t:  ==|       ==|      ==|=
           set-many:eq#t:  ==|       ==|==    ==|========
  set-many-in-order:eq#t:  ==|       ==|      ==|====
           set-same:eq#t:  ==|       ==       ==|=
         set-in-empty:eq:  ==|       ==       ==|=
             set-many:eq:  ==|       ==|==    ==|========
    set-many-in-order:eq:  ==|       ==|=     ==|=====
             set-same:eq:  ==|       ==       ==|=
        set-in-empty:eqv:  ==|       ==|      ==|==
            set-many:eqv:  ==|       ==|==    ==|=========
   set-many-in-order:eqv:  ==|       ==|=     ==|=====
            set-same:eqv:  ==|       ==|      ==|=
      set-in-empty:equal:  ==|       ==|==    ==|===
          set-many:equal:  ==|       ==|==    ==|=====
 set-many-in-order:equal:  ==|       ==|=     ==|===
          set-same:equal:  ==|       ==|=     ==|===
                ref:eq#t:  ==|       ==|      ==|=
           ref-fail:eq#t:  ==|       ==|      ==
                  ref:eq:  ==|       ==|      ==|=
             ref-fail:eq:  ==|       ==|      ==
                 ref:eqv:  ==|       ==|      ==|====
            ref-fail:eqv:  ==|       ==|      ==|
               ref:equal:  ==|       ==|      ==|===
         ref-large:equal:  ==|       ==|      ==
          ref-fail:equal:  ==|       ==|      ==|===
    ref-large-fail:equal:  ==|       ==|      ==
            removes:eq#t:  ==|       ==|===   ==|===========
         add+remove:eq#t:  ==|       ==|=     ==|=======
              removes:eq:  ==|       ==|====  ==|============
           add+remove:eq:  ==|       ==|=     ==|=======
             removes:eqv:  ==|       ==|===   ==|=============
          add+remove:eqv:  ==|       ==|      ==|========
           removes:equal:  ==|       ==|==    ==|=======
        add+remove:equal:  ==|       ==|=     ==|======
         iterate-keys:eq:  ==|       ==|      ==|=
       iterate-vals:eq#t:  ==|       ==|=     ==|=
         iterate-vals:eq:  ==|       ==|=     ==|=
  iterate-unsafe-keys:eq:  ==|       ==|      ==|=======
iterate-unsafe-vals:eq#t:  ==|       ==|      ==|
  iterate-unsafe-vals:eq:  ==|       ==|=     ==|
             for-each:eq:  ==|       ==|      ==|==========
    subset-lil-shared:eq:  ==|       ==|      ==|=
  subset-lil-unshared:eq:  ==|       ==|      ==|==
       subset-lil-not:eq:  ==|       ==       ==
subset-med+lil-shared:eq:  ==|       ==|====  ==|=
subset-med+med-shared:eq:  ==|       ==|=     ==|=
      subset-big-same:eq:  ==|       ==|      ==|===============
subset-big+lil-shared:eq:  ==|       ==|===   ==|====
subset-big+med-shared:eq:  ==|       ==|==    ==|===
  subset-big-unshared:eq:  ==|       ==|      ==|==
2020-01-11 13:42:33 -07:00
Matthew Flatt
e71963c48b openssl: condition versionless based on current, not cross target 2020-01-10 14:16:30 -07:00
Matthew Flatt
76726ee928 cs: improve stencil-vector HMAT hash-keys-subset? performance
Also, improve some hash benchmarks.
2020-01-10 10:46:55 -07:00
Matthew Flatt
d5930a18c6 configure: fix --disable-mac64 mode as cross-compile mode 2020-01-09 07:24:27 -07:00
Matthew Flatt
8c5d580d5a cs: fix cross-compile build steps 2020-01-08 06:41:23 -07:00
John Clements
4bdad475e1 Post-release version for the v7.6 release 2020-01-07 13:02:31 -08:00
Matthew Flatt
a60f173b46 hash benchmarks and stencil-vector HAMT experiment
This commit adds an (unused) implementation of immutable hash tables
for Racket CS that trades some run-time performance for an especially
compact representation --- similar to the traditional Racket
implementation of immutable hash tables. It uses a new "stencil
vector" datatype at the Chez Scheme level, which overlays the bitmap
needed for a HAMT node with the Chez-object type tag (and also
provides an update operation that avoids unnecessary memory work).

Compared to the current Racket CS implementation, the stencil-vector
HAMT implementation of an immutable hash table takes only about 1/3
the space on avergae, which translates to a overall 5% savings in
DrRacket's initial heap. It also makes a full Racket build slightly
faster by reducing avergage memory use by 5-10%.

But the run-time performance difference is significant, especially for
the `hash-keys-subset?` operation (at least in microbenchmarks), and
also for addition and iteration. Maybe there's an overall better point
that reduces memory use of the current Patricia trie implementation
without sacrificing as much performance.

Besides the benchmarks and stencil-vector HAMT implementaiton, there
are small changes to the way hash tables cooperate with `equal?`,
which makes it a little easier to plug in different implementations.
2020-01-06 07:07:48 -07:00
Matthew Flatt
f0a63b5921 rktio: repair for building without ptherad support 2020-01-06 04:09:26 -07:00
Tommy McHugh
fc258725ba added struct/derived, tests, and doc updates 2020-01-04 09:24:10 -05:00
Matthew Flatt
8ae53d9e8b fix _bytes/nul-terminated for NULL results
Closes #2995
2020-01-02 08:46:34 -07:00
Matthew Flatt
e97639e525 cs: faster string-copy!
Similar to e087059f21.
2020-01-01 15:00:23 -07:00
Matthew Flatt
e88c2b18e6 fix license blurb in "racket/src/README.txt" 2020-01-01 12:22:34 -07:00
Matthew Flatt
ba83d95339 cs configure: avoid --enable-shared problems
Building with shared libraries is not currently supported, because the
Chez Scheme build is not set up to work in that mode, and because
"stand alone" executable handling at the Racket level does not support
Racket CS shared libraries.

Also, there's no benefit to shared libraries. Racket executables get
the benefit of sharing because they all run through the same
executable. Meanwhile, there's not (yet?) a supported C API to make
something like "libracketcs.so" useful.

Related to #2993
2019-12-31 08:03:01 -07:00
Tommy McHugh
0d1a85237e Implemented struct/contract and testing for struct/contract 2019-12-30 19:01:26 -06:00
Matthew Flatt
af3c22dd11 cs: mark some internal representations as sealed
This change makes a small but measurable difference for mpairs, at
least (about 5% on the mpair-intensive "lists.rkt" benchmark).
2019-12-30 08:15:23 -07:00
Matthew Flatt
ce4ad668b6 cs & thread: move retry callback to cancel result
Adjust part of the internal scheduling protocol to make a retry
callback generated by another callback that sets up the retry. This
helps clarify the protocol and avoids allocating a closure that is
rarely used.
2019-12-29 18:56:42 -07:00
Matthew Flatt
755e914c7c cs & thread: allow evt-chaperone to hide other membership
Make Racket CS consistent with traditional Racket in the way
`chaperone-evt` on a thread hides threadness, etc.

Hiding properties like threadness is not ideal and does not seem
entirely consistent with `chaperone-of`, but allowing things like
threads and semaphores to be chaperoned creates non-trivial expense
internally. It would have been better to have event constructors for
threads and such to (and then the consyructed events could be
chaperoned without imposing a cost on the original data structure).
2019-12-29 19:19:09 -06:00
Matthew Flatt
b8a4e0535f thread: small simplification in scheduler 2019-12-29 11:35:06 -06:00
Matthew Flatt
c8f44d6597 cs & thread: remove redundant internal atomically 2019-12-29 07:08:15 -06:00
Matthew Flatt
e087059f21 add unsafe-bytes-copy!
Also, improve checking and performance of safe `bytes-copy!` in Racket
CS.
2019-12-28 10:55:57 -06:00
Matthew Flatt
085dd494d7 cs: speed up hash-map and hash-for-each on mutable hash tables
Specialize internal iteration to avoid the overhead of going though
the `hash-iterate-...` interface for each step.
2019-12-28 09:17:41 -06:00
Matthew Flatt
8b3fd15803 cs: simplify mutable hash table iteration
Remove some complexity that originally handled `eq?` unreliability on
flonums, which is no longer needed.
2019-12-28 09:00:20 -06:00
Matthew Flatt
2fcdd7c292 cs: improve equal?-based immutable hash
Check leaf hash code before a more general (and potentially much
slower) equality check.
2019-12-28 08:05:22 -06:00
Matthew Flatt
330ae24ce1 cs: tweak immutable hash-ref implementation
Force inlining of value and key accessors. Keeping the `define` with a
loop body --- that is, not making the individual function a macro ---
allows the Rumble `define` to avoid a closure allocation for the loop.
2019-12-28 06:23:25 -06:00
Matthew Flatt
c6e9d6cfd4 cs: unbreak racket with no command-line arguments 2019-12-26 07:04:35 -06:00
Matthew Flatt
e6e28fa8b7 cs: further corrections to racket command-line argument handling 2019-12-26 07:02:32 -06:00
Shu-Hung You
ccbd93e49c Stop -v from changing init-lib config 2019-12-26 07:02:24 -06:00
Matthew Flatt
15d7c439df fix name on port sent through place channel 2019-12-26 05:04:08 -06:00
Matthew Flatt
90abbb912d cs: guard internal hash traversals against GCed keys
Hash iteration can fail if a GC collects a key in between
`hash-iterate-next` and `hash-iterate-key` (and similar). Use the
optional extra argument internally to detect and handle that case.
2019-12-26 05:04:08 -06:00
shhyou
9db9991df6 Fix racket help string typo 2019-12-24 21:14:35 -06:00
Matthew Flatt
3710f45eba racket/dict: reduce assoc? tests
THe internal `assoc?` predicate is relatively expensive, so remove
redundant uses. Also, uses a cache to make it a little cheaper for
muliple uses of dictionary functions on a moderately sized list.
2019-12-24 07:18:03 -06:00
Matthew Flatt
4d001eb259 cs: further tune list?
Experiments suggest that 64 pairs is a better threshold to start
caching than 32 pairs.
2019-12-23 12:20:43 -06:00
Matthew Flatt
723232081c cs: faster list? 2019-12-23 05:36:08 -07:00
Paulo Matos
11e7598021
Pass ubsan flags to rktio build (#2987)
We have also removed ubsan flags from CPPFLAGS - since these are
compile flags, not preprocessing flags.

To pass the flags to rktio, we split the use of CFLAGS and CPPFLAGS
in rktio and ensure that flags in rktio do not update flags if make
is called in sub-make form (in a standard racket build, the rktio make
is called as a sub-make from the main racket make).

Fixes #2984

* Avoid export on variables in Makefiles

Instead pass the variables explicitly to the make call.

* Fix variable syntax

* Double quote variables

* Put ubsan back in CPPFLAGS

* Remove conditional assignment

This is not necessary if passing variables straight into sub-make
2019-12-23 09:18:34 +01:00
Matthew Flatt
f95abbbf85 cs: remove "GRacket3m.exe" from Racket CS build
When "GRacket3m.exe" is present, then "DrRacket3m.exe", etc.,
created created.
2019-12-22 11:07:17 -07:00
Matthew Flatt
f95beb40ad cs: check for too-large file-position argument 2019-12-22 10:07:30 -07:00
Matthew Flatt
41cc442779 fix extraction of numbers into a 64-bit value on 32-bit platforms 2019-12-22 09:50:08 -07:00
Matthew Flatt
71fb5e0f6a schemify: expose more functions to lifting
This improvement affects the interpreter's implementation, for
example.
2019-12-22 08:35:54 -07:00
Matthew Flatt
73ed7141aa cs: fix local struct for interpreter mode
Keep in `make-struct-type` form for performance and to get names right.
2019-12-22 08:35:54 -07:00
Matthew Flatt
8a4f21c7c8 cs: avoid unnecessary procedure unnaming in core 2019-12-22 08:35:54 -07:00
Matthew Flatt
c8c3647da5 cs: interpret short-lived compile-time code
Instead of compiling the right-hand side of a `let-syntax`, interpret
using the schemify layer's safe-for-space interpreter. Similarly,
interpret the right-hand side of `define-syntax` when it is evaluated
during the enclosing module's expansion (compiling it for use when the
enclosing module is instantiated for expanding other modules).

This is an old idea, and it's effective in some cases: `racketcs -cl
racket/base` or `racketcs -cl racket` takes 20% less time with this
change. Various obstacles kept us from trying this earlier; most
significantly, the gap to finish the safe-for-space interpreter was
small enough to make it work. It's not clear that the result is an
improvement for `raco setup`, though.

The interpreter is not fast (it's about 1/4 the speed of the
traditional Racket interpreter), so there's room for improvement,
but even a slow interpreter pays off for building.
2019-12-22 08:34:41 -07:00
Matthew Flatt
53d7387f6c fix compilation manager for machine-independent conversion
When recompiling modules from machine-independent mode to
machine-specific mode, dependencies of the module to be recompiled
must be checked explicitly, but using `module-path-index-resolve` is
not a good strategy, because it doesn't load transitive dependencies.
That can create a failure later when a transitive dependency is needed
for compilation and it isn't loaded because the dependent module was
already loaded.

Relevant to #2928
2019-12-19 17:35:22 -07:00
Matthew Flatt
6a023cddfa improve internal organization of the compilation manager 2019-12-19 12:55:56 -07:00
Matthew Flatt
02b534d571 update source "foreign.rktc"
Copies change in 91fa5b6490 to original source.
2019-12-19 08:29:52 -07:00
Paulo Matos
91fa5b6490
Drop use of deprecated ffi_prep_closure (#2988)
Use ffi_prep_closure_loc instead.

Fixes #2985
2019-12-19 16:09:37 +01:00
Matthew Flatt
31636870a9 place channels: clean up allocation arena after failed message 2019-12-19 06:31:42 -07:00
Brian Wignall
ffa6d2ef74 Fix typos, via a Levenshtein-style corrector (#2982) 2019-12-19 08:28:13 +01:00
Matthew Flatt
a135a868a8 cs: fix check for escaping procedure name 2019-12-18 06:42:33 -07:00
Matthew Flatt
bf1eb4351b cs: avoid procedure names generated by schemify
Also, escape names that may look like internal encodings.
2019-12-17 20:28:39 -07:00
Matthew Flatt
27eb177b9d add {symbol,keyword}->immutable-string and string-append-immutable
There could be many more functions that produce immutable strings
directly, and we want the default functions to do that in some future
language. For now, these three rae the most immediately useful for
avoiding unnecessary allocation in Racket CS.
2019-12-17 19:41:41 -07:00
Matthew Flatt
2270513c27 cs: fix procedure-extract-target for applicable struct result 2019-12-17 17:13:07 -07:00
Matthew Flatt
63bc848f79 expander: another approach to fixing nested instantiation
Mostly reverts ee4ceb7ae4 and tries a different approach. The prevoius
approach did not handle the case where the module begin instantiated
was tiggered by a module at a different (higher) phase.

Closes #2981
2019-12-17 14:02:45 -07:00
Sam Tobin-Hochstadt
6b1dad21eb Trim requires.
Eliminates another ~300 instantiations from `racket -cl racket/base`.

small-scheme.rkt is no longer used in `racket/private`.

c.rkt was an accidentally-committe file.
2019-12-17 13:02:47 -05:00
Matthew Flatt
81d73d9849 adjust raco pkg tests to work with Racket CS overlay
Commands that use `raco` need to be `racocs`, etc.
2019-12-17 08:38:04 -07:00
Matthew Flatt
d7f2bd3e15 cs: eval multiple expressions provided with -e 2019-12-17 07:30:47 -07:00
Matthew Flatt
899aa24756 cs: avoid problem waking up on TCP connect completion
Maybe there's a problem in `rktio_poll_add_connect` that I just can't
see, or maybe it's a Mac OS bug, but `rktio_poll_add_connect` doesn't
seem to reliably wake up the process when the TCP connection becomes
ready. Traditional Racket happens to avoid the problem by registering
the connection file descriptor with the semaphore table; doing that
for Racket CS also avoids the problem there.
2019-12-17 07:08:57 -07:00
Matthew Flatt
61000a454e cs: cooperate with immutable strings for symbols in Chez Scheme
Take advantage of new guarantees/support for immutable strings within
a Chez Scheme symbol representation. Consistent use of immutable
strings at the boundary avoids potential non-determinism.
2019-12-16 18:14:16 -07:00
Matthew Flatt
c7388f9fa8 places: repair clean-up after serialize failure 2019-12-16 12:33:14 -07:00
Sam Tobin-Hochstadt
f7c39512ab Modules with tests for unsafe mode can be cross-phase persistent.
Also, mark several more modules as cross-phase persistent.
2019-12-16 13:58:35 -05:00
Matthew Flatt
2d695be78c racket/promise: repairs for custodian change
Closes #2973

Note that the test is in the "lazy" package, commit 2cc3a24343.
2019-12-16 08:58:08 -07:00
Matthew Flatt
15c0e34bed cs: fix default constructor name and initial accessor/mutator name 2019-12-16 08:39:56 -07:00
Ryan Culpepper
6380df8aca
update expander logging (#2968)
This simplifies the expander logging in some places and adds logging for arming/disarming and scope changes (eg syntax-local-introduce) so the macro stepper can better track term identity.

This relies on corresponding changes to the racket/macro-debugger repo.
2019-12-14 01:27:24 +01:00
Brian Wignall
bcd8de5c9a Fix typos 2019-12-13 06:31:50 -07:00
Matthew Flatt
bf41fee58d fix argument check for instantiate-linklet
Closes #2962
2019-12-12 12:08:08 -07:00
Sam Tobin-Hochstadt
ce3992dbf3 Revert "Fix gen:dict methods for alists with duplicate keys (#2846)"
This breaks existing packages; see https://github.com/greghendershott/aws/issues/64
for an example.

Unfortunately, we probably have to live with this limitation of the
interface because of existing code.

This reverts commit 966399dec6.
2019-12-11 15:59:07 -07:00
Matthew Flatt
a191f77c15 rktio: fix Android workaround
When dynamic-library support moved to rktio, only one of two references
to (an arbitrary exported) function was updated.

Closes #2947
2019-12-11 15:21:17 -07:00
Matthew Flatt
843824c94e build with musl
Skip libunwind support for musl-based Linux environments, and avoid
`__FLOAT_BITS`, etc., in xform.
2019-12-11 14:32:56 -07:00
Fred Fu
4405ed669f add struct-type-property-predicate-procedure? 2019-12-10 10:01:11 -07:00
Paulo Matos
529c0e93a8
Correct which racket is built for CS bootstrap (#2952) 2019-12-10 09:17:43 +01:00
Matthew Flatt
a319b7e073 cs: wake up main thread blocked on fsemaphore
If a future posts to an fsemaphore that the main thread is waiting on
but went to sleep, then be sure to wake up the main thread.

Relevant to #2957
2019-12-09 07:18:16 -07:00
Matthew Flatt
6db1bdda1b cs: fix touch on a future blocked on a fsemaphore
Relevant to #2957
2019-12-09 06:25:39 -07:00
Matthew Flatt
db626bde3d schemify: don't copy uninterned symbols across module boundary
As pointed out by @gus-massa at racket/ChezScheme#15
2019-12-08 06:22:20 -07:00
Matthew Flatt
fc9ccb8e8f cs: unbreak boot file concatenation 2019-12-06 19:04:53 -07:00
Matthew Flatt
16f1ae7895 cs: add "repeats N more times" printing for error traces 2019-12-06 16:29:17 -07:00
Matthew Flatt
2e53a4c4ff schemify: deterministic order for some cross-inline info 2019-12-06 16:20:52 -07:00
Matthew Flatt
baab2b9974 cs: avoid full paths attached to functions
Source locations are attached to functions for backtraces. With
traditional Racket, those source locations are connected to the
machinery of `current-write-relative-directory` and
`current-load-relative-directory` to avoid absolute paths, but that
machinery is difficult to integrate into the Racket CS compilation
model. So, since they're "just" for stack traces, save only a couple
of elements of the path.
2019-12-06 16:20:52 -07:00
Matthew Flatt
a1567eb416 schemify: repair for JIT pass 2019-12-05 17:25:51 -07:00
Matthew Flatt
d7052da691 schemify: more determinism for lifted procedures
A further repair to 6f919635da.
2019-12-05 15:56:32 -07:00
Matthew Flatt
898517107f schemify: purge all gensyms
Although some of them probbably do not matter (while some certainly
do), avoid various possible problems by always using a locally
determinsitic replacement for `gensym`.
2019-12-05 14:41:33 -07:00
Matthew Flatt
d5ab0fce05 schemify: avoid gensym for struct-type representation
A gensym can end up in known-value information, which makes compiled
files non-deterministic.
2019-12-05 09:37:39 -07:00
Matthew Flatt
f5e6ce4282 schemify: name raw accessor/mutators
Inferred names show up as part of the compiled code, so make sure
they're normalized instead of gensyms.
2019-12-05 08:46:15 -07:00
Matthew Flatt
6f919635da schmeify: improve determinism by ordering lifted procedures 2019-12-05 07:06:28 -07:00
Matthew Flatt
1083aa1317 cs: improve function and module name
The former "path.rkt" module handles more than just paths.
2019-12-05 05:50:07 -07:00
Matthew Flatt
c93693169a cs: fix handling of an empty command-line argument 2019-12-05 05:43:31 -07:00
Matthew Flatt
1f92e98590 cs: fixes for uninterned symbols in compiled code
Use newly added support for uninterned symbols (as opposed to gensyms)
in the Chez Scheme layer. Using uninterned symbols reduces
non-determinsitsm in the build.

The change to use Chez Scheme uninterned symbols exposed problems with
the way that Racket-level uninterned symbols (formerly implemented
with gensym) are handled in ".zo" files. The problem is that some
uninterned symbols are marshaled with `racket/fasl`, which is not
consostent with those that are marshaled by Chez Scheme's `fasl`. This
patch fixes those problems by ensuring that uninterned symbols are
always lifted to the level of a Chez Scheme `fasl` for a complete
linklet bundle.
2019-12-04 21:11:42 -07:00
Matthew Flatt
4a36512570 cs: fix $value handling in fallback interpreter
Closes #2951
2019-12-04 07:06:50 -07:00
Matthew Flatt
1c74f8c956 improve names in keyword-function stack traces
Change the way names are generated for pieces of the implementation of
a keyword-argument function. These functions are not accessible as
values, so the names don't matter for printing a function, but the
names can show up in stack traces.
2019-12-02 07:03:09 -05:00
Alexis King
e9fb60588b Fix fcontrol with prompt tag 2019-11-30 05:34:32 -06:00
Matthew Flatt
406fe85144 cs: fix defined-name reporting 2019-11-29 16:48:52 -07:00
Matthew Flatt
ec9c30d2f1 cs: improve error message for define-values
Report the first variable of the `define-values` form, like
traditional Racket does.
2019-11-29 15:09:32 -07:00
Matthew Flatt
fa2ef64adb schemify: adjust simple? for multiple returns
The check for whether an expression is "simple" at the schemify layer
didn't take into account the expected arity.
2019-11-29 15:09:32 -07:00
Matthew Flatt
338955046d configure: repair for --enable-embedfw
`-S` needed for `strip` with some(?) versions of the Mac build tools.
2019-11-28 16:32:22 -07:00
Brian Wignall
9474b1a1e8 Fix spelling typos 2019-11-28 07:51:39 -07:00
Matthew Flatt
a410905c99 cs: module in some error messages only when enabled
Check `(error-print-source-location)` before adding a module name in
an error message about use/set before definition.
2019-11-28 05:51:48 -07:00
Matthew Flatt
8b00249265 schemify: another variable-order repair
Continues 70459f4105.
2019-11-28 05:39:11 -07:00
Matthew Flatt
2f4e4c5e6a configure: add --enable-embedfw for Mac OS
Building with `--enable-embedfw` creates executables that link
statically to the Racket runtime system, instead of linking to a
Racket framework, and that embed boot files in the case of Racket CS.

Executables built this way are meant to cooperate better with code
signing.

Related to #2910
2019-11-27 13:15:19 -07:00
Matthew Flatt
85459e5fef openssl: repairs related to listen on port number 0
Allow 0 as the port number in `ssl-listen`, and fix
`ssl-addresses` to work on a listener. Update a test
to use these features so that it won't conflict with
other tests that listen on TCP addresses.
2019-11-27 13:15:19 -07:00
lkh01
627d164a46 make syntax->string work with pairs and _
fixes #1628 and #1629
2019-11-27 13:57:45 -05:00
Matthew Flatt
ad7511dd29 place: fix place-kill for Racket thread simulation
Where true places are not supported, `place` is simulated
using Racket threads, and `place-kill` did not kill off the
simulated place well enough.

Relevant to #2930
2019-11-27 06:21:56 -07:00
Matthew Flatt
70459f4105 schemify: preserve variable assignment order at module end
A sequence of definitions (or `define-values`) at the end of
a module could get reordered. That only matters for the order
of checks for attempting to assign to a constant, though.
2019-11-26 16:16:34 -07:00
Matthew Flatt
80a29553c9 schmify: remove some unnecessary wrap tests
In many places, we know that we're dealing with plain pairs.
2019-11-26 16:16:34 -07:00
Matthew Flatt
0e87b8a73f cs & io: fix ellipses printing in structs that are partially opaque 2019-11-26 09:17:02 -07:00
Matthew Flatt
98f0c16b8c cs & io: name for default error value conversion handler 2019-11-26 08:55:35 -07:00
Matthew Flatt
e15a6f99d4 cs: more consistent arity errors
Suppress the compiler's conversion of statically obvious arity errors
to an expression that reports a custom error with the an S-expression,
since that interferes with Rumble's normalization of error messages.
2019-11-26 08:44:39 -07:00
Matthew Flatt
79981af50b cs: fix build-time arity check
Bootstrap properly to avoid problems on updates and version changes.
2019-11-26 08:44:39 -07:00
Matthew Flatt
afff5ca7ac cs: adjust default prompt abort handler arity error message 2019-11-26 08:44:39 -07:00
Matthew Flatt
6389b18b01 cs: fix prompt handler for module/eval prompt and multiple values 2019-11-26 08:44:39 -07:00
Matthew Flatt
256f57bfd8 openssl: adjust to make XonX mode work for Catalina
Same repair as #2859, but for XonX mode.
2019-11-26 04:47:01 -07:00
Matthew Flatt
1048341c62 cs & io: fix mode argument when print-as-expression is #f 2019-11-25 20:05:23 -07:00
Matthew Flatt
4c981258f6 cs: improve location info in backtrace
Provide paths instead of strings, and include position and span
information.
2019-11-25 19:00:33 -07:00
Matthew Flatt
254f6a4f14 cs: fix 'nonatomic allocation in 32-bit mode 2019-11-25 16:23:52 -07:00
Matthew Flatt
f3cfac8981 cs: fix popcount in data/bit-vector for 32-bit mode
Related to #2925
2019-11-25 15:06:09 -07:00
Paulo Matos
b1b8beece5
Use AC_CHECK_MEMBERS to check for dirent name length flds (#2923)
If `struct dirent` has `namlen` field, define `HAVE_DIRENT_NAMLEN`.
If the field is instead `namelen`, define `HAVE_DIRENT_NAMELEN` (case of QNX). 

Use this checks in `rktio_fs.c` and simplify `platform.h`.
2019-11-25 16:35:10 +01:00
Matthew Flatt
219bac7fe7 cs configure: propagate preprocessor flags to rktio 2019-11-24 08:10:47 -05:00
Matthew Flatt
cd4ce30ca6 avoid compiler warning 2019-11-24 06:58:02 -05:00
Matthew Flatt
ebbf578b6c cs: fix memset address handling 2019-11-23 20:19:50 -05:00
Matthew Flatt
e0851e6753 cs: range check on seconds->date 2019-11-23 20:19:39 -05:00
Matthew Flatt
c611f126fd JIT: fix 32-bit non-Mac stack alignment
Fix function-call setup to align the stack to a 16-byte boundary on
all platforms.
2019-11-23 17:33:08 -05:00
Matthew Flatt
0bb23c3998 cs: improve checking for "uuid.h" 2019-11-23 17:27:24 -05:00
Paulo Matos
aecee7ff30
Fix typos on windows build README (#2919) 2019-11-23 22:00:21 +01:00
Matthew Flatt
d1bfa6a203 cs: fix error reporting for struct selectors
Fix error reporting for non-inlined struct selectors to use Racket
style instead of Chez Scheme style.

Closes #2926
2019-11-23 15:39:27 -05:00
Matthew Flatt
7eb1ef9250 cs: fix printing on struct type with custom write
Don't try to use a struct type's custom-write procedure on the struct
type itself.

Relevant to #2926
2019-11-23 15:32:10 -05:00
Matthew Flatt
cd048cb1d0 repair arity problems
Fix many incorrect arity declarations and actual arities in Racket CS,
and fix several incorrect arities in traditional Racket. Building
Racket CS now checks the information in "racket/src/cs/primitives"
against both Racket variants to make sure that they're all consistent.

Closes #2924
2019-11-23 15:32:10 -05:00
Matthew Flatt
91190bee63 continuation-prompt-available?: repairs CS and non-CS Racket
Racket CS did not support the optional second argument for
`continuation-prompt-available?`. Traditional racket did not produce a
sensible result for the prompt tag that is used to delimit a
composable continuation or in some cases for the default continuation
prompt tag.
2019-11-23 14:56:17 -05:00
Reuben Thomas
7e3a8c9a3b In-place build: cope with default setting of prefix
configure scripts look for and read a local configuration file given by the
environment variable CONFIG_SITE. This can set variables such as prefix.

Racket’s build system was assuming that prefix would be set to NONE unless a
--prefix command line argument was given. But it could be set by a
CONFIG_SITE configuration file instead.

Hence, for in-place build add an explicit --disable-useprefix option, to
cause any prefix setting to be ignored, and use that in the top-level
Makefile.

Regenerate the configure scripts to get the updated code.
2019-11-18 18:25:37 +01:00
Reuben Thomas
fb9a4a219d Remove erroneously checked-in unused autoconf files 2019-11-18 18:25:37 +01:00
Sam Tobin-Hochstadt
532e649bfd
Clarify embedded executable issues (#2908) 2019-11-15 21:02:20 -05:00
Matthew Flatt
ee4ceb7ae4 expnder: fix problem with nested instantiation
A use of `local-expand` and other things in a module's phase-1
instantiation could trigger a nested attempt to instantiate a module.
2019-11-14 09:18:30 -07:00
Matthew Flatt
0cd7cdaa1f repair bytes-utf-8-ref for #\xFFFF result 2019-11-13 19:33:58 -07:00
Matthew Flatt
ea7452a3ed copy MIT and Apache license files in place on install 2019-11-12 20:15:54 -07:00
Matthew Flatt
52b01ef88b racket/runtime-path: add support for 'share paths
Support include-if-exists for files in the "share" directory analogous
to the include-if-exists support for files in "lib".
2019-11-12 20:10:06 -07:00
Matthew Flatt
3192c02b80 cs: fix struct-type-make-constructor
Support the optional name argument and fix the default name.

Closes #2905
2019-11-12 14:29:06 -07:00
Matthew Flatt
46a73b3d36 expose custom-{write,print-quotable}-accessor as accessor
Revert the part of 39a96dd699 that hides the provenance of these
accessors. Although exposing the fact that the predicates are for
structure properties constrains some internal representations, that
constraint seems unlikely to matter, and exposing the procedures as
property predicates is more consistent with the documentation and the
implementation (especially for Racket CS).

Closes #2904
2019-11-12 14:29:06 -07:00
Paulo Matos
b6627956b6
Improve gcc detection in configure script (#2897)
Improve gcc detection in configure script

We have been detecting gcc by the CC variable but this fails under
ubuntu for example where you might specify CC='gcc-8' to ./configure. 
Also consider clang impersonator to be gcc.

Related to #2890
2019-11-12 19:26:36 +01:00
Winny
3cb41850fa Separate GCC and GNU Make detection (#2902)
Related to #2890.

This ensures when GNU Make is `make`, the `version.mak` file is used
regardless of `CC`.
2019-11-12 10:19:19 +01:00
Matthew Flatt
19411c0dec configure: fix schver.h parsing
Related to #2890
2019-11-11 07:29:35 -06:00
Matthew Flatt
5eb04dfa9e add continuation-mark-set->iterator
Support continuation-mark inspection proportional to the amount that
needs to be inspected, instead of having to build a list of length
propotional to the size of a continuation.

In Racket CS, use iteration to improve exception-handling chaining.
Traditional Racket already used similar functonality internally.
2019-11-10 19:56:58 -06:00
Sam Tobin-Hochstadt
11d8f5c4ce
Mention relicensing in HISTORY.txt. (#2895)
* Mention relicensing in HISTORY.txt.
2019-11-08 10:32:16 -05:00
Matthew Flatt
d14940d22d racket/HISTORY.txt: update for v7.5 2019-11-07 10:14:37 -07:00
Matthew Flatt
470e82a65d adjust / on complex inexact numbers
Add a special case for a real divided by a complex, and remove
(probably) misguided special cases for inexact zero real and imaginary
parts. These changes bring complex `/` further in line for Racket and
Racket CS.

Related to racket/typed-racket#868
2019-11-06 05:33:25 -07:00
Matthew Flatt
ebd7cec834 expander: fix higher-phase variable/syntax provide tracking
The check for whether a provided identifier is syntax or a variable
cuold incorrectly inspect a module that is not yet prepared for the
relevant phase.
2019-11-05 19:36:41 -07:00
Jay McCarthy
2edea7db0d Fix typo 2019-11-02 13:45:16 -04:00
Sorawee Porncharoenwase
73250ae23e only do it for attributes 2019-11-02 10:52:10 -04:00
Sorawee Porncharoenwase
45968e8a3c Fix #2885: convert number entity to character 2019-11-02 10:52:10 -04:00
Matthew Flatt
e8f5501e29 module->exports: add information about defined name
Include the defined name (in addition to the provided name) in the
result of `module->exports` and `module-compiled-exports` --- but for
backward compatibility, only if the new optional `verbosity` argument
is 'defined-names.
2019-10-31 19:35:29 -06:00
Alex Muscar
966399dec6 Fix gen:dict methods for alists with duplicate keys (#2846)
* Fix gen:dict methods for alists with duplicate keys

This fixes https://github.com/racket/racket/issues/2803.

Note that while this works, the implementation is not particlarly fast.
Especially for iterators.

* Fix tabs

* Make code more efficient

* Fix function definition order

* Import set library

* Preserve order

* Use immutable hash sets

* Remove unused import and remove duplicate checks

* Fix syntax error
2019-10-30 11:04:40 -04:00
Matthew Flatt
c5a7d0e38a finish udp-ttl and udp-set-ttl!
Add tests, documentation, and fixes for rktio and Racket CS.
2019-10-29 18:34:03 -06:00
David K. Storrs
24ec75fd03 added udp-ttl and udp-set-ttl! 2019-10-29 15:35:58 -04:00
Matthew Flatt
c34538c58f cs & thread: fix sync shortcut and handle-evt
A shortcut meant to speed up `sync` on values such as semaphores
caused `handle-evt` handlers to sometimes not run in tail position.
2019-10-28 19:05:31 -06:00
Matthew Flatt
a81f9c1c6d /: repair for complex inexact
For a division c+di, when c is less than d, and when (/ d c) produces
infinity, then the sign on the imaginary part of the result was
backwards. For example, `(/ -1.0e-9-1.0e+300i)` produced `-0.0-0.0i`
instead of `-0.0+0.0i`.
2019-10-28 14:02:27 -06:00
Fred Fu
1439fc0e85 fix a typo in comments (#2876) 2019-10-28 10:25:09 -04:00
Sam Tobin-Hochstadt
44895a0027
Relicense this repository under Apache 2.0/MIT. (#2871)
Note: the traditional Racket executable continues to incorporate
LGPLv3 code and thus modifications to it must be released under
that license. However, all Racket code in this repository, as well
as the Racket-on-Chez excutable, are more permissively licensed.

Thanks in particular to @otherjoel and @zyrolasting for their work
on this project.
2019-10-28 09:17:56 -04:00
Dan Holtby
42c897a75f fix for (setup) when (current-library-collection-links) contains hash tables 2019-10-28 06:06:59 -06:00
Matthew Flatt
238cd527f4 revert accidental change to setup/main 2019-10-27 13:49:29 -06:00
Matthew Flatt
0965e5ad6c cs: fix internal procedure-arity-includes/c macro
Repair to 5345fd294c.
2019-10-27 10:38:45 -06:00
Matthew Flatt
bee4a92251 cs-bootstrap: updates to work with recent Chez Scheme changes 2019-10-27 10:38:45 -06:00
Matthew Flatt
f26181dd84 racket/date: add correctly spelled scaliger functions 2019-10-24 15:00:16 -04:00
Matthew Flatt
b1cae06897 openssl: use OPENSSL_sk_num when no sk_num, etc.
OpenSSL 1.1 adds `OPENSSL_` to the front of some names.
2019-10-24 15:00:16 -04:00
Sam Tobin-Hochstadt
2f8207e7c9 Revert "scalinger -> scaliger"
This reverts commit de0fbf2648.
2019-10-24 14:58:59 -04:00
Sam Tobin-Hochstadt
8f579af413 Revert "Handle symbol changes between openssl-1.0 and 1.1"
This reverts commit 822938d9ae.
2019-10-24 14:58:59 -04:00
Matthew Flatt
fb38db3b84 cs: more direct application of continuations 2019-10-24 07:33:24 -06:00
Matthew Flatt
5345fd294c cs: faster internal procedure-arity-includes/c 2019-10-24 06:25:20 -06:00
Matthew Flatt
487277ad02 cs & thread: fix use of custodian weak reference
Commit 77023aeaba made the reference from a custodian-managed
value to the custodian weak, and that could cause a crash in
certain shutdown cases.

Relevant to #2867
2019-10-23 17:32:57 -06:00
Matthew Flatt
79c27ece6f cs: use improved Chez Scheme call/cc
Just bumping the version number here to make sure the improved
`call/cc` is used. The improvement saves about 10% on ctak by avoiding
a layer of closure allocation.
2019-10-23 17:32:57 -06:00
Matthew Flatt
5bce9e822f cs: improve composable continuation
Refactor to move some composable-continuation support out of the
way of prompts, and add a shortcut for simple composition cases.

Also, fix stack traces with continuation barriers and composable
composition, which could show sections of a trace duplicated.
2019-10-23 17:32:57 -06:00
Matthew Flatt
7f5f289ff6 cs: improve notes on Racket CS developement
Explain how to build Chez Scheme bootfiles using Racket, and fix
information on concurrency that had become out-of-date.
2019-10-19 17:02:01 -06:00
Matthew Flatt
77023aeaba fix custodian weak reference and memory-limit unregistration
For Racket CS, weaken references from managed objects to managing
custodians. Otherwise, a custodian with any managed values cannot
be GCed. Also, fix `collect-garbage` call that is triggered by
a memory-limit shutdown to happen after the current thread
(likely shutdown) is swapped out.

For traditional Racket, fix custodian shutdown on a memory-limited
custodian so that it is unregistered as having a limit.
2019-10-18 22:31:35 -06:00
Matthew Flatt
3c2efafbf5 cs: fix printf and handler interaction
Fixes inconsistency in the uses of handlers compared to traditional
Racket, and repairs a crash for displaying byte strings via `~a`.
2019-10-18 18:57:46 -06:00
Matthew Flatt
588778d14c cs: fix compile for non-serializable literals
Lift and delay serialization for non-serializable literals when
using `compile`. Just `compile`ing such an expression is ok, but
it reports an error if there's an attempt to serialize (by printing)
the compiled value.

This improvment also brings Racket CS much more in line with
traditional Racket on the kinds of values that it is willing to
serialize. For example, non-prefab structures no longer serialize
(where deserializing in a new Racket run would produce an instance of
a distinct structure type). The exception type and error message also
now matches traditional Racket.

The improvement relies on a new argument to `s-exp->fasl` for handling
errors.
2019-10-18 18:36:52 -06:00
Matthew Flatt
772289e2c1 force a major GC after memory-limit custodian shutdown
Also, adjust a memory-limit test that wasn't checking behavior as
intended and that wasn't consistent with a Racket CS improvement over
traditional Racket.
2019-10-18 06:57:44 -06:00
Matthew Flatt
a0aeadca0a schemify: fix name associated to on-demand procedure
Fix the procedure name that is used before an on-demand procedure is
extracted.
2019-10-16 15:50:16 -06:00
Luke Lau
a3d2939dae Fix libcrypto native-lib install on macOS 10.15
Catalina now aborts when dlopen'ing the versionless libcrypto/libssl
dylibs.
This removes the versionless libs on macOS from the list of versions
2019-10-16 13:55:35 -06:00
Matthew Flatt
01ed8e4662 cs & ffi/unsafe: change base type of (_bytes o <n>) to _pointer
A base type of `_gcpointer` works ok for traditional Racket as a kind
of "maybe it's GCable, so treat it that way just in case". That
approach doesn't work for Racket CS, where `_gpointer` has to mean
"definitely GCable memory". Although the difference is unfortunate,
making Racket CS base `(_bytes o <n>)` on `_pointer` is consistent
with the way plain `_bytes` is like `_pointer` in Racket CS and like
`_gcpointer` in traditional Racket.
2019-10-16 13:52:21 -06:00
Matthew Flatt
e0b51e2709 expander: repair top-level compilation to machine-independent 2019-10-16 07:18:17 -06:00
Matthew Flatt
ecf905469a normalize license file names can centralize as much as possible 2019-10-16 05:34:09 -06:00
Matthew Flatt
972788c137 replace "INSTALL.txt" with rendered Build Guide 2019-10-15 19:05:36 -06:00
Matthew Flatt
6aa96ad3f7 csm thread, io: avoid termination problem
Especially avoid problems with `custodian-shutdown-all` on the main
custodian in the main thread.
2019-10-14 18:38:19 -06:00
Matthew Flatt
6e0c5e60f3 expander: fix extract dependency checking
Don't convert the recorded version number to a path.
2019-10-14 16:43:04 -06:00
Matthew Flatt
978d60e4a7 windows: adjust flush handling of file-stream output ports
Some synchronization built into `close-output-port` seems unnecessary
on modern Windows (NT and up). An extra manager thread is needed for a
anonymous pipe for "write ready?" purposes, but not to buffer output.
The Windows documentation is not entirely clear on this point, but
experiments suggest that modern anonymous pipes behave in the obvious
way.

Meanwhile, adjust the io layer used by Racket CS with the
synchronization that would be needed for Windows 95. This adjustment
is questionable, because it doesn't seem likely that we'll ever go
back that far with Racket CS. But the rktio interface to support
flushing synchronization might somehow be needed in a future setting,
or mabe it will turn out that I'm wrong about pipe buffers.
2019-10-14 16:12:06 -06:00
Matthew Flatt
c19b944110 racket/port: fix evt constructors to work right with read errors
Propoagate read errors to the `sync` that is applied to an event,
instead of writing the events to stdout.

Related to racket/web-server#76
2019-10-14 11:52:50 -06:00
Matthew Flatt
89403dc8cd fix file-stream read/write on concurrent close
Includes repairs for both Racket CS and traditional Racket.
2019-10-14 10:53:33 -06:00
Matthew Flatt
2799713ea5 cs & io: fix pipe read/write on concurrent close 2019-10-14 10:53:33 -06:00
Ryan Culpepper
ca2eafbfc4 syntax/parse: fix ~between; closes #2856
Please merge to release branch.
2019-10-14 04:09:22 +02:00
Matthew Flatt
edfcec8211 cs: repair call-with-immediate-continuation-mark
The default-value expression could get lost, replaced with just #f.
2019-10-13 09:38:02 -06:00
Matthew Flatt
cd596e5277 cs: fix error reporting for apply on a non-list 2019-10-12 16:20:16 -06:00
Matthew Flatt
2d3b426d05 cs: rewrite more error messages
Closes #2801
2019-10-12 16:10:42 -06:00
Matthew Flatt
a85a915f88 cs: fix value formatting in car, etc., exceptions 2019-10-12 15:33:55 -06:00
Matthew Flatt
77cdfde679 cs: fix inlining of unsafe vector and box operations
Before this repair, `unsafe-vector-ref` was slower than `vector-ref`.
2019-10-12 13:39:36 -06:00
Matthew Flatt
61e39657fa cs & io: fix caching of locale converters
Fix an interaction with custodians and byte converters that are
used by `string-locale<?`, `string->bytes/locale`, etc.
2019-10-10 17:01:52 -06:00
Matthew Flatt
2338d98761 cs: fix some io demos 2019-10-10 17:01:52 -06:00
Matthew Flatt
9ce8713cdc cs: significantly improve continuation capture and application
Avoid a continuation frame and layer of thunks that was in place for
checking for breaks just after applying a continuation. Instead, we
install just the continuation marks and check for breaks before
actually jumping; the break checker can't tell the difference, since
marks are the only way for it to check the continuation. This
improvement cust about 40% of the time for simple continuation capture
and application.
2019-10-10 17:01:52 -06:00
Matthew Flatt
67a7a5c869 cs: streamline continuation application slightly
Avoid some allocation and indirect calls, and add a shortcut for the
case where there are no winder changes, no mark changes, etc.
2019-10-10 17:01:52 -06:00
Matthew Flatt
067dda578b cs & io: fix log receiver synchronization
A misplaced `wrap-evt` could allow the result from `sync` on
a log receiver to be an opaque event, instead of a vector.

In other cases, a differently misplaced `wrap-evt` could also cause an
internal instance of `control-state-evt` to not be unregistered
correctly.

The solution to both problems is to add a wrapper procedure to
`control-state-evt`.

Closes #2664
2019-10-09 19:46:12 -06:00
Matthew Flatt
2ad4c6f508 cs: unbreak #:in-original-place? for foreign procedures 2019-10-09 19:43:42 -06:00
Matthew Flatt
f3aae7f4fb cs & thread: simplificaton for future "sync" action 2019-10-09 15:52:34 -06:00