Skip to content
David Jeske edited this page May 24, 2017 · 67 revisions

The Irken Language

Irken is a simplified, statically-typed dialect of Scheme. It uses an ML-like type system supporting parametric polymorphism (i.e., "let polymorphism"), algebraic datatypes, and row polymorphism (a form of structural types). With type inference and a pattern-matching syntax, it could be considered ML with a lisp/scheme syntax. For the motivation behind Irken, see History.

If you prefer to jump right to the action, skip to the Simple Code Examples

To build Irken, see the README file

We think Irken is cool because:

  • type-declarations are not required -- like in Python, Ruby, Javascript, Clojure
  • type errors are reported at compile time -- like in Haskell, Java, C#, C++
  • objects are compatible because of their structure -- like OCaml, Google Go
  • pointers can't be null unless you say so -- like in Haskell, ML, OCaml, Rust
  • it has exhaustive pattern matching -- like Haskell, ML, OCaml, Rust
  • it uses heap allocated stack frames -- like Scheme, Google Go, Stackless Python

The compiler and libraries are distributed under a simplified BSD License.

Features

Restrictions

  • Lists are monomorphic, all elements must be of the same type
  • No function overloading or multi-methods. Each function has a single type signature.
  • No runtime dynamic casting. It's not possible for a function to take any type.
  • No unified type system. Immediate types such as number, char, and string are not objects.
  • (Currently) No runtime reflection information. Information can be built and saved by macros.
  • (Currently) No REPL loop. All programs are compiled.

Next: Simple Code Examples


References