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!).

January 28, 2025

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.

January 28, 2025

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).

February 3, 2025

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?

January 19, 2025

Go

Essentially, a modern C, featuring garbage collection, larger standard libraries, easier parallelism, and saner design. Perfect for most concurrent programming tasks.

January 18, 2025

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.

January 19, 2025

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.

January 18, 2025

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.

January 19, 2025

Objective C

TODO

Perl

TODO

PHP

TODO

Pascal

TODO

Pike

TODO

Prolog

https://lpn.swi-prolog.org/lpnpage.php?pageid=online

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.

January 19, 2025

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.

January 20, 2025