Skip to content
andychu edited this page Jul 2, 2019 · 118 revisions

Welcome to the oil wiki!

For Users

For Developers

Implementation Details

Reference

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

Protocol Designs

Other Designs

Analysis of Unix Shell

OSH Parser / OSH Optimization Log

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

Metaprogramming Use Cases

Partial Evaluation

Programming Patterns

Feature Detection Is Better than Version Detection

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.

Clone this wiki locally