1 | ---
|
2 | css_files: web/base.css web/toc.css web/release-index.css
|
3 | all_docs_url: -
|
4 | version_url: -
|
5 | ---
|
6 |
|
7 | Oils 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 |
|
16 | This 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,
|
94 | compared 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 |
|
129 | These files may help you understand how Oils is implemented, i.e. with
|
130 | domain-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 |
|
144 | Also see the [oilshell/oil](https://github.com/oilshell/oil) repository.
|
145 |
|
146 | ## Old
|
147 |
|
148 | These links describe the CPython / "[OVM]($xref)" build, which should become
|
149 | the "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.
|