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 a short Cyan course.

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


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