Programming Languages
“Programming languages” sometimes refers to languages used to program but it also can refer to the study of programming languages as a research interest, usually abbreviated as PL. I’ll use PL when I’m talking about the research topic and “programming languages” when referring to the languages themselves.
I’m currently working with Caleb Stanford at the Davis PL lab. I presented my poster about ReDoS at UC Davis’ URC last Spring. I also maintain a linear-time regex engine called Regolith related to this research.
I often get asked “Why study programming languages?” and the insinuation sometimes is that the field of PL is to learn about languages that have already been made, and although this is true, the aim of PL research is to improve the future of programming languages.
An example from Rust’s borrow checker; Rust used Stacked Borrows to check if all the borrowing rules were followed. This was the original borrowing model for Rust and was defined in the paper Stacked Borrows: An Aliasing Model for Rust. Later, a paper called Tree Borrows came out that improved upon the borrowing model and soon implemented into Rust. I’m breezing over tons of interesting history, but the point remains; programming language research is, in my opinion, the main driver of improvement for languages.
The usual progression is PL researchers have a novel insight about a language, they define an extension to a language or a mini “toy” language that shows off this new feature or concept. Later, this feature is implemented when a group is building a new language. I don’t want to take away from non-academic contribution to programming languages (not the field) because curious individuals and corporate groups have had tons of positive influence as well.
Often I explain that if you improve the usefulness of the language, it becomes easier to write software. If you improve the security of the language, it becomes easier to write safer code. Python removed the ability to cause a null pointer exception by not having pointers, removed memory management both to make it easier and to prevent memory issues. This however doesn’t mean it’s an objectively better language, it just has different trade-offs.
I enjoy making and trying many programming languages. I maintain a list of languages that I have written. It’s fun and educational to make your own language. My friend Adam and I would frequently have an idea for a language and we’d go off and try to build it.
The languages that I’ve tried include: Common Lisp ( CLISP, SBCL), Arc ( Arc, Anarki), Prolog ( SWI), Crystal, OCaml, Elixir, Nim, Racket, Clojure, Hy, Al, V, Zig, Pony, Julia, and Haskell. There is value in learning new languages, especially if you only know one or two, because it lets you generalize programming as problem solving, instead of specific syntax or methods. I feel like I write better Python now that I’ve used functional languages, because I am now more aware of mutable data.
