The Cyan Object-oriented Language

Cyan is a statically-typed and prototype-based language for the JVM. The language has several innovations mainly in its Metaobject Protocol that allows tailoring the language to the developer’s goals. It supports all the expected features of modern languages and much more.
Below is the “Hello world” program. Soon there will be an online Cyan compiler and a short Cyan course.

package main object Program func run { "Hello world" println } end


No bells and whistles, complex features are implemented using metaobjects, outside the language

The compiler guarantees that every local variable and object field is initialized before used, with few exceptions

Nullable types are only possible with unions like String|Nil

Code either as in a statically-typed language or as in a dynamically-typed language or both at the same time

Restrict the acceptable real types for generic prototypes using a concept language

Exception handling is made using regular message passing

There is a huge Metaobject Protocol with six different kinds of metaobjects that allows to tailor the language to the developer’s needs

And much more

Context objects are a generalization of anonymous functions
A project language for defining the program (see the Cyan manual)
Java integration (you can import and use Java packages)
Safety mechanisms by default