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

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.

Other

  • 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