“Thou shalt not make a machine in the likeness of a man’s mind” - Orange Catholic Bible

One of the most important decisions that you have to make when starting a new software project is the choice of programming language—and when I say programming language I am not really referring to only the surface syntax or even the execution model, but access to libraries and frameworks, as well as documentation and the communities that maintain and support such things.

The later are especially important when you are attempting to learn something new; you want some kind of assurance that your investment of time and energy will not go to waste and that when you get stuck, which you will at some point, you will not be interminably stuck.

As was mentioned in previous posts, Podcat is written in Go, and I am happy with that choice. However, when I was initially inspired to make a command line tool, Deno 1.0 had just been released—and because JavaScript is a language that I know well, I thought that building the program using Ryan Dahl’s new JavaScript/TypeScript runtime might be an interesting challenge.

Writing the program using Deno eventually faltered on the absence of a fully featured XML library. Not wanting to be diverted into the weeds of writing the code to parse RSS feeds, I looked to the next lanuage on my candidate list and decided upon the Lisp/Scheme variant known as Racket.

I got a little further using Racket but I eventually stumbled and fell at the hurdle of properly understanding Racket data structures. The Racket XML library uses an internal representation of XML called xexpr or XML expressions. However, converting between XML and xexpr did not work as expected so, finally, the batton was handed to Go, with which I was able to complete the race in short order.

Indeed, once I switched to Go, I was able to add all of the funcationality that I had envisioned and, with very little difficulty, extend the program in a couple of other directions that I had not considered at the outset.