Why Sponsor Oils? | blog | oilshell.org

Oils Roadmap: What We Can Use Help With

2023-03-25 (Last updated 2023-05-04)

I wrote in the last post that we want to stabilize the compatible OSH, and resume work on YSH (formerly known as the Oil language).

I'd like to bring more people into the project, and that requires explaining what we need help with!

For now, I'm dumping links to recent Zulip planning threads. For some reason the titles alone help me think about the project.

I don't expect that readers will follow it all, but I expect to refer to this post in private and public conversations. I may edit it as we go.

Ask me questions here or on Zulip!

Table of Contents
Polishing OSH
Features We Know About
Feedback / Conceding to Reality
Testing / Debugging
Renaming
Re-organize and Improve Docs
Performance at Two Levels
Shell Interpreter in Python
mycpp Runtime in C++
Value Types in the Metalanguage?
Polishing Our Dev Tools
Testing and Releasing
Paving the way for YSH
Table Stakes
History Language
Language Enhancements
Task Files / "Scripts to Rule Them All"
Conclusion
What's Next?
Open Questions / Risks
Appendix: Recent Tool Improvements
mycpp
ASDL

Polishing OSH

I'm itching to work on YSH, but OSH needs to be polished and useful.

Features We Know About

Feedback / Conceding to Reality

We still need more testing of OSH. I just fixed a good getopts builtin bug reported by a user.

Testing / Debugging

Renaming

To accompany the project renaming, we have to rename environment variables and directories:

I'll talk about in the next post. We also might switch to date-based versioning, like Oils 23.04 for April 2023.

Re-organize and Improve Docs

May 2023 Update: In addition to the help builtin, I plan to overhaul the HTML docs. I started planning here:

Performance at Two Levels

We can optimize the shell in Python, or in C++.

Shell Interpreter in Python

Based on #oil-dev > Interpreter Optimizations in Python

Metrics / tools we're using for performance:

mycpp Runtime in C++

Based on #oil-dev > Plans for mycpp runtime

Near Term:

Medium Term

Long Term:

This thread has a lot of brainstorming, but I've narrowed it down to the above: GC Pressure Optimization List

Conclusion: There's a lot of fun work here! It would be nice to have someone to own the mycpp runtime.

Value Types in the Metalanguage?

These are speculative ideas to reduce allocations. Whether they're interesting depends on the results of the custom pool allocator.

Polishing Our Dev Tools

There's been a lot of progress recently. This section is based on these two threads:

Testing and Releasing

Paving the way for YSH

Table Stakes

History Language

May 2023 update: Shell has history substitution like !! and !$. A few years ago, I implemented it as bash does: with a separate lexing pass that's only active in the interactive shell.

But this causes problems because "I'm excited !!" within double quotes also expands history. Moreover, it conflicts with egg expressions, which use ! for negation.

So I believe we should rewrite history substitution as part of our single-pass, static parsing. In non-interactive shells, it will be easy to treat the history tokens as literals.

Language Enhancements

I should write a separate post about #oil-discuss > Oil Language 2023. Here are some rough notes for now:

Upcoming breakages:

May 2023 Updates:

Upcoming features:

Data languages:

Task Files / "Scripts to Rule Them All"

May 2023 Update: The "task file" pattern should be built into Oils. Make is being used/abused as a task runner, and it introduces a bad textual macro language on top of shell.

Chris and Aidan both improved the used of task files in our own repo. More links:

Conclusion

This is pretty ambitious, but we've been knocking down tasks at a good rate lately. And I hope to get more help.

What's Next?

I could write these blog posts:

Open Questions / Risks

Refer to the last post.

Appendix: Recent Tool Improvements

I want to let contributors know that the codebase is in much better shape.

mycpp

I mentioned a bunch of improvements in the last post. The mycpp/examples all pass; the code is auto-formatted; and we removed hard-coded lists of names. Those names coupled mycpp to Oil.

However, CoffeeTableEspresso did hit a new smell with regard to variable vs. module naming. If you import a name loc, then mycpp will generate the wrong C++ for the local variable loc.

ASDL

Nice fix: