See the blog index for a chronological list of posts.
Link to directly to a tag #FOO with tags.html#FOO.
#ASDL
| 2016-12-05 | Type Checking vs. Metaprogramming; ML vs. Lisp |
| 2016-12-11 | What is Zephyr ASDL? |
| 2016-12-16 | Analogies for ASDL |
| 2017-01-04 | Success with ASDL |
| 2017-01-06 | ASDL Implementation and Use Cases |
| 2017-01-09 | What is oheap? |
| 2017-01-21 | Pretty Printing ASTs with ASDL, and Metaprogramming |
| 2017-01-26 | The Thinner Waist of the Interpreter |
#awk
| 2016-11-13 | Shell, Awk, and Make Should Be Combined |
| 2016-11-14 | Example Code in Shell, Awk, and Make |
| 2017-10-25 | Comments About Shell, Awk, and Make |
#bernstein-chaining
| 2017-01-13 | Shell Has a Forth-like Quality |
| 2017-01-31 | Bernstein Chaining of ssh and su |
#blog-meta
| 2016-10-10 | What Oil Looks Like, and a Plan for This Blog |
| 2016-10-15 | Blog Roadmap, and Project Roadmap |
| 2016-11-20 | Blog Retrospective #1 |
| 2016-12-29 | Using Reddit for Blog Comments |
| 2017-04-20 | Switching to "Twitter Mode" |
| 2017-04-21 | Blog Retrospective #2 |
| 2017-09-19 | How to Quickly and Correctly* Generate a Git Log in HTML |
| 2017-10-24 | Status Update: Parser Correctness and Performance |
| 2017-11-30 | Blog Retrospective #3 |
| 2018-01-31 | Popular Posts with Many Comments |
| 2018-03-25 | I'm Attending Recurse Center this Summer |
#blog-topics
| 2017-02-26 | Status Update and Blog Backlog |
| 2017-05-31 | Post-Vacation Update and Build System Observations |
| 2017-07-31 | Post-Release Blog Topics |
| 2017-10-24 | Status Update: Parser Correctness and Performance |
| 2017-10-25 | Comments About Shell, Awk, and Make |
| 2018-07-22 | Summer Blog Topics |
#boil
| 2017-05-05 | Rewriting Python's Build System From Scratch |
| 2017-05-31 | Post-Vacation Update and Build System Observations |
#correction
| 2017-11-28 | Correction: How to Parse Here Documents |
#data-structures
| 2016-11-29 | Status Update: the Backbone of the Interpreter |
| 2017-02-11 | From AST to Lossless Syntax Tree |
#escaping-quoting
| 2017-01-31 | Bernstein Chaining of ssh and su |
| 2017-08-31 | Problems With the test Builtin: What Does -a Mean? |
| 2017-09-19 | How to Quickly and Correctly* Generate a Git Log in HTML |
| 2017-09-29 | Git Log in HTML: A Harder Problem and A Safe Solution |
| 2018-02-14 | CommonMark is a Useful, High-Quality Project |
#FAQ
| 2018-01-28 | Why Create a New Unix Shell? |
| 2018-03-04 | Building Oil with the OPy Bytecode Compiler |
#lexing
| 2016-10-19 | Lexical State and How We Use It |
| 2017-12-15 | The Oil Lexer: Introduction and Recap |
| 2017-12-17 | When Are Lexer Modes Useful? |
#linux-distro
| 2018-01-15 | Success with Aboriginal, Alpine, and Debian |
#make
| 2016-11-13 | Shell, Awk, and Make Should Be Combined |
| 2016-11-14 | Example Code in Shell, Awk, and Make |
| 2017-05-05 | Rewriting Python's Build System From Scratch |
| 2017-05-31 | Post-Vacation Update and Build System Observations |
| 2017-10-25 | Comments About Shell, Awk, and Make |
#metaprogramming
| 2016-11-30 | A Problem with Type Checking |
| 2016-12-05 | Type Checking vs. Metaprogramming; ML vs. Lisp |
| 2017-01-21 | Pretty Printing ASTs with ASDL, and Metaprogramming |
#metrics
| 2016-10-10 | What Oil Looks Like, and a Plan for This Blog |
| 2017-01-26 | The Thinner Waist of the Interpreter |
| 2017-03-23 | Measuring Progress with Tests |
| 2017-06-02 | Project Metrics |
| 2017-09-09 | Please Try the OSH 0.1 Release |
#misc
| 2016-12-23 | A Math Problem: Function-Directed Enum Labeling |
| 2016-12-26 | Four Functions and Enum Labelings |
| 2016-12-27 | Bespoke Superoptimization |
| 2016-12-30 | Questions about Superoptimization |
#oheap
| 2017-01-09 | What is oheap? |
| 2017-12-22 | OSH 0.3 - Optimization, Benchmarks, and Bug Fixes |
| 2018-08-19 | Release of OSH 0.6.pre2 |
#oil-dev
| 2016-11-19 | Oil is on Github |
| 2017-01-26 | The Thinner Waist of the Interpreter |
| 2017-03-04 | If you have Debian/Ubuntu, and Five Minutes |
| 2017-03-09 | Oil-dev is Alive! |
| 2017-03-23 | Measuring Progress with Tests |
| 2017-06-22 | How I Use Tests |
| 2017-06-24 | How I Plan to Use Tests: Transforming OSH |
| 2018-04-26 | oil-dev is moving to Zulip |
#oil-language
| 2016-11-06 | Thirteen Incorrect Ways and Two Awkward Ways to Use Arrays |
| 2016-11-07 | Contrived Example Found in the Wild |
| 2016-11-18 | Problems With $(( |
| 2016-11-30 | A Problem with Type Checking |
| 2017-02-05 | Translating Shell to Oil |
| 2017-02-06 | Translating Shell to Oil, Part Two |
| 2017-09-29 | Git Log in HTML: A Harder Problem and A Safe Solution |
| 2018-01-28 | Why Create a New Unix Shell? |
#oil-release
| 2017-07-23 | Please Try the First OSH Release |
| 2017-09-09 | Please Try the OSH 0.1 Release |
| 2017-11-10 | OSH 0.2 - Parsing One Million Lines of Shell |
| 2017-12-22 | OSH 0.3 - Optimization, Benchmarks, and Bug Fixes |
| 2018-02-03 | OSH 0.4 - A Shell Language That's Nearly Feature Complete |
| 2018-04-30 | Release of OSH 0.5.alpha3 |
| 2018-07-23 | OSH 0.5 - A Release with Many Contributors |
| 2018-08-15 | Summer Vacation is Over! |
| 2018-08-19 | Release of OSH 0.6.pre2 |
#opy
| 2017-04-09 | An Unexpected Solution: Cobbling Together a Python Interpreter |
| 2017-04-23 | The OPy Front End is Working |
| 2017-06-24 | How I Plan to Use Tests: Transforming OSH |
| 2018-03-04 | Building Oil with the OPy Bytecode Compiler |
| 2018-03-27 | Addendum: Two Recurse Center Projects That Explain CPython |
#osh-to-oil
| 2017-02-05 | Translating Shell to Oil |
| 2017-02-06 | Translating Shell to Oil, Part Two |
#OVM
| 2017-04-09 | An Unexpected Solution: Cobbling Together a Python Interpreter |
| 2017-04-25 | OVM will be a Slice of the CPython VM |
| 2017-05-05 | Rewriting Python's Build System From Scratch |
| 2017-06-24 | How I Plan to Use Tests: Transforming OSH |
| 2018-03-04 | Building Oil with the OPy Bytecode Compiler |
#parsing
| 2016-10-20 | Parsing Bash is Undecidable |
| 2016-10-22 | New Terminology: Static Parsing vs. Dynamic Parsing |
| 2016-11-01 | Pratt Parsing and Precedence Climbing Are the Same Algorithm |
| 2016-11-02 | Review of Pratt/TDOP Parsing Tutorials |
| 2016-11-03 | Pratt Parsing Without Prototypal Inheritance, Global Variables, Virtual Dispatch, or Java |
| 2016-11-05 | Pratt Parsers Can Be Statically Typed |
| 2016-11-17 | OSH Can Be Parsed With Two Tokens of Lookahead |
| 2017-02-11 | From AST to Lossless Syntax Tree |
| 2017-03-30 | Precedence Climbing is Widely Used |
| 2017-03-31 | Pratt Parsing Index and Updates |
| 2017-04-22 | Code for the Shunting Yard Algorithm, and More |
#parsing-is-difficult
| 2017-12-17 | When Are Lexer Modes Useful? |
#parsing-shell
| 2016-10-12 | [ Is a Builtin, But [[ Is Part of the Language |
| 2016-10-13 | Oil Parses Shell Scripts Up Front in a Single Pass. Other Shells Don't. |
| 2016-10-17 | How to Parse Here Documents |
| 2016-10-19 | Lexical State and How We Use It |
| 2016-10-20 | Parsing Bash is Undecidable |
| 2016-10-22 | New Terminology: Static Parsing vs. Dynamic Parsing |
| 2016-10-26 | Grammar for Variable Substitutions |
| 2016-10-28 | The Five Meanings of #. And What Does ${####} Mean? |
| 2016-10-29 | Four Slashes and Three Meanings |
| 2016-11-17 | OSH Can Be Parsed With Two Tokens of Lookahead |
| 2016-11-18 | Problems With $(( |
| 2017-08-31 | Problems With the test Builtin: What Does -a Mean? |
| 2017-11-10 | OSH 0.2 - Parsing One Million Lines of Shell |
| 2017-11-28 | Correction: How to Parse Here Documents |
| 2017-12-15 | The Oil Lexer: Introduction and Recap |
| 2017-12-17 | When Are Lexer Modes Useful? |
#performance
| 2016-12-27 | Bespoke Superoptimization |
| 2016-12-30 | Questions about Superoptimization |
#project-roadmap
| 2016-10-15 | Blog Roadmap, and Project Roadmap |
| 2016-10-23 | Roadmap #2 |
| 2016-11-21 | Roadmap #3: Two Top Priorities |
| 2016-11-25 | Roadmap #3 Continued |
| 2017-02-27 | Review of Roadmap #3 |
| 2017-03-01 | Project Roadmap #4 |
| 2017-07-29 | Review of Roadmap #4 (abridged) |
| 2017-10-06 | Roadmap #5: Why Oil, and Why OSH? |
| 2018-01-15 | Success with Aboriginal, Alpine, and Debian |
| 2018-08-15 | Summer Vacation is Over! |
#project-updates
| 2016-10-10 | What Oil Looks Like, and a Plan for This Blog |
| 2016-10-11 | Oil Can Parse Real Shell Programs |
| 2016-10-14 | Oil Now Parses My /etc/init.d Directory |
| 2016-10-16 | debootstrap Parsed |
| 2016-10-24 | Four More Projects Parsed |
| 2016-11-09 | Parsing 183,000 Lines of Git's Shell Source Code |
| 2016-11-19 | Oil is on Github |
| 2016-11-29 | Status Update: the Backbone of the Interpreter |
| 2017-01-19 | On the Wiki: Project Goals and Related Projects |
| 2017-02-26 | Status Update and Blog Backlog |
| 2017-04-08 | The Riskiest Part of the Project |
| 2017-05-31 | Post-Vacation Update and Build System Observations |
| 2017-06-02 | Project Metrics |
| 2017-06-19 | Working Toward an OSH Release |
| 2017-07-02 | OSH Runs Real Shell Programs |
| 2017-07-28 | The Long Slog Through the Shell (abridged) |
| 2017-10-24 | Status Update: Parser Correctness and Performance |
| 2018-03-25 | I'm Attending Recurse Center this Summer |
| 2018-07-21 | Summer Status Update |
| 2018-08-15 | Summer Vacation is Over! |
#python
| 2017-04-08 | The Riskiest Part of the Project |
| 2017-04-09 | An Unexpected Solution: Cobbling Together a Python Interpreter |
| 2017-04-23 | The OPy Front End is Working |
| 2017-04-25 | OVM will be a Slice of the CPython VM |
| 2018-03-27 | Addendum: Two Recurse Center Projects That Explain CPython |
#recurse-center
| 2018-03-25 | I'm Attending Recurse Center this Summer |
| 2018-03-27 | Addendum: Two Recurse Center Projects That Explain CPython |
| 2018-07-21 | Summer Status Update |
| 2018-07-22 | Summer Blog Topics |
| 2018-07-23 | OSH 0.5 - A Release with Many Contributors |
| 2018-08-15 | Summer Vacation is Over! |
#sample-code
#shell-runtime
| 2016-10-18 | Shells Use Temp Files to Implement Here Documents |
| 2017-02-26 | Status Update and Blog Backlog |
| 2017-07-02 | OSH Runs Real Shell Programs |
| 2017-07-28 | The Long Slog Through the Shell (abridged) |
#shell-style-guideline
| 2017-08-12 | Avoid Directly Manipulating File Descriptors in Shell |
| 2017-08-31 | Problems With the test Builtin: What Does -a Mean? |
#shell-the-bad-parts
| 2016-10-20 | Parsing Bash is Undecidable |
| 2016-10-28 | The Five Meanings of #. And What Does ${####} Mean? |
| 2016-10-29 | Four Slashes and Three Meanings |
| 2016-11-06 | Thirteen Incorrect Ways and Two Awkward Ways to Use Arrays |
| 2016-11-07 | Contrived Example Found in the Wild |
| 2016-11-18 | Problems With $(( |
| 2017-08-12 | Avoid Directly Manipulating File Descriptors in Shell |
| 2017-08-31 | Problems With the test Builtin: What Does -a Mean? |
| 2018-08-19 | Release of OSH 0.6.pre2 |
#shell-the-good-parts
| 2017-01-13 | Shell Has a Forth-like Quality |
| 2017-01-15 | Pipelines Support Vectorized, Point-Free, and Imperative Style |
#testing
| 2017-03-04 | If you have Debian/Ubuntu, and Five Minutes |
| 2017-03-23 | Measuring Progress with Tests |
| 2017-06-22 | How I Use Tests |
| 2017-06-24 | How I Plan to Use Tests: Transforming OSH |
| 2017-11-10 | OSH 0.2 - Parsing One Million Lines of Shell |
#translated-post
| 2018-01-15 | Success with Aboriginal, Alpine, and Debian |
#type-checking
| 2016-11-30 | A Problem with Type Checking |
| 2016-12-05 | Type Checking vs. Metaprogramming; ML vs. Lisp |
#unix-tools
| 2017-01-31 | Bernstein Chaining of ssh and su |
| 2017-09-29 | Git Log in HTML: A Harder Problem and A Safe Solution |
#usage-tips
| 2017-01-31 | Bernstein Chaining of ssh and su |
| 2017-09-19 | How to Quickly and Correctly* Generate a Git Log in HTML |
| 2017-09-29 | Git Log in HTML: A Harder Problem and A Safe Solution |
| 2017-10-25 | Comments About Shell, Awk, and Make |
| 2018-02-14 | CommonMark is a Useful, High-Quality Project |
#utf8
| 2017-09-29 | Git Log in HTML: A Harder Problem and A Safe Solution |
| 2018-02-14 | CommonMark is a Useful, High-Quality Project |
| 2018-08-19 | Release of OSH 0.6.pre2 |
#why-a-new-shell
| 2017-01-19 | On the Wiki: Project Goals and Related Projects |
| 2017-10-06 | Roadmap #5: Why Oil, and Why OSH? |
| 2018-01-28 | Why Create a New Unix Shell? |
| 2018-07-22 | Summer Blog Topics |
Back to the blog index.