Commit Graph

55 Commits

Author SHA1 Message Date
Matthew Flatt
ed1d9450c0 raco test: improve error for a bad config submodule
Closes #1488
2021-05-15 09:10:19 -06:00
Matthew Flatt
744d8d6d25 zo-lib: documentation and a little support for non-BC linklets
Closes #3073
2021-04-29 14:09:54 -06:00
Matthew Flatt
547678f7de raco test: fix --place mode (non-)rackunit counting
When a test run by `--place` mode doesn't increment any rackunit
counts, treat the count as 0 instead of 1 for consistency with
`--direct` and `--process` modes.

Closes #1358
2021-04-28 07:13:06 -06:00
K
df0c756f73
typographic rehash of --help output
The current output for `--help` is quite messy and hard to
navigate.

I added some indentation and spacing to make the document
easier to read. For example,

    File and expression options:

      -e <exprs>, --eval <exprs>
         Evaluate <exprs>, print results
      -f <file>, --load <file>
         Like -e '(load "<file>")' without printing

The new layout is longer, but at least it is readable. It
might be better if we could move all the options to a man
page and only select a few common ones to put in `--help`.
2021-04-16 08:25:31 -06:00
Matthew Flatt
48621b4bf5 bc: unbreak raco demod 2021-04-10 14:55:44 -06:00
Matthew Flatt
b9fdb503c1 raco demodularize: adapt to CS
Really, `raco demod` is adapted here to work with any linklet-based VM
by compiling modules to machine-independent form, which is essentially
a wrapper around linklet S-expressions. The BC-specific implementation
remains in place, and it has the advantage of being able to work with
existing module compilations, while the implementation based on
machine-independent form must recompile all modules before attempting
to combine them (but that recompilation is easily cached).

Use `--work <dir>` to use `<dir>` as a cache for multiple
demodularizations.

Getting `raco demod` to work involved several incidental improvements:

 * make `racket/linklet` work with machine-independent forms;

 * add `linklet-body-reserved-symbol?`;

 * fix schemify for linklets that have unexported definitions (which
   the expander never generates, but the demodularizer does);

 * add `current-multi-compile-any` to expose CM's multi-target
   compilation mode programmatically; and

 * repair a bug in CS JIT mode.

The demodularizer could be a lot smarter to prune demodularized code
before sending it off to the compiler. Of course, the compiler should
be able to figure out improvements itself, but sending a smaller chunk
of code to the compiler can avoid the hybrid interpreter--compiler
mode that is used for large linklets and that prevents optimizers like
cp0 from doing much to prune definitions.

The demodularizer has a lot in common with the expander's flattener
that is used for bootstrapping, and a smarter demodularizer would have
even more in common. It would be nice to have one implementation
instead of two.
2021-04-10 08:13:29 -06:00
Matthew Flatt
727cd1ca9f raco demod: report that it works only on BC
Closes #3706
2021-03-07 07:58:32 -07:00
Matthew Flatt
6603fe3ad4 cs: improve single-value and no-return tracking
New `#%app/no-return` and `#%app/value` functions at the Chez Scheme
level allow schemify to communicate that function calls will not
return or will return a single value. The schmeify pass may have this
information because a Racket-level primitive is declared that way
(such as `error` or `raise-argument-error` for no-return, or most
functions for single-valued) or because single-valuedness is inferred.

There's currently no inference for no-return functions, because those
are relatively rare. An `#%app/value` is used by schemify only for
imported, non-inlined functions, since cp0 can already deal with local
functions and primitives.

There's a start here at adapting the "optimize.rktl" test suite for CS
--- and that effort triggered these improvements plus some other
low-hanging fruit. But a lot more is needed to adapt "optimize.rktl"
and to make some additional optimizations happen.
2020-12-11 13:29:35 -07:00
Matthew Flatt
f07c2fea71 cs: simplify and improve handling of literals
Use data instead of code to shrink ".zo" sizes by 10-30%.

When Racket code contains a literal that cannot be serialized directly
by Chez Scheme (such as a keyword or an immutable string that should
be datum-interned), the old approach was to generate Scheme code to
construct the literal through a lifted `let` binding. To handle paths
associated with procedures, however, Chez Scheme's `fasl-write` had
been extended to allow arbitrary values to be intercepted during fasl
and passed back in to `fasl-read`. Using that strategy for all Racket
literals simplifies the implementation and reduces compiled code. It
also makes closures smaller, while increases the number of
relocations. DrRacket's foorprint shrinks by about 1%, but the main
affect is on disk space for a Racket installation.
2020-11-22 06:02:40 -07:00
Matthew Flatt
b2a27ef05c cs & raco decompile: expose more fasl content
Show the machine code that constructs lifted constants for a linket.

