Why Sponsor Oils? | blog | oilshell.org
This is the latest version of OSH, a bash-compatible shell:
Please try it on your shell scripts and report bugs! To build and run it, follow the instructions in INSTALL.txt.
If you're new to the project, see Why Create a New Shell?. OSH can run unmodified shell scripts that are thousands of lines long, as described in the announcement for OSH 0.4.
I'm calling it 0.5.alpha3
because most changes are under the hood, rather
than user-facing.
I return from the Recurse Center in August, and I expect to release
version 0.5
a few weeks thereafter. If you want to keep up with the project
over the summer, please join oilshell.zulipchat.com, which I described in
the last post.
It's more of a "pre-release" than an "alpha", but I didn't want to disrupt the naming scheme (note 1). In other words, it's still a high-quality release that passes a large suite of tests. The results are on the /release/$VERSION/ page.
It's also now live on the home page, so new users will download and test it.
This section summarizes the raw changelog.
Thanks to timetoplatypus
for reporting bugs that led to fixes:
exit
in the interactive
shellI'm still open to more bug reports! I'll respond to them while I'm away for the summer.
Not visible to end users: Yorwba
fixed a subtle byterun bug after I
spent a couple hours trying to track it down.
sys.setprofile()
hook).In addition to osh
, there's now an oshc
command, which you can read as
osh command or osh compiler. It has subcommands for tools, like oshc deps
and oshc translate
.
oil
/ oilc
pairopy
/ opyc
pair. This one is only relevant to Oil
developers, not users. OPy is an implementation detail.Most other changes were "under the hood". For context, see Building Oil with the OPy bytecode compiler.
opy/callgraph.py
,
as well as the work to make OPy's output deterministic. The
drastic refactoring I mentioned made OPy simpler and
slightly faster (TODO: publish benchmarks).Compared to the previous release, the benchmarks and metrics haven't changed much. This is good, because it means that replacing the bytecode compiler and then refactoring it didn't break anything.
For example, the bytecode isn't noticeably bigger:
The one anomaly I noticed is that the native code size is significantly different:
I still need to look into it, but it's probably caused by one of:
-fomit-no-frame-pointer
, which I added to make profiling with flame graphs work.strip
command rather than generating a stripped binary with gcc -s
. Again, this was to support profiling on the optimized binary.Lesson: It's surprising how many times simple metrics reveal problems. I don't know what the cause of this problem is yet, but I'm sure I'll learn something when I figure it out.
timetoplatypus
brought up on #oil-dev
.0.5
release likely won't come until August or September.Feel free to send me feedback in the comments!
[1] Recall that I released 0.5.alpha2
in early March, when I built Oil with
the OPy bytecode compiler.