- cross-posted to:
- eric_posts_urls
- cross-posted to:
- eric_posts_urls
In this post I want to make this kind of simplicity more precise and talk about some reasons it’s important. I propose five key ideas for simple programming languages: ready-at-hand features, fast iteration cycles, a single way of doing things, first-order reasoning principles, and simple static type systems. I discuss each of these at length below.
Aside: simplicity in languages is interesting. I’d say most popular languages, from Rust and Haskell to Python and JavaScript, are not simple. Popular PL research topics, such as linear types and effect systems, are also not simple (I suppose all the simple concepts have already been done over and over).
Making a simple language which is also practical requires a careful selection of features: powerful enough to cover all of the language’s possible use-cases, but not too powerful that they encourage over-engineered or unnecessarily-clever (hard-to-understand) solutions (e.g. metaprogramming). The simplest languages tend to be DSLs with very specific use-cases, and the least simple ones tend to have so much complexity, people write simpler DSLs in them. But then, many simple DSLs become complex in aggregate, to implement and to learn…so once again, it’s a balance of “which features have the broadest use-cases while remaining easy to reason about”?
I honestly don’t think there’s a single language out there that’s more approachable and straightforward than PHP - it has the perfect amount of built in functionality… it’s not overwhelming like Java but also doesn’t make you constantly reinvent the wheel like C++ - both Go and Python have similarly right-sized STLs.
The stand out though (which I admit is becoming less relevant) is in its natural habitat. It was a language designed to produce HTML and it is extremely trivial to casually start programming in it. Do you have a table and want to splat out 10 trs without writing them one by one - write it once and wrap it in
<? for($i = 0; $i < 10; $i++) { ?>
and a closing brace and, well, look ma I’m a hacker!It is amazingly accessible and a large number of people had their first programming experience messing around with PHP.
You have to manually explain to the computer how to count to ten, in 2024, and you call that simple? Simple would be something like
<? 10.times { ?>
Even simpler is repeat 10 { }
} just stands for done.