Abstract
DESCRIPTION:
In this talk I will share my experience of developing a programming language and shell (Elvish, https://elv.sh) in Go.
The talk will cover the following topics:
- A quick intro to Elvish itself, showing its full-fledged programming language and interesting interactive features
- A dive into Elvish's interpreter, as a case study of how to implement a dynamic language interpreters in Go. This will include topics like:
- How I implemented a tree-walking interpreter and static analyzer in Go
- How I avoided reinventing the wheel by leveraging Go's types and standard libraries
- How I used Go's concurrency primitives to implement shell semantics like pipelines
- Techniques for testing Elvish, including:
- Testing Elvish as a programming language: how I invented a simple DSL and a VS Code plugin to make writing interpreter tests smooth and painless
- Testing Elvish as an interactive shell: A framework for writing terminal "UI tests" in Go
- Building a CI/CD pipeline from scratch with Go and Elvish: Elvish's main website (https://elv.sh) and prebuilt binaries (https://dl.elv.sh) are updated at every Git commit, by a mix of Go programs and Elvish scripts. I will share my techniques and experience building the pipeline.