-
-
Notifications
You must be signed in to change notification settings - Fork 165
Home
Welcome to the oil wiki!
- Contributing / Spec Tests
- Testing the Interactive Shell -- a bunch of manual test cases
- Debugging Completion Scripts -- the cool --debug-file option flag!
- Project Goals / Carrots
- Oil Deployments
- Git Tips -- Patterns for using Git on this project.
- Using Zephyr ASDL
- Implementing the Oil Expression Language
Implementation Details
External Resources -- External Resources on Unix shells, programming language design, and implementation
- Coprocess Protocol Proposal
- Shellac Protocol Proposal -- for shell-independent command-line completion.
- TSV2 Proposal
- Interactive Shell -- Ideas about the interactive shell and possibly graphical shell.
- Shell Security Problems
- Shell WTFs
- Unix Tools -- notes on the things that a shell interacts with. The shell "standard library".
- Little Languages
OSH Parser / OSH Optimization Log
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
Language Design and Theory of Computation
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.
Feature Detection Is Better than Version Detection
-
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. Orsh
,awk
, etc.