andychu edited this page Dec 6, 2018 · 44 revisions

Welcome to the oil wiki!

Contributing / Spec Tests

Project Goals / Carrots

External Resources -- External Resources on Unix shells, programming language design, and implementation

Oil Deployments

Protocol Designs


Shell Security Problems

Shell WTFs

Unix Tools -- notes on the things that a shell interacts with. The shell "standard library".

Little Languages

Structured Data Over Pipes

OSH Parser / OSH Optimization Log

Oil Dev

Git Tips -- Patterns for using Git on this project.


Programming Language Implementation

Parsing Case Studies -- What algorithms and tools do production-quality languages use for parsing?

Bootstrapping Case Studies -- How are languages bootstrapped?

Lossless Syntax Tree Pattern

Language Subsets -- an abstract but practical way of specifying a language

Compact AST Representation

Architecture of Various Interpreters

Programming Language Design

Language Data Models

Language Design and Theory of Computation

Oil Language Design

Blog planning:

  • Leadup: syntactic puns. List a bunch of examples.

  • Recap:

    • shell the good parts.
    • Shell the bad parts (everyone agreed on this.)
  • There is no more room to add features to shell: bash 4.4. The Literal Anti-Pattern.

  • Why add tables to Oil? Because the output of "ls" and "ps" are both tables.

  • Why add ADTs to Oil? Because we want to actually parse things rather than relying on regexes and macro processing. Sometimes that approach is good enough, but sometimes it isn't.

  • Why Awk? Because once you add hash tables and regexes to shell, which bash/zsh have already done, then it's almost an Awk already. The only difference is the implicit outer loop of awk (for each file, for each line, for each field).
  • Why Make? Because 90% of the lines in a Makefile are either variable assignments or literal shell.


Metaprogramming Use Cases

Partial Evaluation

Programming Patterns

Language Composition Bestiary

Exhaustive Test Suite

Blog Themes / Post Ideas

Parsing is Difficult

  • Interesting facts about other language implementations:

    • Clang AST, TypeScript external visitors with "switch", TableGen language in LLVM, sh/awk/C code gen in most shells.
  • Breaking abstractions -- the git log | python pipeline is like the Go-style of unicode handling with utf-8. You don't always have to parse, operate, serialize. Sometimes you can just massage the input.

  • Remote evaluation. ssh user@host find -type f -a -executable sends an expression over the wire, just like SQL does. Or sh, awk, etc.

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.