Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.
Sign upHome
Welcome to the oil wiki!
External Resources -- External Resources on Unix shells, programming language design, and implementation
Shell
Interactive Shell -- Ideas about the interactive shell and possibly graphical shell.
Unix Tools -- notes on the things that a shell interacts with. The shell "standard library".
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?
Language Subsets -- an abstract but practical way of specifying a language
Architecture of Various Interpreters
Programming Language Design
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.
- Related: Oil and the R Language
- 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.
Programming Patterns
Blog Themes / Post Ideas
-
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 | pythonpipeline 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 -executablesends an expression over the wire, just like SQL does. Orsh,awk, etc.