Also, add a `--partial-fasl` option that shows fasl content in a rawer
form, which is useful for checking how content is presented and that
nothing is getting lost in other reconstructed views.
2020-11-21 07:26:08 -07:00
Matthew Flatt
db195a52b5 raco decompile: avoid static-generation code
Update the decompiler to avoid hard-coding the static-generation
numebr, which changed.
2020-11-07 14:08:36 -07:00
Walter H. Yang
62f444d4e1
raco: test: Add support to output to file (#3451)
Example:
 raco test --output output.txt utils.rkt

Fixes #3161
Signed-off-by: Hong Yang <yangh.cn@gmail.com>
2020-10-27 06:09:22 +01:00
Sorawee Porncharoenwase
66547f3aaf Change else in match to _
This fixes at least one "potential" bug in the file
`collects/pkg/private/create.rkt`, where `else` in the
`cond` is bound to `else` from `match` instead of `racket/base`.
(though it turns out that the format will always be
truthy, making the program happen to be correct.)
2020-08-25 09:37:02 -06:00
Matthew Flatt
80ad628eef cs: avoid Chez Scheme fasl of immutable hash table
Change the ".zo" format to convert a linklet bundle hash table to a
list, which avoids probblems with stencil-vector encodings and cross
cimpilation between 32-bit and 64-bit platforms. Avoiding records,
stencil values, and hash code should make the fasled form simpler.
2020-08-23 20:20:07 -06:00
Matthew Flatt
29a6ca6737 Chez Scheme: increase FP registers for x86_64 2020-08-05 05:55:28 -06:00
Sam Tobin-Hochstadt
c135647d9c
Support -l for raco make. (#2091)
* Support `raco make -l <path>` by analogy to `racket -l <path>`.
2020-07-14 13:33:35 -04:00
Matthew Flatt
4ad93bcca0 cs: improve raco dec output
Handle `--linklet` mode better and show fasled arguments to compiled
linklet functions.
2020-06-26 12:11:53 -06:00
Matthew Flatt
2a7d94d89c update compilation info, especially for CS
Update the Guide's performance section with current information for
Racket CS, and also document the Racket CS compilation mode and
inspection environment variables. Make a couple of environment
variables work more consistently: PLTDISABLEGC for CS and PLT_ZO_PATH
for BC.
2020-06-14 14:26:22 -06:00
Matthew Flatt
aeb32081db cs: repair for raco decompile 2020-05-07 16:18:25 -06:00
Matthew Flatt
cbcd9505aa racocs decompile: handle linklets in 'interpret mode 2020-01-31 06:10:33 -07:00
Matthew Flatt
fb95e9312f racocs decompile: show machine code or assembly
When the "disassemble" package is installed, use it to disassemble the
machine code in a Racket CS linklet.
2020-01-29 20:01:24 -07:00
Matthew Flatt
76a7ee0ccd raco exe: expand in fresh namespace
Related to racket/typed-racket#852
2019-08-26 05:32:28 -06:00
Matthew Flatt
1a7d881aba raco exe: add ++named-lib and ++named-file flags
The new flags can be used to make an embedded module's name
predicatable, which is useful for making a deserialization format
stable (i.e., `serializable-struct` creates a serializer that uses the
embedded module name). This functionality was already available from
`create-embedding-executable`, but there was no way to reach it via
`raco exe`.
2019-06-12 15:15:57 -06:00
Matthew Flatt
0020332810 raco demod: discard unusable macro implementations
Prune away "phase -1" macro registrations, because they're useless,
and because the expander's evaluation of linklets now actively rejects
them.
2019-03-21 18:12:49 -06:00
Matthew Flatt
6a35d64e95 repairs for change for machine-independent bytecode
Fix problems with moving some VM-specific handlign to schemify, and
fix some interning issues that the change exposed.
2019-03-13 09:32:33 -06:00
Matthew Flatt
6e958b627f expander: avoid VM-specific expansion
Move different handling of serialized syntax data to the schemify
layer instead of te expander, so that the result of compiling in
machine-independent form is the same for traditional Racket and Racket
CS.
2019-03-13 09:32:33 -06:00
Matthew Flatt
8b917039a2 zo-{parse,marshal}: round-trip all ".zo" formats
Although `raco dec` cannot yet usefully decompile Racket CS compiled
code, the underlying `zo-parse` and `zo-marshal` functions can now at
least read and re-write that format by just keeping the bytes for the
CS-specific part, and it can also now rouind-trip the machine- and
VM-independent format.
2019-01-29 19:35:04 -07:00
Matthew Flatt
7823b6eecf raco decompile: support machine-independent bytecode 2018-11-27 20:59:52 -07:00
Matthew Flatt
4396b841c0 fix expander+compiler to report source name for use-before-init
Lots of plumbling was in place to preserve the source name (instead of
the symbol generated to avoid collisions for macro-introduced
definitions), but some small pieces were missing.

Closes #2288
2018-10-04 18:52:05 -06:00
Matthew Flatt
f03d5c0076 raco exe: add ++lang support
When a stand-alone executable created by `raco exe` needs to load
modules that start with a `#lang` line, there have been various
obstacles to adding the right run-time support via `++lib`. The
`++lang` flag addresses those problems and makes it easy to indicate
that enough should be embedded to support loading modules with a
specified language.

There are problems in the way that various handlers interact for the
"lang/reader.rkt" versus `(submod "." reader)` search path that
converts a language name to a reader. To accomodate the search in a
standalone executable (that does not provide access to collections in
general), the module name resolver must refrain from raising an
exception for a non-existent submodule path that refers to a
non-existent collection.
2018-09-02 07:53:47 -06:00
Matthew Flatt
107d1e42a7 raco demod: fix module name in generated bytecode
Closes #2226
2018-08-11 18:25:55 -06:00
Sam Tobin-Hochstadt
738fe8a44f decompiler: print void in a read-able form except under quote. 2018-07-10 11:24:51 -04:00
Sam Tobin-Hochstadt
044359c53d decompiler: track primitives from #%linklet module. 2018-07-10 11:24:51 -04:00
Matthew Flatt
e01a21db0c raco exe: add --embed-dlls for Windows
Creating an executable with embedded DLLs means that the executable
can be truly stand-alone, instead of needing to be kept with its
DLLs in a relative subdirectory.

DLL embedding works by bypassing the OS's LoadLibrary and
GetProcAddress functions, and instead maps the DLL into memory
and performs relocations explicitly. Joachim Bauch's MemoryModule
(Mozilla license) implements those steps.
2018-03-25 16:35:42 -06:00
Matthew Flatt
3e5e2cc30d raco decompile: support non-module programs 2018-02-27 20:23:12 -07:00
Matthew Flatt
59ef254318 switch to a new, Racket-implemented expander & module system
This commit merges changes that were developed in the "racket7" repo.
See that repo (which is no longer modified) for a more fine-grained
change history.

The commit includes experimental support for running Racket on Chez
Scheme, but that "CS" variant is not built by default.
2018-02-26 13:19:53 -07:00
Jay McCarthy
5662ed8e99 Adding --deps 2017-10-20 11:34:40 -04:00
Matthew Flatt
30e4e812ba raco test: doc and help tweaks
* Clarify shell context for `++args` note on quotes

 * Add `history` notes

 * Make the help output fit in 80 columns

 * Bump "compiler-lib" version
2017-06-22 08:36:30 -06:00
Conor Finegan
9852afe1b1 raco test: support ++arg <arg> and ++args <args>
Add a way for `raco test` to pass along arguments to the test program.
2017-06-22 08:09:22 -06:00
Matthew Flatt
dc85374501 Add ignore-stderr submodule and test-ignore-stderrs "info.rkt"
These configuration options apply to `raco test` and mirror the
`--ignore-stderr` command-line flag.
2017-01-30 05:41:49 -07:00
Matthew Flatt
710320e3dc "Mac OS X" -> "Mac OS"
Although "macOS" is the correct name for Apple's current desktop OS,
we've decided to go with "Mac OS" to cover all of Apple's Unix-like
desktop OS versions. The label "Mac OS" is more readable, clear in
context (i.e., unlikely to be confused with the Mac OSes that
proceeded Mac OS X), and as likely to match Apple's future OS names
as anything.
2016-12-23 12:18:36 -07:00
Sam Tobin-Hochstadt
eec3684dbd Add recompile option to raco demod. (#1373)
Originally by @bdj in racket/compiler#7.
2016-08-19 07:09:49 -06:00
Sam Tobin-Hochstadt
bacb08acf5 raco decompile: Suggest raco make when the file isn't compiled. 2016-07-06 17:47:47 -04:00
Sam Tobin-Hochstadt
74723e3e95 Move to correct directories. 2016-05-27 17:20:35 -04:00
Matthew Flatt
1920ac59ab move some test & doc collections out of "racket-" pkgs to new pkgs 2013-10-15 17:50:32 -06:00
Jay McCarthy
11b784236e Racket now works, but was broken before 2013-10-15 10:38:26 -06:00
Jay McCarthy
e6e95f1029 Base now works, but was broken before 2013-10-15 10:38:26 -06:00
Matthew Flatt
70b6f6464f fix .zo marshal of a syntax object containing a hash table in a list
Also, fix `zo-parse` unmarshaling of syntax-object hash tables.

Closes PR 14087
2013-10-09 07:09:36 -06:00
Sam Tobin-Hochstadt
9f2755116d Remove units in parts of compiler, dynext, setup and create the cext-lib package.
`cext-lib` contains much of the contents of `dynext`, which
is no longer very widely used.

Also moved the implementation of the `mzc` executable
to a more appropriate package.

Also, used `lazy-require` consistently for dynamically
loading implementations.
2013-09-26 14:53:51 -04:00
Carl Eastlund
6665f42e33 Changed set? to generic-set?. 2013-08-28 00:10:18 -04:00