Tour of PLs¶
The selections listed below, sourced from DMOJ and the TIOBE Index, contain a diverse range of both widely-used and esoteric programming languages. Some of these are languages I am already very familiar with, but I will re-explore them anyway. Empty tour entries indicates that the corresponding language has not yet been explored.
For each language I explore, I aim to do a short tour of the language to get my toes wet. My goal is not a mastery of the language but rather a survey of it. In my tours, I aim to use the reference implementations when available. When there exists no reference implementation (or such a concept does not apply) for a particular language, I will use the most popular implementation available for the language.
January 16, 2025
Notes¶
Ada¶
Ada is a language I’ve been interested in for a long time, considering that it powers safety-critical use cases like fighter jets and space shuttles. Only now have I given it a proper look. The language’s extremely strong typing system and design-by-contract features are very intriguing. Indeed, numeric types that can be constrained to a range of values and unsigned “modulus” types that wrap around an arbitrary value are simply unheard of in other more mainstream languages, and they would be quite convenient for some competitive programming tasks I am used to. In addition, the ability to derive separate numeric types (e.g., different units, IDs) seems useful for domain-specific use cases (e.g., scientific). One major drawback is that its prose syntax is very verbose and unaesthetic, at least for me. Regardless, Ada is a memorable language that I might return to. I would like to see some of Ada’s features implemented to type systems of other languages (even Python!).
ALGOL 68¶
TODO
AWK¶
TODO
C¶
TODO
C#¶
I was caught off-guard by how modern the design of C# was, considering the letter “C” in its name. However, It did come off as a bit of a Java copycat. I definitely plan on using C# for a future project, perhaps using ASP.NET or involving GUIs.
C++¶
TODO
COBOL¶
TODO
Chez Scheme¶
TODO
Chicken¶
TODO
Clojure¶
TODO
Common Lisp¶
TODO
D¶
D is a seriously underrated language. It has a beautiful modern syntax that comes close to, or, in some cases, surpasses that of Kotlin (my favourite language). For example, D’s novel innovations like the uniform function call syntax (UFCS), an ability to put unit tests and implementations in the same file, the pure specifier, subtyping (alias), opDispatch/Apply, and a rich library of compile-time facilities feel so natural and painfully obvious. It is really a shame that D is so neglected just because it is not backed by any big company like Go (Google), Rust (Mozilla), and Swift (Apple).
Dart¶
TODO
Elixir¶
TODO
Erlang¶
TODO
F#¶
TODO
Forth¶
TODO
Fortran¶
Who’d have known I would get a taste of punch card programming by learning Fortran (.f
files)? Fortran’s array mechanism feels impressively modern, considering its age. Still, as a whole, the language feels old and clunky, with many strange design decisions. To me, it feels like a relic of the past, and definitely unsuited for writing an entirely new project with.
Speaking of, why on earth is Fortran ranked tenth on the TIOBE index, ahead of languages like PHP, Rust, MATLAB, Ruby, R, and Swift?
Go¶
Essentially, a modern C, featuring garbage collection, larger standard libraries, easier parallelism, and saner design. Perfect for most concurrent programming tasks.
Groovy¶
TODO
Haskell¶
A skilled programmer, after looking at my Python code, once asked me whether or not I know Haskell. Back then, I have never done any functional programming. So, I said no, and he seemed intrigued. I wasn’t sure, but I had a feeling he meant that as a compliment!
After getting familiar with functional programming (previously OCaml and now Haskell), I am quite certain it was indeed a compliment! However, the short 5-minute tutorial I tried on their website doesn’t seem to do justice to the language. Overall, it seems more or less similar to OCaml which I just learned. I have yet to learn some concepts I know exist in Haskell like Monads. I might come back to this to learn more.
Java¶
TODO
JavaScript¶
TODO
Julia¶
TODO
Kotlin¶
Kotlin has a beautiful design that surpasses even that of Scala. It also represents one of the rare cases where builtins actually follow their own naming conventions and style guides (unlike, say, Python). JVM compatibility and compilation to JavaScript are great. However, the platform-dependent standard library support is a bit confusing.
Lean¶
TODO
Lua¶
TODO
OCaml¶
The language of Jane Street! This is also the first time I’ve ever tried out a functional programming language, and boy was I in for a treat… Everything feels elegant and without waste. It overcomes so many of the issues I encountered with traditional imperative programming languages. I am concerned about its (and functional programming languages’) performance however, given that (almost) everything is to be implemented recursively.
Objective C¶
TODO
Perl¶
TODO
PHP¶
TODO
Pascal¶
TODO
Pike¶
TODO
Prolog¶
Python¶
TODO
R¶
TODO
Raku¶
TODO
Racket¶
TODO
Ruby¶
I heard that a skilled web developer can set up a website with Ruby on Rails in just five minutes. There is no question that Ruby is widely used for web applications (e.g., Rails and Jekyll). But, is Ruby used for anything other than the web? I genuinely don’t know.
As a programming language, however, I do admire Matz’s steadfast defense of dynamic typing, especially when strict programming practices have become such a norm. With that said, I would choose to use Python over Ruby for most tasks.
Rust¶
TODO
Scala¶
TODO
Swift¶
TODO
Tcl¶
TODO
Visual Basic¶
TODO
Zig¶
I was quite surprised to find that Vim has an excellent built-in plugin for Zig. Their brief but extremely technical overview sure convinced me of its overwhelming advantages over C (built-in error handling, null safety, reflection, tracing, etc.) and its unbelievable interoperability with C. What is particularly ambitious is that Zig seeks to be an alternative to even C compilers and make systems, allowing an easy and gradual transition from C to Zig for legacy projects. I have to confess that I was unable to fully understand every single part of the overview. This is definitely a language I will keep an eye on.