OILS / doc / release-quality.md View on Github | oilshell.org

171 lines, 144 significant
1---
2css_files: web/base.css web/toc.css web/release-index.css
3all_docs_url: -
4version_url: -
5---
6
7Oils 0.22.0 Quality
8===================
9
10<!-- NOTE: This file is published to /release/$VERSION/quality.html -->
11
12<span class="date">
13<!-- REPLACE_WITH_DATE -->
14</span>
15
16This is a supplement to the [main release page](index.html).
17
18<div id="toc">
19</div>
20
21## Test Results
22
23### Spec Tests
24
25- [OSH Survey](test/spec.wwz/osh-py/index.html). Test OSH with existing shells,
26 and compare their behavior.
27 - [OSH in C++](test/spec.wwz/osh-cpp/compare.html). The progress of the C++
28 translation.
29- [YSH](test/spec.wwz/ysh-py/index.html). The legacy-free language.
30 - [YSH in C++](test/spec.wwz/ysh-cpp/compare.html). The progress of the C++
31 translation.
32- [Stateful Tests](test/spec.wwz/stateful/index.html). Tests that use
33 [pexpect]($xref).
34
35### Primary Test Suites
36
37- [Gold Tests](more-tests.wwz/suite-logs/gold.txt). Compare OSH with bash
38 (using implicit assertions, not golden output.)
39- [Wild Tests](test/wild.wwz/). Parse and translate thousands of shell scripts
40 with OSH.
41- [Python Unit Tests](more-tests.wwz/unit/).
42- [C++ Test Coverage](test/coverage.wwz/unified/html/index.html) measured by
43 Clang.
44 - [Log Files](test/coverage.wwz/log-files.html)
45- [Process Table](more-tests.wwz/process-table/). Are child processes in the
46 right state for job control?
47
48### More Tests
49
50- [Smoosh][] test suite (from [mgree/smoosh][]):
51 - [smoosh](test/spec.wwz/smoosh/smoosh.html)
52 | [smoosh-hang](test/spec.wwz/smoosh/smoosh-hang.html)
53- [parse-errors](more-tests.wwz/suite-logs/parse-errors.txt). A list of all parse errors.
54 - [parse-errors-osh-cpp](more-tests.wwz/suite-logs/parse-errors-osh-cpp.txt).
55 With the native binary.
56- [runtime-errors](more-tests.wwz/suite-logs/runtime-errors.txt). A list of shell runtime
57 errors.
58- [ysh-runtime-errors](more-tests.wwz/suite-logs/ysh-runtime-errors.txt). YSH
59 runtime errors.
60- [ysh-parse-errors](more-tests.wwz/suite-logs/ysh-parse-errors.txt). YSH
61 parse errors.
62- [ysh-every-string](more-tests.wwz/suite-logs/ysh-every-string.txt). String
63 literal stress test.
64- [ysh-large](more-tests.wwz/suite-logs/ysh-large.txt)
65- [lossless](more-tests.wwz/suite-logs/lossless.txt). Test an invariant of the parser.
66- [osh-usage](more-tests.wwz/suite-logs/osh-usage.txt). Misc tests of the `osh` binary.
67- [tools-deps](more-tests.wwz/suite-logs/tools-deps.txt). Tests for a subcommand in
68 progress.
69- How many processes does Oils start compared to other shells?
70 - [syscall/by-code](more-tests.wwz/syscall/by-code.txt)
71 | [syscall/by-input](more-tests.wwz/syscall/by-input.txt)
72- [ysh-ify Tests](more-tests.wwz/suite-logs/ysh-ify.txt). Test OSH to YSH
73 translation.
74
75[Smoosh]: http://shell.cs.pomona.edu/
76
77[mgree/smoosh]: https://github.com/mgree/smoosh/tree/master/tests/shell
78
79## Benchmarks
80
81- [Parser](benchmarks.wwz/osh-parser/). How fast does OSH
82 parse compared to other shells?
83- [Runtime](benchmarks.wwz/osh-runtime/). How fast does OSH run shell
84 scripts?
85- [Compute](benchmarks.wwz/compute/). How fast does OSH run small programs
86 without I/O?
87- [Build](benchmarks.wwz/ovm-build/). How long does it take for end users to
88 build Oils? How big is the resulting binary?
89- [Virtual Memory Baseline](benchmarks.wwz/vm-baseline/). How much memory do
90 shells use at startup?
91- [mycpp](benchmarks.wwz/mycpp-examples/). Compares Python and generated C++
92 on small examples.
93- Memory Management Overhead. How much time do we spend managing memory,
94compared with the shell interpreter?
95 - [benchmarks/gc](benchmarks.wwz/gc/). Stats from the OS and our GC runtime.
96 - [benchmarks/gc-cachegrind](benchmarks.wwz/gc-cachegrind/). Stable
97 measurements.
98- [uftrace](benchmarks.wwz/uftrace/). Stable measurements for parsing and
99 runtime.
100
101## Metrics
102
103- Lines of source, counted in different ways:
104 - [overview](pub/metrics.wwz/line-counts/overview.html). The whole Oils
105 repo, organized by type of source file.
106 - [for-translation](pub/metrics.wwz/line-counts/for-translation.html). An
107 overview of the "compiler engineer" project.
108 - [cloc-report](pub/metrics.wwz/line-counts/cloc-report.txt). Significant
109 lines of code, as measured by the [cloc][] tool.
110- Generated C++ code
111 - [oils-cpp](pub/metrics.wwz/line-counts/oils-cpp.txt). The C++ code in the
112 `oils-for-unix` tarball.
113 - [preprocessed](pub/metrics.wwz/preprocessed/-wwz-index). How much code is
114 passed to the compiler?
115 - [cxx-dbg](pub/metrics.wwz/preprocessed/cxx-dbg.txt),
116 [cxx-opt](pub/metrics.wwz/preprocessed/cxx-opt.txt)
117 - [Binary code size](pub/metrics.wwz/oils-for-unix/-wwz-index) reported by
118 [Bloaty][]. How much code is output by the compiler?
119 - [overview](pub/metrics.wwz/oils-for-unix/overview.txt),
120 [symbols](pub/metrics.wwz/oils-for-unix/symbols.txt)
121- [Doc Metrics](doc/metrics.txt)
122
123[cloc]: https://github.com/AlDanial/cloc
124[Bloaty]: https://github.com/google/bloaty
125[OVM]: //www.oilshell.org/cross-ref.html?tag=OVM#OVM
126
127## Source Code
128
129These files may help you understand how Oils is implemented, i.e. with
130domain-specific languages and code generation.
131
132- [_gen/frontend/id_kind.asdl_c.h](pub/src-tree.wwz/_gen/frontend/id_kind.asdl_c.h.html).
133 A list of language elements, used in the lexer and in multiple parsers and
134 evaluators.
135- The regex-based lexer uses two stages of code generation:
136 - [frontend/lexer_def.py](pub/src-tree.wwz/frontend/lexer_def.py.html)
137 | [_gen/_tmp/match.re2c-input.h](pub/src-tree.wwz/_gen/_tmp/match.re2c-input.h.html)
138 | [_gen/frontend/match.re2c.h](pub/src-tree.wwz/_gen/frontend/match.re2c.h)
139- [frontend/syntax.asdl](pub/src-tree.wwz/frontend/syntax.asdl.html). The syntax tree
140 for OSH and YSH.
141- [ysh/grammar.pgen2](pub/src-tree.wwz/ysh/grammar.pgen2.html). The
142 expression grammar for YSH. In contrast, the OSH parsers are hand-written.
143
144Also see the [oilshell/oil](https://github.com/oilshell/oil) repository.
145
146## Old
147
148These links describe the CPython / "[OVM]($xref)" build, which should become
149the "experimental" version of Oils.
150
151#### OPy / OVM Metrics
152
153- Lines of dependencies:
154 - [pydeps](pub/metrics.wwz/line-counts/pydeps.txt). Oils code plus the Python
155 standard library.
156 - [nativedeps](pub/metrics.wwz/line-counts/nativedeps.txt). Oils code plus a
157 slice of CPython.
158- Bytecode Metrics
159 - [overview](pub/metrics.wwz/bytecode/overview.txt) - Compare OPy vs. CPython.
160 - [oil-with-opy](pub/metrics.wwz/bytecode/oil-with-opy.txt) - Oils compiled with
161 OPy.
162 - [oil-with-cpython](pub/metrics.wwz/bytecode/oil-with-cpython.txt) - Oils
163 compiled with CPython (for comparison).
164 - [src-bin-ratio-with-opy](pub/metrics.wwz/bytecode/src-bin-ratio-with-opy.txt) -
165 How big is the compiled output?
166- OVM / CPython
167 - [overview](pub/metrics.wwz/ovm/overview.txt) - An analysis of GCC's
168 compilation of [OVM][] (a subset of CPython). [Bloaty][] provides the
169 underlying data.
170 - [cpython-defs/overview](pub/metrics.wwz/cpython-defs/overview.txt) - We try to
171 ship as little of CPython as possible, and this is what's left.