A programming language
Twenty-five keywords.
One obvious way.
Korrin is a real, usable language with as little incidental complexity as possible. Indentation defines blocks — no braces. A newline ends a statement — no semicolons. Dynamically typed, implemented in Rust.
A taste
It reads the way you would say it
Nothing sits between you and the idea. Here is FizzBuzz: a function, a loop over a range, and a four-way branch.
fizzbuzz.kor
# count to n, but Fizz / Buzz on the multiples
fn fizzbuzz(n):
for i in range(1, n + 1):
if i % 15 == 0:
print("FizzBuzz")
elif i % 3 == 0:
print("Fizz")
elif i % 5 == 0:
print("Buzz")
else:
print(i)
fizzbuzz(15)
output
1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz
Design
Five rules it holds to
Each of these is a decision on the record. When two features would do the same job, Korrin keeps one.
Indentation is the block
No braces, no end. The structure you see is the structure that runs.
A newline ends a statement
No semicolons, and no way to cram two statements onto one line.
Twenty-five keywords
The whole reserved vocabulary fits in a sentence. Nothing is there because another language has it — each one buys a capability.
Dynamically typed
No required annotations. Values carry their type; you carry the intent.
One clear way
For any given construct there is a single obvious expression of it — the rest were left out on purpose.
Learn Korrin
Where to start
Korrin isn't packaged for install yet — the interpreter is still maturing. Until it is, the guide and the specification are how to get to know the language.
The guide
A hands-on walk through the whole language, chapter by chapter. Every example is executed on each build, so it can't drift.
The specification
The exact rules — lexical structure, grammar, semantics, every error code. Normative: if the implementation disagrees, one of them is a bug.
Design notes
Every meaningful decision, written down when it was made — why a feature works one way and not another.
Korrin runs real programs today: variables, control flow, functions, closures, classes with single inheritance and super, lists and maps with methods, string interpolation, exceptions (try / except / finally / raise), and a module system with a small standard library (math, io) — all covered by a specification whose examples are executed on every build.
It is pre-release. The language and its API will still change; next is a bytecode compiler and VM. The specification and design notes grow with it.