1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
[]
= "typelisp"
= "A statically typed Lisp with an interpreter and a compiler to native executables (LLVM)"
= true
= true
= true
= true
= "README_JP.md"
= ["lisp", "language", "compiler", "interpreter", "static-typing"]
= ["compilers", "command-line-utilities"]
# What goes into the package published to crates.io: the sources this crate
# builds from, and nothing the repository keeps for its own development
# (docs, examples, editor support, tests, scripts).
= ["/src/**", "/build.rs", "/Cargo.toml", "/Cargo.lock", "/README_JP.md", "/LICENSE-APACHE", "/LICENSE-MIT", "/LICENSE-EXCEPTION"]
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[]
= ["crates/typelisp-abi", "crates/typelisp-front", "crates/typelisp-mem", "crates/typelisp-print", "crates/typelisp-read", "crates/typelisp-rt"]
# Plain `cargo build`/`cargo test` (no `-p`) only builds the root package by
# default in a non-virtual workspace like this one — that's not enough to
# produce `typelisp-rt`'s `staticlib` artifact, since the root package only
# needs its `rlib` to link against. Listing every member here makes them
# explicit build targets too, the same as passing `-p typelisp-rt` — see
# `aot.rs`'s `link_archive` doc comment for why that artifact has to exist
# before any AOT test runs.
= [".", "crates/typelisp-abi", "crates/typelisp-front", "crates/typelisp-mem", "crates/typelisp-print", "crates/typelisp-read", "crates/typelisp-rt"]
# One version for every crate here: they are built and released together, and
# `typl --version` and `(lisp-implementation-version)` report it.
[]
= "0.2.0"
= "2021"
= "MIT OR Apache-2.0"
= "https://github.com/JunSuzukiJapan/typelisp"
# The crates of this workspace as dependencies of one another. `version` is
# what crates.io resolves them by once published; `path` is what a build from
# this tree uses.
[]
= { = "crates/typelisp-abi", = "0.2.0" }
= { = "crates/typelisp-front", = "0.2.0" }
= { = "crates/typelisp-mem", = "0.2.0" }
= { = "crates/typelisp-print", = "0.2.0" }
= { = "crates/typelisp-read", = "0.2.0" }
= { = "crates/typelisp-rt", = "0.2.0" }
[]
= "1.8.0"
= "0.4"
= "0.4"
= "0.2"
= "0.1"
= "18"
= { = "0.9", = ["llvm22-1"] }
= true
= true
= true
= true
= true
= true
= "0.8"
= "0.97"
# `lsp-types` requires `serde`; the LSP transport speaks JSON.
= { = "1", = ["derive"] }
= "1"
# The executables that only matter to someone working on typelisp itself —
# the two regenerators and the prelude benchmark below. Off by default so that
# `cargo install` puts only `typl` and `typl-lsp` on a user's PATH; the scripts
# that run them turn it on.
[]
= []
[[]]
= "typl"
= "src/main.rs"
[[]]
= "typl-lsp"
= "src/bin/lsp.rs"
# Regenerates the committed compiler-island AOT artifact
# (src/compiler_island.bc). Run via scripts/regen-compiler-island.sh
# whenever compiler.rs's SOURCE changes; the island_artifacts_are_fresh test
# fails until it is re-run. Interp-closure removal Stage 3.
[[]]
= "typl-bootstrap-island"
= "src/bin/bootstrap_island.rs"
= ["dev-tools"]
# Regenerates the committed precompiled-prelude artifact
# (src/prelude_compiled.bc). Run via scripts/regen-prelude-bitcode.sh whenever
# prelude.rs's SOURCE changes — or the island does, since the island compiles
# it; the prelude_artifacts_* tests fail until it is re-run.
[[]]
= "typl-bootstrap-prelude"
= "src/bin/bootstrap_prelude.rs"
= ["dev-tools"]
# Writes a new ABI version (docs/dev/api_version/) when what compiled code
# assumes about the runtime archive has changed. Run via
# scripts/regen-abi-version.sh; abi_version_test fails until it is re-run.
[[]]
= "typl-regen-abi-version"
= "src/bin/regen_abi_version.rs"
= ["dev-tools"]
# Measures what the precompiled prelude is worth: the same workloads against a
# compiled and an interpreted prelude, in one process. Run via
# scripts/bench-prelude.sh.
[[]]
= "typl-bench-prelude"
= "src/bin/bench_prelude.rs"
= ["dev-tools"]
# rustc shares generic instantiations across crates at opt-level 0 and 1, and
# a shared instantiation is a *reference*: with it, `typelisp-rt`'s own objects
# name symbols that live in these crates' objects, and the linker pulls those
# members into every executable — undoing the split these crates exist for.
# Measured on `(defun main () i32 42)`: 4,083,736 bytes and 237 printer symbols
# at opt-level 0, 3,510,608 and none at opt-level 2. Release builds do not
# share generics, so this only restores there what release already had.
#
# Needed *here* and not for every split-out crate: sharing runs downstream, so
# only a crate that something already-linked sits below can be dragged in this
# way. `typelisp-print` and `typelisp-read` are below `typelisp-rt`, whose
# shims every executable links. `typelisp-front` is above it and nothing
# references it unless the program calls `eval`, so it needs no entry —
# measured at 0 front symbols either way, and building it unoptimised takes
# 26s against 4m27s.
[]
= 2
[]
= 2
# `tests/net_test.rs` makes the certificate its TLS server presents; see
# crates/typelisp-rt/Cargo.toml for why it is generated and not a fixture.
[]
= { = "0.14", = false, = ["ring", "pem", "crypto"] }