Radon

Radon is a modern programming language with a nice syntax and a decent execution speed. What more could you want?

Here's a nice example of the syntax:

new-position = move match key where
  | "w" -> 0, -1,
  | "a" -> -1, 0,
  | "s" -> 0, 1,
  | "d" -> 1, 0

First, you'll probably notice that you're allowed hyphens in your variable names, leading to the convention in Radon of using "kebab-case" for identifiers. You'll also notice the Haskell-like match expression, the tuple literals without parentheses, and the lack of semi-colons. move match key where means call the function "move" on the result of a match expression over the variable key, which then goes on to specify the different branches of the match.

One of the main ideas in designing the syntax was to use, or at least require, as few parentheses as possible. Doing this makes a cleaner syntax, which is thus easier to read. A good example of this is with tuples — like in the last example, you can write a tuple either as (1, 2, 3) or the exactly equivalent 1, 2, 3. Of course, it may sometimes be necessary to use the first, but the latter is potentially more readable in a large program. You'll also notice the lack of brackets in loops, conditionals, and other structures:

for name in names do
  print name
end

Radon comes with a new kind of type system. It doesn't use classes, structs, records, or any of that. It uses models, which are very similar to classes in that they are "cookie-cutters", if you will, which are used to instantiate new objects. Here's an example of some models in action:

animal = model name, species

dog = model name : animal name, "dog"
cat = model name : animal name, "cat"

dog.woof = print "woof!"

a = dog "dog a"
b = cat "cat b"

assert $ a == {
    __model: dog,
    name: "dog a",
    species: "dog",
}

Models are really good at inheritance, since they have a really short syntax for setting parent fields. They're also easy to extend, both your own models and ones from libraries, since you can add a method as simply as you would set a regular variable. The assertion at the end is to show that model instances are literally just hashmaps with a __model field.