I'm going to to write about my recent work on the OSH runtime. The last few posts explain the context for this work:
Working Toward an OSH Release. I wanted to release the shell this summer, but it wasn't clear how much work was left before it would be useful. Attempting to run real shell programs is a good way to see what's left.
How I Use Tests. I introduced the test-driven style of working, with 4 kinds of test. I started with coarse gold tests, then nail down behavior with spec tests, and then sometimes I need fine-grained unit tests. The gold tests helped me choose what features to implement.
How I Plan to Use Tests: Transforming OSH. I warned readers again that OSH will be too big and too slow upon initial release. The good news is that the same tests will help us address this problem.
OSH Runs Real Shell Programs -- After fixing the hardest bug ever, OSH can run a real program I didn't write! This is the end of the journey; now I'll go back to the beginning.
I worked on OPy and the OVM build system for several weeks, including most of April. Thus, as of mid-May, the runtime was basically as I described in late March, in Measuring Progress With Tests.
That is, there were around 375 tests passing, but I hadn't run any significant shell programs with OSH.
So I started hacking away, using gold tests and spec tests as a guide.
I'll describe this journey in the next few posts. The work fell into these categories:
echo hi | wc -l &.shift, read, set, etc.nounset, errexit, etc.And of course:
This inspired some higher level thoughts on: