Why Sponsor Oils? | blog | oilshell.org

What Oils Looks Like in 2024

2024-09-09

Note: I plan to move this post to our new domain https://oils.pub, which reflects the project's renaming.


I started writing an announcement for Oils 0.23.0, which may be the longest post ever. A lot has happened in 3 months!

But to kick off the new site, I want to write a few short posts. I have these drafts:

  1. What Oils Looks Like in 2024 - this post
  2. Oils Is Still Small and Flexible
  3. Missing Retrospectives on Oils
  4. Oils - Grand Ideas and Fiddly Details
  5. Oils 0.23.0 - User Feedback, Bug Bounty, and Writing YSH Code

I put a screenshot of our Zulip channels to the right, because it's now where everything happens.

Table of Contents
Three Interleaved Languages
Seven Parts of YSH
Thirteen Parts of the Oils Project
Conclusion
Appendix

 

Let's start out with a brief review, and then I'll show the tables.

Three Interleaved Languages

The core of the Oils project is:

You can use OSH by itself, YSH by itself, or upgrade from OSH to YSH.

Seven Parts of YSH

Let's break YSH down into 7 parts. Some of them correspond to chapters in the Oils Reference.

For more detail, see A Tour of YSH.

 

Part Notes Example
Commands and Words simplified shell
ls /tmp | grep -e $pat | wc -l
Expressions syntax like Python/JS
var person = {name: 'bob', age: 25}
var x = 42 + a[i] + person.age + f(x)
Types and Methods the runtime model
call mylist->append(42)
Procs procedures / processes
proc my-copy (src, dest) {
  cp --verbose $src $dest
}
Funcs pure functions
func f(io) {
  var block = ^(ls /tmp)
  return (io.captureStdout(block))
}

Hay

express data with code
hay define Package

Package cpython {
  version = '3.12'
  proc build {
    ./configure
    make
  }
}

Eggex

composable patterns
var pat = / digit '-' digit /

Thirteen Parts of the Oils Project

To make something useful, we need more than the 3 languages! There are actually 10 more parts to the project, which I sketch in this table.

Each part is loosely associated with Zulip streams. Please join https://oilshell.zulipchat.com/ if interested.

Some parts have named subprojects. I've mentioned some of them on the blog, and others only on Zulip.

 

Part What is it? Subprojects Zulip streams

Core Languages

OSH compatible shell POSIX, bash compat #oil-help
#oil-discuss-public
#language-design
YSH new shell catbrain † #language-design
J8 Notation text formats JSON8, J8 Lines, TSV8, NIL8 † #data-languages
#doc-languages †
Protocols inter-process communication BYO #protocols

Essential Parts

Interactive Shell UI, maybe GUI Completion, Headless shell, Pretty Printing #shell-autocompletion
#shell-gui
Standard Library for OSH and YSH Task files, Testing, Flag parsing #api-design
Language Tools highlighter, formatter, tree-shaking vim, micro-syntax #tools-for-oils
Apps Show that Oils works #projects-with-oils
#containers
#nix

Writing - as important as code

Docs Oils Reference, User guides, Design docs #oil-documentation
Blog New oils.pub website #blog-comments
#blog-ideas
#blog-ideas-mentioned

Under the Hood

Shell Runtime shared between OSH and YSH syscalls, signals, UTF-8, integers, floats #shell-runtime
#performance
#big-integer
C++ Translation for speed mycpp, Zephyr ASDL, Pea + Yaks † #performance
#zephyr-asdl
#yaks †
Research † Experiments that may or may not "graduate" Evolution of Soil CI #distributed-shell
#server-side

† experimental ideas

Conclusion

I'm glad I took the time to make these tables. What I take away is:

 

What's next? As mentioned, I want to write these posts:

Appendix

In 2021, I mentioned 7 parts of the project:

This new list of 13 parts is more accurate, which gives us a feeling for how the project has grown over the years.