Why Sponsor Oils? | blog | oilshell.org

Oil 0.12.4 - User Feedback

2022-08-24

This release addresses great feedback and bug reports on OSH and Oil. It's also a checkpoint for the work "under the hood" on the garbage collector, which is now being funded by NLnet.

Oil version 0.12.4 - Source tarballs and documentation.

Table of Contents
Summary and Acknowledgements
OSH
Oil Language
Eggex
Under the Hood
Closed Issues
Commit Log
What's Next?
Appendix: Metrics for the 0.12.4 Release
Spec Tests
Benchmarks
Native Code Metrics

Summary and Acknowledgements

Here are notable changes, with credits to users who tried Oil and sent feedback.

OSH

Oil Language

  if (len(42)) {
  ^~
'_tmp/a':1: fatal: Type error in expression: object of type 'int' has no len()

Please file a bug if you get bad or confusing errors. (This error should be more precise, but it now points to the right general location.)

Eggex

Under the Hood

Jesse Hughes and I have been working on the C++ translation. We're merging two proofs of concept:

  1. The "leaky" translation I did a couple years ago, which validated the performance and feasibility of translating Python to C++.
  2. The Cheney garbage collector.

I also did more work on the CI and devtools:

Closed Issues

Here is more detail on the issues above, and more.

#1281 Build error for x86_64: fanos.c needs -std=c99
#1278 Eggex with literal [ or ] translated incorrectly
#1271 Regex in a loop exits FATAL on second iteration
#1262 Run mycpp with a consistent Python version
#1258 Remove bare $foo in expression mode; it should be foo or "$foo"
#1257 printf crashes with NUL bytes, e.g. string `$'\U0'`
#1247 Get rid of old Str* layout (mylib_leaky)
#1243 CI should run with container version built from the repo
#1221 leaky bindings: get rid of Str0 and IsNulTerminated() before porting to GC
#1118 Missing location info
#815 Implement / document string <-> integer coercion rules

Commit Log

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

6198e29a Jesse Hughes [mycpp] Refactor/move mylib_old Str code into leaky_types (#1261)
b9d58e13 Jesse Hughes [mycpp] Continue porting old Str layout to GC layout (#1263)
019d835a Jesse Hughes [mycpp] Big refactoring to get rid of old Str layout (#1264)
23bf527e Jesse Hughes [mycpp] Move Str out of gc_heap namespace (#1265)
b16d5ddf Jesse Hughes [refactor] Big refactoring away from OLDSTL types, towards GC types (#1268)
e06b7928 Jesse Hughes [mycpp] Remove ALLOCATE macro hack (#1269)
bcaef989 Jesse Hughes [refactor] Remove duplicate test_str_replace (#1279)
1e10dcbe Jesse Hughes [mycpp runtime] Remove OLDSTL List and consolidate code (#1282)

What's Next?

Please try Oil and let me know what happens on Zulip or Github!

Appendix: Metrics for the 0.12.4 Release

These metrics help me keep track of the project. Let's compare this release with the last one announced, version 0.12.0.

Spec Tests

We've been working under the hood, so OSH didn't change that much.

I wrote new tests to cover Oil's integer arithmetic and comparison behavior, and eggex.

Benchmarks

The performance of the oil-native parser reflects current work "under the hood". Context: #oil-dev > Two Changes That Will Decrease Perf

Wall time measurements for 0.12.4:

I want to get back to bash parity, but we should get a basic garbage collector working first.

Native Code Metrics

The size of the translated code remained the same:

The binary got unexpectedly smaller! This could be due to removing std::vector<T> in favor of our garbage-collected List<T>.