Why Sponsor Oils? | blog | oilshell.org

Release of Oil 0.8.12

2021-07-07

This is the latest version of Oil, a Unix shell that's our upgrade path from bash:

Oil version 0.8.12 - Source tarballs and documentation.

To build and run it, follow the instructions in INSTALL.txt. The wiki has tips on How To Test OSH.

If you're new to the project, see Why Create a New Shell? and posts tagged #FAQ.

Table of Contents
Summary of Changes
Documentation Updated
Wiki Pages
Closed Issues
Commit Log
What's Next?
Appendix: Metrics for the 0.8.12 Release
Spec Tests
Source Code Size
Benchmarks
Native Code Metrics

Summary of Changes

I announced version 0.8.9 about three months ago, and then skipped 0.8.10 and 0.8.11 for lack of time. Instead, I informally kept track of changes in Zulip threads, as well as on Github. Here's a summary:

Oil 0.8.10 Released (Zulip).

Notes for Oil 0.8.11 (Zulip). Many OSH and Oil language changes!

Notes for Oil 0.9.0 (Zulip). (I decided to release 0.8.12 before 0.9.0.) I mentioned this thread in the intro to Recent Progress on the Oil Language. That post gives more color on the motivation for these changes.

Not mentioned elsewhere:

Documentation Updated

Wiki Pages

Closed Issues

I summarized most of these issues above, but here is a raw list.

Thanks to Travis Everett for running OSH and reporting the crash with ${!undef-}: bash indirect expansion combined with the - operator. The fix for this was pleasant due to Oil's use of algebraic data types!

Apologies if I've accidentally omitted anyone else's contributions.

#956 crash with eval ${!undef-}
#952 shvar builtin to set name=string options, with stack discipline
#949 Rename a couple builtins
#940 Remaining String Literal Issues (syntax and semantics)
#932 strict_errexit too strict with allow_command_sub
#931 parse_backslash should allow escaping space
#919 run --status-ok SIGPIPE works with /usr/bin/printf but not builtin printf
#897 maybe get rid of set and/or setlocal for now? setvar is OK?
#888 document const semantics
#849 parse_triple_quoted: modern here doc syntax (and multiline strings)
#716 Oil could disable dynamic scope and provide explicit syntax to opt-in
#586 Implement setref

Commit Log

Here are the commits from other contributors. You can also view the full changelog.

6b92b97b Raphael Megzari [doc] Add an executable file that will becom A Tour of Oil (#935)

What's Next?

I'm also taking stock of the Oil language and documenting it. This Zulip thread might be interesting to those closely following the project: Oil Syntax: What's Left?

Appendix: Metrics for the 0.8.12 Release

These metrics help me keep track of the project. Let's compare this release with version 0.8.8, which I announced in March.

Spec Tests

OSH spec tests made slight progress:

Oil spec tests made more:

Source Code Size

We have ~600 new significant lines of code:

And ~1500 new lines of physical code:

Benchmarks

Let's compare against version 0.8.9, where we introduced the stable cachegrind benchmarks.

I have a hard time interpreting this! The cachegrind benchmark is supposed to stable, so we're apparently we are doing more work per line, which is bad. But the noisy benchmarks show an improvement, though this may be an illusion. I don't recall anything that would have caused this, except maybe new parsing options like shopt --set parse_backslash.

I'll continue to keep track of this over time. It's good to have more measurements.

Runtime:

This variation is within benchmark noise. Note the machine changed from lisa to lenny (because I moved an upgraded my machine and OS). This is reflected in the provenance sections Shell and Host Details.

Native Code Metrics

Translation has stalled, but at least it's not regressing. I want to solicit help with this.

The lines of native code increased, probably due to bin/oven:

The binary size increased a bit:

Note: After the lisa -> lenny upgrade, the 2 benchmark machines are using different versions of Ubuntu, which means different compilers, which produces binaries of different size. I used the common machine flanders for this comparison, but it will change over time.